Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,7 @@ builds/gnu/*.pc
bin
build
obj
non-persistent

# KDevelop IDE
/*.kdev4
Expand Down
13 changes: 13 additions & 0 deletions builds/cmake/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -168,6 +168,15 @@ endif()
#------------------------------------------------------------------------------
include(CheckLinkerFlag)

#------------------------------------------------------------------------------
# Configurable file(s).
#------------------------------------------------------------------------------

configure_file(
${CMAKE_CURRENT_SOURCE_DIR}/../../include/bitcoin/database/version.hpp.in
${CMAKE_CURRENT_BINARY_DIR}/include/bitcoin/database/version.hpp
@ONLY )

#------------------------------------------------------------------------------
# libbitcoin-database library
#------------------------------------------------------------------------------
Expand Down Expand Up @@ -209,6 +218,10 @@ target_sources( libbitcoin-database
BASE_DIRS "${CMAKE_CURRENT_SOURCE_DIR}/../../include"
FILES
${libbitcoin_database_HEADERS}
FILE_SET HEADERS
BASE_DIRS "${CMAKE_CURRENT_BINARY_DIR}/include"
FILES
"${CMAKE_CURRENT_BINARY_DIR}/include/bitcoin/database/version.hpp"
PRIVATE
${libbitcoin_database_SOURCES}
)
Expand Down
3 changes: 2 additions & 1 deletion builds/gnu/Makefile.am
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@ lib_LTLIBRARIES = src/libbitcoin-database.la
src_libbitcoin_database_la_LIBS = src/libbitcoin-database.la

src_libbitcoin_database_la_CPPFLAGS = \
-I${top_builddir}/include \
-I${srcdir}/../../include \
${libbitcoin_system_BUILD_CPPFLAGS}

Expand Down Expand Up @@ -79,7 +80,7 @@ include_bitcoin_database_HEADERS = \
${srcdir}/../../include/bitcoin/database/query.hpp \
${srcdir}/../../include/bitcoin/database/settings.hpp \
${srcdir}/../../include/bitcoin/database/store.hpp \
${srcdir}/../../include/bitcoin/database/version.hpp
include/bitcoin/database/version.hpp

include_bitcoin_database_filedir = \
${includedir}/bitcoin/database/file
Expand Down
1 change: 1 addition & 0 deletions builds/gnu/configure.ac
Original file line number Diff line number Diff line change
Expand Up @@ -288,6 +288,7 @@ AS_IF([(test "x${with_tests}" != "xno")],
AC_CONFIG_FILES([
Makefile
libbitcoin-database.pc
include/bitcoin/database/version.hpp:${repository_root_dir}/include/bitcoin/database/version.hpp.in
])

AC_OUTPUT
89 changes: 89 additions & 0 deletions builds/msvc/properties/GitSubstitute.ps1
Original file line number Diff line number Diff line change
@@ -0,0 +1,89 @@
# GitSubstitute.ps1
# Substitutes @TOKEN@ placeholders in a template (.in) file using values passed from MSBuild.
# Intended to be invoked by GitSubstitution.props.

[CmdletBinding()]
param(
[Parameter(Mandatory = $true)]
[string] $InputPath,

[Parameter(Mandatory = $true)]
[string] $OutputPath,

[Parameter(Mandatory = $true)]
[string] $VersionMajorToken,

[Parameter(Mandatory = $true)]
[string] $VersionMinorToken,

[Parameter(Mandatory = $true)]
[string] $VersionPatchToken,

[Parameter(Mandatory = $true)]
[string] $GitCommitHashToken,

[Parameter(Mandatory = $true)]
[string] $GitOriginUrlToken,

[Parameter(Mandatory = $true)]
[string] $GitDirtyToken,

[Parameter(Mandatory = $true)]
[string] $VersionMajorValue,

[Parameter(Mandatory = $true)]
[string] $VersionMinorValue,

[Parameter(Mandatory = $true)]
[string] $VersionPatchValue,

[Parameter(Mandatory = $true)]
[AllowEmptyString()]
[string] $GitCommitHash,

[Parameter(Mandatory = $true)]
[AllowEmptyString()]
[string] $GitOriginUrl,

[Parameter(Mandatory = $true)]
[string] $GitDirty
)

$ErrorActionPreference = 'Stop'

function Escape-RegexLiteral {
param([string] $Text)
return [regex]::Escape($Text)
}

if (-not (Test-Path -LiteralPath $InputPath)) {
throw "Input template not found: $InputPath"
}

$outDir = Split-Path -Parent $OutputPath
if ($outDir -and -not (Test-Path -LiteralPath $outDir)) {
New-Item -ItemType Directory -Path $outDir -Force | Out-Null
}

$content = Get-Content -LiteralPath $InputPath -Raw

# -replace treats the pattern as regex; escape tokens so '@...@' is matched literally.
$replacements = @(
@{ Token = $VersionMajorToken; Value = $VersionMajorValue }
@{ Token = $VersionMinorToken; Value = $VersionMinorValue }
@{ Token = $VersionPatchToken; Value = $VersionPatchValue }
@{ Token = $GitCommitHashToken; Value = $GitCommitHash }
@{ Token = $GitOriginUrlToken; Value = $GitOriginUrl }
@{ Token = $GitDirtyToken; Value = $GitDirty }
)

foreach ($r in $replacements) {
$pattern = '@' + (Escape-RegexLiteral $r.Token) + '@'
# Replacement string: use MatchEvaluator so $ and other specials in values stay literal.
$content = [regex]::Replace($content, $pattern, { param($m) $r.Value })
}

# -NoNewline matches the previous inline script behavior.
Set-Content -LiteralPath $OutputPath -Value $content -NoNewline -Encoding utf8

Write-Host "Generated: $OutputPath"
104 changes: 104 additions & 0 deletions builds/msvc/properties/GitSubstitution.props
Original file line number Diff line number Diff line change
@@ -0,0 +1,104 @@
<?xml version="1.0" encoding="utf-8"?>
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">

<PropertyGroup>
<_PropertySheetDisplayName>Git Substitution (ConfigurableFile)</_PropertySheetDisplayName>

<!-- Output root for generated headers (overridable from vcxproj) -->
<GeneratedIncludeDir Condition="'$(GeneratedIncludeDir)' == ''">$(IntDir)generated\include\</GeneratedIncludeDir>

<!-- @TOKEN@ names in .in files (overridable from vcxproj) -->
<VersionMajorToken Condition="'$(VersionMajorToken)' == ''">LIBBITCOIN_VERSION_MAJOR</VersionMajorToken>
<VersionMinorToken Condition="'$(VersionMinorToken)' == ''">LIBBITCOIN_VERSION_MINOR</VersionMinorToken>
<VersionPatchToken Condition="'$(VersionPatchToken)' == ''">LIBBITCOIN_VERSION_PATCH</VersionPatchToken>
<GitCommitHashToken Condition="'$(GitCommitHashToken)' == ''">GIT_COMMIT_HASH</GitCommitHashToken>
<GitOriginUrlToken Condition="'$(GitOriginUrlToken)' == ''">GIT_ORIGIN_URL</GitOriginUrlToken>
<GitDirtyToken Condition="'$(GitDirtyToken)' == ''">GIT_DIRTY</GitDirtyToken>

<!-- Substituted values (overridable from vcxproj; patch filled in target if still empty) -->
<VersionMajorValue Condition="'$(VersionMajorValue)' == ''">4</VersionMajorValue>
<VersionMinorValue Condition="'$(VersionMinorValue)' == ''">0</VersionMinorValue>
</PropertyGroup>

<!-- Prepend generated include dir unless disabled by caller -->
<ItemDefinitionGroup Condition="'$(GitSubstitutionAddIncludeDir)' != 'false'">
<ClCompile>
<AdditionalIncludeDirectories>
$(GeneratedIncludeDir);%(AdditionalIncludeDirectories)
</AdditionalIncludeDirectories>
</ClCompile>
</ItemDefinitionGroup>

<Target Name="GenerateConfiguredHeaders"
BeforeTargets="ClCompile"
Condition="'@(ConfigurableFile)' != ''"
Inputs="%(ConfigurableFile.FileInput)"
Outputs="%(ConfigurableFile.FileOutput)">

<!-- Resolve RepoRoot; fall back to empty if unset so git -C still runs safely -->
<PropertyGroup>
<_GitRepoRoot Condition="'$(RepoRoot)' != ''">$([System.IO.Path]::GetFullPath('$(RepoRoot)').TrimEnd('\'))</_GitRepoRoot>
<_GitRepoRoot Condition="'$(RepoRoot)' == ''">.</_GitRepoRoot>
</PropertyGroup>

<Exec Command="git -C &quot;$(_GitRepoRoot)&quot; rev-parse HEAD"
ConsoleToMSBuild="true"
IgnoreExitCode="true"
StandardOutputImportance="low"
Condition="'$(GitCommitHash)' == ''">
<Output TaskParameter="ConsoleOutput" PropertyName="GitCommitHash" />
<Output TaskParameter="ExitCode" PropertyName="_GitRevParseExit" />
</Exec>

<Exec Command="git -C &quot;$(_GitRepoRoot)&quot; rev-list --count HEAD"
ConsoleToMSBuild="true"
IgnoreExitCode="true"
StandardOutputImportance="low"
Condition="'$(GitCommitHeight)' == ''">
<Output TaskParameter="ConsoleOutput" PropertyName="GitCommitHeight" />
</Exec>

<Exec Command="git -C &quot;$(_GitRepoRoot)&quot; remote get-url origin"
ConsoleToMSBuild="true"
IgnoreExitCode="true"
StandardOutputImportance="low"
Condition="'$(GitOriginUrl)' == ''">
<Output TaskParameter="ConsoleOutput" PropertyName="GitOriginUrl" />
</Exec>

<Exec Command="git -C &quot;$(_GitRepoRoot)&quot; status --porcelain"
ConsoleToMSBuild="true"
IgnoreExitCode="true"
StandardOutputImportance="low"
Condition="'$(GitDirty)' == ''">
<Output TaskParameter="ConsoleOutput" PropertyName="GitStatus" />
</Exec>

<!-- Sanitize git outputs: reject multi-line / non-hash / empty results from failed git -->
<PropertyGroup>
<!-- Commit hash: keep only a plausible single-line hex hash; else unknown -->
<GitCommitHash Condition="'$(GitCommitHash)' == '' or $(GitCommitHash.Contains($([System.Environment]::NewLine))) or $(GitCommitHash.Contains(' '))">unknown</GitCommitHash>
<GitCommitHash Condition="'$(GitCommitHash)' == ''">unknown</GitCommitHash>

<!-- Height: digits only; else 0 -->
<GitCommitHeight Condition="'$(GitCommitHeight)' == '' or $([System.Text.RegularExpressions.Regex]::IsMatch('$(GitCommitHeight)', '[^0-9]'))">0</GitCommitHeight>
<GitCommitHeight Condition="'$(GitCommitHeight)' == ''">0</GitCommitHeight>

<!-- Origin URL: clear if it looks like an error message -->
<GitOriginUrl Condition="$(GitOriginUrl.Contains('fatal:')) or $(GitOriginUrl.Contains('error:'))"></GitOriginUrl>
<GitOriginUrl Condition="'$(GitOriginUrl)' == ''"></GitOriginUrl>

<!-- Dirty: any non-empty porcelain status => 1 -->
<GitDirty Condition="'$(GitStatus)' != '' and !$(GitStatus.Contains('fatal:'))">1</GitDirty>
<GitDirty Condition="'$(GitDirty)' == ''">0</GitDirty>

<VersionPatchValue Condition="'$(VersionPatchValue)' == ''">$(GitCommitHeight)</VersionPatchValue>
</PropertyGroup>

<MakeDir Directories="$([System.IO.Path]::GetDirectoryName('%(ConfigurableFile.FileOutput)'))" />

<!-- Invoke external script; values passed as discrete arguments (avoids cmd/PowerShell quoting bugs) -->
<Exec Command="powershell -NoProfile -ExecutionPolicy Bypass -File &quot;$(MSBuildThisFileDirectory)GitSubstitute.ps1&quot; -InputPath &quot;%(ConfigurableFile.FileInput)&quot; -OutputPath &quot;%(ConfigurableFile.FileOutput)&quot; -VersionMajorToken &quot;$(VersionMajorToken)&quot; -VersionMinorToken &quot;$(VersionMinorToken)&quot; -VersionPatchToken &quot;$(VersionPatchToken)&quot; -GitCommitHashToken &quot;$(GitCommitHashToken)&quot; -GitOriginUrlToken &quot;$(GitOriginUrlToken)&quot; -GitDirtyToken &quot;$(GitDirtyToken)&quot; -VersionMajorValue &quot;$(VersionMajorValue)&quot; -VersionMinorValue &quot;$(VersionMinorValue)&quot; -VersionPatchValue &quot;$(VersionPatchValue)&quot; -GitCommitHash &quot;$(GitCommitHash)&quot; -GitOriginUrl &quot;$(GitOriginUrl)&quot; -GitDirty &quot;$(GitDirty)&quot;" />
</Target>

</Project>
Original file line number Diff line number Diff line change
@@ -1,6 +1,10 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">

<ImportGroup Label="PropertySheets">
<Import Project="$(ProjectDir)..\..\properties\GitSubstitution.props" />
</ImportGroup>

<PropertyGroup>
<_PropertySheetDisplayName>Libbitcoin Database Test Common Settings</_PropertySheetDisplayName>
<CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,10 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">

<ImportGroup Label="PropertySheets">
<Import Project="$(ProjectDir)..\..\properties\GitSubstitution.props" />
</ImportGroup>

<PropertyGroup>
<_PropertySheetDisplayName>Libbitcoin Database Tools Common Settings</_PropertySheetDisplayName>
<CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
Expand Down
3 changes: 2 additions & 1 deletion builds/msvc/vs2026/libbitcoin-database.import.props
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@
<ItemDefinitionGroup>
<ClCompile>
<AdditionalIncludeDirectories>$(ProjectDir)..\..\..\..\..\libbitcoin-database\include\;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<AdditionalIncludeDirectories>$(ProjectDir)..\..\..\..\..\libbitcoin-database\non-persistent\include\;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions Condition="'$(Linkage-libbitcoin-database)' == 'static' Or '$(Linkage-libbitcoin-database)' == 'ltcg'">BCD_STATIC;%(PreprocessorDefinitions)</PreprocessorDefinitions>
</ClCompile>
<Link>
Expand All @@ -32,4 +33,4 @@
</AdditionalLibraryDirectories>
</Link>
</ItemDefinitionGroup>
</Project>
</Project>
Original file line number Diff line number Diff line change
@@ -1,6 +1,10 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">

<ImportGroup Label="PropertySheets">
<Import Project="$(ProjectDir)..\..\properties\GitSubstitution.props" />
</ImportGroup>

<PropertyGroup>
<_PropertySheetDisplayName>Libbitcoin Database Library Common Settings</_PropertySheetDisplayName>
<CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
Expand Down Expand Up @@ -53,4 +57,4 @@
<Message Text="Linkage-_system : $(Linkage-libbitcoin-system)" Importance="high"/>
</Target>

</Project>
</Project>
Original file line number Diff line number Diff line change
Expand Up @@ -109,6 +109,22 @@
<Platform>x64</Platform>
</ProjectConfiguration>
</ItemGroup>
<PropertyGroup Label="Prebuild">
<GeneratedIncludeDirBase>$(ProjectDir)..\..\..\..\non-persistent\</GeneratedIncludeDirBase>
<GeneratedIncludeDir>$(GeneratedIncludeDirBase)include\</GeneratedIncludeDir>
</PropertyGroup>
<ItemGroup>
<ConfigurableFile Include="version">
<FileInput>$(RepoRoot)include\bitcoin\database\version.hpp.in</FileInput>
<FileOutput>$(GeneratedIncludeDirBase)include\bitcoin\database\version.hpp</FileOutput>
</ConfigurableFile>
</ItemGroup>
<ItemGroup>
<None Include="%(ConfigurableFile.FileInput)" />
<ClInclude Include="%(ConfigurableFile.FileOutput)">
<DependentUpon>%(ConfigurableFile.FileInput)</DependentUpon>
</ClInclude>
</ItemGroup>
<PropertyGroup Label="Configuration">
<ConfigurationType Condition="$(Configuration.IndexOf('DLL')) == -1">StaticLibrary</ConfigurationType>
<ConfigurationType Condition="$(Configuration.IndexOf('DLL')) != -1">DynamicLibrary</ConfigurationType>
Expand Down Expand Up @@ -241,7 +257,6 @@
<ClInclude Include="..\..\..\..\include\bitcoin\database\unspent\unspent_serial.hpp" />
<ClInclude Include="..\..\..\..\include\bitcoin\database\unspent\unspent_spans.hpp" />
<ClInclude Include="..\..\..\..\include\bitcoin\database\unspent\unspent_writer.hpp" />
<ClInclude Include="..\..\..\..\include\bitcoin\database\version.hpp" />
</ItemGroup>
<ItemGroup>
<None Include="..\..\..\..\include\bitcoin\database\impl\memory\mmap.ipp" />
Expand Down Expand Up @@ -331,6 +346,7 @@
<None Include="..\..\..\..\include\bitcoin\database\impl\unspent\unspent_serial.ipp" />
<None Include="..\..\..\..\include\bitcoin\database\impl\unspent\unspent_spans.ipp" />
<None Include="..\..\..\..\include\bitcoin\database\impl\unspent\unspent_writer.ipp" />
<None Include="..\..\..\..\include\bitcoin\database\version.hpp.in" />
<None Include="packages.config" />
</ItemGroup>
<ItemGroup>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -449,9 +449,6 @@
<ClInclude Include="..\..\..\..\include\bitcoin\database\unspent\unspent_writer.hpp">
<Filter>include\bitcoin\database\unspent</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\include\bitcoin\database\version.hpp">
<Filter>include\bitcoin\database</Filter>
</ClInclude>
</ItemGroup>
<ItemGroup>
<None Include="..\..\..\..\include\bitcoin\database\impl\memory\mmap.ipp">
Expand Down Expand Up @@ -715,6 +712,9 @@
<None Include="..\..\..\..\include\bitcoin\database\impl\unspent\unspent_writer.ipp">
<Filter>include\bitcoin\database\impl\unspent</Filter>
</None>
<None Include="..\..\..\..\include\bitcoin\database\version.hpp.in">
<Filter>include\bitcoin\database</Filter>
</None>
<None Include="packages.config" />
</ItemGroup>
<ItemGroup>
Expand Down
2 changes: 2 additions & 0 deletions builds/msvc/vs2026/libbitcoin-system.import.props
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,8 @@
<ItemDefinitionGroup>
<ClCompile>
<AdditionalIncludeDirectories>$(ProjectDir)..\..\..\..\..\libbitcoin-system\include\;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<AdditionalIncludeDirectories>$(ProjectDir)..\..\..\..\..\libbitcoin-system\non-persistent\include\;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>

<!-- NOMINMAX enables use of std::min/max without conflict. -->
<!-- WIN32_LEAN_AND_MEAN avoids inclusion of certain headers, winsock.h conflicts with boost and protocol use of winsock2.h. -->
<PreprocessorDefinitions>WIN32_LEAN_AND_MEAN;NOMINMAX;_WIN32_WINNT=0x0A00;%(PreprocessorDefinitions)</PreprocessorDefinitions>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,9 +12,12 @@
* For interpretation of the versioning scheme see: http://semver.org
*/

#define LIBBITCOIN_DATABASE_VERSION "4.0.0"
#define LIBBITCOIN_DATABASE_MAJOR_VERSION 4
#define LIBBITCOIN_DATABASE_MINOR_VERSION 0
#define LIBBITCOIN_DATABASE_PATCH_VERSION 0
#define LIBBITCOIN_DATABASE_VERSION "@LIBBITCOIN_VERSION_MAJOR@.@LIBBITCOIN_VERSION_MINOR@.@LIBBITCOIN_VERSION_PATCH@"
#define LIBBITCOIN_DATABASE_MAJOR_VERSION @LIBBITCOIN_VERSION_MAJOR@
#define LIBBITCOIN_DATABASE_MINOR_VERSION @LIBBITCOIN_VERSION_MINOR@
#define LIBBITCOIN_DATABASE_PATCH_VERSION @LIBBITCOIN_VERSION_PATCH@
#define LIBBITCOIN_DATABASE_COMMIT_HASH "@GIT_COMMIT_HASH@"
#define LIBBITCOIN_DATABASE_REPOSITORY_URL "@GIT_ORIGIN_URL@"
#define LIBBITCOIN_DATABASE_IS_DIRTY @GIT_DIRTY@

#endif
Loading