mirror of
https://github.com/nghttp2/nghttp2.git
synced 2025-12-07 10:38:53 +08:00
Compare commits
7 Commits
9b0044d051
...
v1.45.1
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
53dfaad925 | ||
|
|
2f2da110a1 | ||
|
|
8a14435aa8 | ||
|
|
dbaa59908e | ||
|
|
ca41f2faab | ||
|
|
daae20d4a5 | ||
|
|
6d9667dc74 |
192
.clang-format
192
.clang-format
@@ -2,97 +2,42 @@
|
|||||||
Language: Cpp
|
Language: Cpp
|
||||||
AccessModifierOffset: -2
|
AccessModifierOffset: -2
|
||||||
AlignAfterOpenBracket: Align
|
AlignAfterOpenBracket: Align
|
||||||
AlignArrayOfStructures: None
|
AlignConsecutiveMacros: None
|
||||||
AlignConsecutiveAssignments:
|
AlignConsecutiveAssignments: None
|
||||||
Enabled: false
|
AlignConsecutiveBitFields: None
|
||||||
AcrossEmptyLines: false
|
AlignConsecutiveDeclarations: None
|
||||||
AcrossComments: false
|
|
||||||
AlignCompound: false
|
|
||||||
AlignFunctionPointers: false
|
|
||||||
PadOperators: true
|
|
||||||
AlignConsecutiveBitFields:
|
|
||||||
Enabled: false
|
|
||||||
AcrossEmptyLines: false
|
|
||||||
AcrossComments: false
|
|
||||||
AlignCompound: false
|
|
||||||
AlignFunctionPointers: false
|
|
||||||
PadOperators: true
|
|
||||||
AlignConsecutiveDeclarations:
|
|
||||||
Enabled: false
|
|
||||||
AcrossEmptyLines: false
|
|
||||||
AcrossComments: false
|
|
||||||
AlignCompound: false
|
|
||||||
AlignFunctionPointers: false
|
|
||||||
PadOperators: true
|
|
||||||
AlignConsecutiveMacros:
|
|
||||||
Enabled: false
|
|
||||||
AcrossEmptyLines: false
|
|
||||||
AcrossComments: false
|
|
||||||
AlignCompound: false
|
|
||||||
AlignFunctionPointers: false
|
|
||||||
PadOperators: true
|
|
||||||
AlignConsecutiveShortCaseStatements:
|
|
||||||
Enabled: false
|
|
||||||
AcrossEmptyLines: false
|
|
||||||
AcrossComments: false
|
|
||||||
AlignCaseArrows: false
|
|
||||||
AlignCaseColons: false
|
|
||||||
AlignConsecutiveTableGenBreakingDAGArgColons:
|
|
||||||
Enabled: false
|
|
||||||
AcrossEmptyLines: false
|
|
||||||
AcrossComments: false
|
|
||||||
AlignCompound: false
|
|
||||||
AlignFunctionPointers: false
|
|
||||||
PadOperators: false
|
|
||||||
AlignConsecutiveTableGenCondOperatorColons:
|
|
||||||
Enabled: false
|
|
||||||
AcrossEmptyLines: false
|
|
||||||
AcrossComments: false
|
|
||||||
AlignCompound: false
|
|
||||||
AlignFunctionPointers: false
|
|
||||||
PadOperators: false
|
|
||||||
AlignConsecutiveTableGenDefinitionColons:
|
|
||||||
Enabled: false
|
|
||||||
AcrossEmptyLines: false
|
|
||||||
AcrossComments: false
|
|
||||||
AlignCompound: false
|
|
||||||
AlignFunctionPointers: false
|
|
||||||
PadOperators: false
|
|
||||||
AlignEscapedNewlines: Right
|
AlignEscapedNewlines: Right
|
||||||
AlignOperands: Align
|
AlignOperands: Align
|
||||||
AlignTrailingComments:
|
AlignTrailingComments: true
|
||||||
Kind: Always
|
|
||||||
OverEmptyLines: 0
|
|
||||||
AllowAllArgumentsOnNextLine: true
|
AllowAllArgumentsOnNextLine: true
|
||||||
|
AllowAllConstructorInitializersOnNextLine: true
|
||||||
AllowAllParametersOfDeclarationOnNextLine: true
|
AllowAllParametersOfDeclarationOnNextLine: true
|
||||||
AllowBreakBeforeNoexceptSpecifier: Never
|
|
||||||
AllowShortBlocksOnASingleLine: Never
|
|
||||||
AllowShortCaseExpressionOnASingleLine: true
|
|
||||||
AllowShortCaseLabelsOnASingleLine: false
|
|
||||||
AllowShortCompoundRequirementOnASingleLine: true
|
|
||||||
AllowShortEnumsOnASingleLine: true
|
AllowShortEnumsOnASingleLine: true
|
||||||
|
AllowShortBlocksOnASingleLine: Never
|
||||||
|
AllowShortCaseLabelsOnASingleLine: false
|
||||||
AllowShortFunctionsOnASingleLine: All
|
AllowShortFunctionsOnASingleLine: All
|
||||||
AllowShortIfStatementsOnASingleLine: Never
|
|
||||||
AllowShortLambdasOnASingleLine: All
|
AllowShortLambdasOnASingleLine: All
|
||||||
|
AllowShortIfStatementsOnASingleLine: Never
|
||||||
AllowShortLoopsOnASingleLine: false
|
AllowShortLoopsOnASingleLine: false
|
||||||
AlwaysBreakAfterDefinitionReturnType: None
|
AlwaysBreakAfterDefinitionReturnType: None
|
||||||
|
AlwaysBreakAfterReturnType: None
|
||||||
AlwaysBreakBeforeMultilineStrings: false
|
AlwaysBreakBeforeMultilineStrings: false
|
||||||
|
AlwaysBreakTemplateDeclarations: MultiLine
|
||||||
AttributeMacros:
|
AttributeMacros:
|
||||||
- __capability
|
- __capability
|
||||||
BinPackArguments: true
|
BinPackArguments: true
|
||||||
BinPackParameters: true
|
BinPackParameters: true
|
||||||
BitFieldColonSpacing: Both
|
|
||||||
BraceWrapping:
|
BraceWrapping:
|
||||||
AfterCaseLabel: false
|
AfterCaseLabel: false
|
||||||
AfterClass: false
|
AfterClass: false
|
||||||
AfterControlStatement: Never
|
AfterControlStatement: Never
|
||||||
AfterEnum: false
|
AfterEnum: false
|
||||||
AfterExternBlock: false
|
|
||||||
AfterFunction: false
|
AfterFunction: false
|
||||||
AfterNamespace: false
|
AfterNamespace: false
|
||||||
AfterObjCDeclaration: false
|
AfterObjCDeclaration: false
|
||||||
AfterStruct: false
|
AfterStruct: false
|
||||||
AfterUnion: false
|
AfterUnion: false
|
||||||
|
AfterExternBlock: false
|
||||||
BeforeCatch: false
|
BeforeCatch: false
|
||||||
BeforeElse: false
|
BeforeElse: false
|
||||||
BeforeLambdaBody: false
|
BeforeLambdaBody: false
|
||||||
@@ -101,30 +46,26 @@ BraceWrapping:
|
|||||||
SplitEmptyFunction: true
|
SplitEmptyFunction: true
|
||||||
SplitEmptyRecord: true
|
SplitEmptyRecord: true
|
||||||
SplitEmptyNamespace: true
|
SplitEmptyNamespace: true
|
||||||
BreakAdjacentStringLiterals: true
|
|
||||||
BreakAfterAttributes: Leave
|
|
||||||
BreakAfterJavaFieldAnnotations: false
|
|
||||||
BreakAfterReturnType: None
|
|
||||||
BreakArrays: true
|
|
||||||
BreakBeforeBinaryOperators: None
|
BreakBeforeBinaryOperators: None
|
||||||
BreakBeforeConceptDeclarations: Always
|
BreakBeforeConceptDeclarations: true
|
||||||
BreakBeforeBraces: Attach
|
BreakBeforeBraces: Attach
|
||||||
BreakBeforeInlineASMColon: OnlyMultiline
|
BreakBeforeInheritanceComma: false
|
||||||
BreakBeforeTernaryOperators: true
|
|
||||||
BreakConstructorInitializers: BeforeColon
|
|
||||||
BreakFunctionDefinitionParameters: false
|
|
||||||
BreakInheritanceList: BeforeColon
|
BreakInheritanceList: BeforeColon
|
||||||
|
BreakBeforeTernaryOperators: true
|
||||||
|
BreakConstructorInitializersBeforeComma: false
|
||||||
|
BreakConstructorInitializers: BeforeColon
|
||||||
|
BreakAfterJavaFieldAnnotations: false
|
||||||
BreakStringLiterals: true
|
BreakStringLiterals: true
|
||||||
BreakTemplateDeclarations: MultiLine
|
|
||||||
ColumnLimit: 80
|
ColumnLimit: 80
|
||||||
CommentPragmas: '^ IWYU pragma:'
|
CommentPragmas: '^ IWYU pragma:'
|
||||||
CompactNamespaces: false
|
CompactNamespaces: false
|
||||||
ConstructorInitializerIndentWidth: 2
|
ConstructorInitializerAllOnOneLineOrOnePerLine: true
|
||||||
ContinuationIndentWidth: 2
|
ConstructorInitializerIndentWidth: 4
|
||||||
|
ContinuationIndentWidth: 4
|
||||||
Cpp11BracedListStyle: true
|
Cpp11BracedListStyle: true
|
||||||
|
DeriveLineEnding: true
|
||||||
DerivePointerAlignment: false
|
DerivePointerAlignment: false
|
||||||
DisableFormat: false
|
DisableFormat: false
|
||||||
EmptyLineAfterAccessModifier: Never
|
|
||||||
EmptyLineBeforeAccessModifier: LogicalBlock
|
EmptyLineBeforeAccessModifier: LogicalBlock
|
||||||
ExperimentalAutoDetectBinPacking: false
|
ExperimentalAutoDetectBinPacking: false
|
||||||
FixNamespaceComments: true
|
FixNamespaceComments: true
|
||||||
@@ -132,8 +73,8 @@ ForEachMacros:
|
|||||||
- foreach
|
- foreach
|
||||||
- Q_FOREACH
|
- Q_FOREACH
|
||||||
- BOOST_FOREACH
|
- BOOST_FOREACH
|
||||||
IfMacros:
|
StatementAttributeLikeMacros:
|
||||||
- KJ_IF_MAYBE
|
- Q_EMIT
|
||||||
IncludeBlocks: Preserve
|
IncludeBlocks: Preserve
|
||||||
IncludeCategories:
|
IncludeCategories:
|
||||||
- Regex: '^"(llvm|llvm-c|clang|clang-c)/'
|
- Regex: '^"(llvm|llvm-c|clang|clang-c)/'
|
||||||
@@ -150,36 +91,20 @@ IncludeCategories:
|
|||||||
CaseSensitive: false
|
CaseSensitive: false
|
||||||
IncludeIsMainRegex: '$'
|
IncludeIsMainRegex: '$'
|
||||||
IncludeIsMainSourceRegex: ''
|
IncludeIsMainSourceRegex: ''
|
||||||
IndentAccessModifiers: false
|
|
||||||
IndentCaseBlocks: false
|
|
||||||
IndentCaseLabels: false
|
IndentCaseLabels: false
|
||||||
IndentExternBlock: AfterExternBlock
|
IndentCaseBlocks: false
|
||||||
IndentGotoLabels: true
|
IndentGotoLabels: true
|
||||||
IndentPPDirectives: AfterHash
|
IndentPPDirectives: AfterHash
|
||||||
IndentRequiresClause: false
|
IndentExternBlock: AfterExternBlock
|
||||||
|
IndentRequires: false
|
||||||
IndentWidth: 2
|
IndentWidth: 2
|
||||||
IndentWrappedFunctionNames: false
|
IndentWrappedFunctionNames: false
|
||||||
InsertBraces: false
|
|
||||||
InsertNewlineAtEOF: false
|
|
||||||
InsertTrailingCommas: None
|
InsertTrailingCommas: None
|
||||||
IntegerLiteralSeparator:
|
|
||||||
Binary: 0
|
|
||||||
BinaryMinDigits: 0
|
|
||||||
Decimal: 0
|
|
||||||
DecimalMinDigits: 0
|
|
||||||
Hex: 0
|
|
||||||
HexMinDigits: 0
|
|
||||||
JavaScriptQuotes: Leave
|
JavaScriptQuotes: Leave
|
||||||
JavaScriptWrapImports: true
|
JavaScriptWrapImports: true
|
||||||
KeepEmptyLines:
|
KeepEmptyLinesAtTheStartOfBlocks: true
|
||||||
AtEndOfFile: false
|
|
||||||
AtStartOfBlock: false
|
|
||||||
AtStartOfFile: true
|
|
||||||
LambdaBodyIndentation: Signature
|
|
||||||
LineEnding: DeriveLF
|
|
||||||
MacroBlockBegin: ''
|
MacroBlockBegin: ''
|
||||||
MacroBlockEnd: ''
|
MacroBlockEnd: ''
|
||||||
MainIncludeChar: Quote
|
|
||||||
MaxEmptyLinesToKeep: 1
|
MaxEmptyLinesToKeep: 1
|
||||||
NamespaceIndentation: None
|
NamespaceIndentation: None
|
||||||
ObjCBinPackProtocolList: Auto
|
ObjCBinPackProtocolList: Auto
|
||||||
@@ -187,86 +112,49 @@ ObjCBlockIndentWidth: 2
|
|||||||
ObjCBreakBeforeNestedBlockParam: true
|
ObjCBreakBeforeNestedBlockParam: true
|
||||||
ObjCSpaceAfterProperty: false
|
ObjCSpaceAfterProperty: false
|
||||||
ObjCSpaceBeforeProtocolList: true
|
ObjCSpaceBeforeProtocolList: true
|
||||||
PackConstructorInitializers: NextLine
|
|
||||||
PenaltyBreakAssignment: 2
|
PenaltyBreakAssignment: 2
|
||||||
PenaltyBreakBeforeFirstCallParameter: 19
|
PenaltyBreakBeforeFirstCallParameter: 19
|
||||||
PenaltyBreakComment: 300
|
PenaltyBreakComment: 300
|
||||||
PenaltyBreakFirstLessLess: 120
|
PenaltyBreakFirstLessLess: 120
|
||||||
PenaltyBreakOpenParenthesis: 0
|
|
||||||
PenaltyBreakScopeResolution: 500
|
|
||||||
PenaltyBreakString: 1000
|
PenaltyBreakString: 1000
|
||||||
PenaltyBreakTemplateDeclaration: 10
|
PenaltyBreakTemplateDeclaration: 10
|
||||||
PenaltyExcessCharacter: 1000000
|
PenaltyExcessCharacter: 1000000
|
||||||
PenaltyIndentedWhitespace: 0
|
|
||||||
PenaltyReturnTypeOnItsOwnLine: 60
|
PenaltyReturnTypeOnItsOwnLine: 60
|
||||||
|
PenaltyIndentedWhitespace: 0
|
||||||
PointerAlignment: Right
|
PointerAlignment: Right
|
||||||
PPIndentWidth: -1
|
|
||||||
QualifierAlignment: Leave
|
|
||||||
ReferenceAlignment: Pointer
|
|
||||||
ReflowComments: true
|
ReflowComments: true
|
||||||
RemoveBracesLLVM: false
|
SortIncludes: false
|
||||||
RemoveParentheses: Leave
|
|
||||||
RemoveSemicolon: false
|
|
||||||
RequiresClausePosition: OwnLine
|
|
||||||
RequiresExpressionIndentation: OuterScope
|
|
||||||
SeparateDefinitionBlocks: Leave
|
|
||||||
ShortNamespaceLines: 1
|
|
||||||
SkipMacroDefinitionBody: false
|
|
||||||
SortIncludes: Never
|
|
||||||
SortJavaStaticImport: Before
|
SortJavaStaticImport: Before
|
||||||
SortUsingDeclarations: LexicographicNumeric
|
SortUsingDeclarations: true
|
||||||
SpaceAfterCStyleCast: false
|
SpaceAfterCStyleCast: false
|
||||||
SpaceAfterLogicalNot: false
|
SpaceAfterLogicalNot: false
|
||||||
SpaceAfterTemplateKeyword: true
|
SpaceAfterTemplateKeyword: true
|
||||||
SpaceAroundPointerQualifiers: Default
|
|
||||||
SpaceBeforeAssignmentOperators: true
|
SpaceBeforeAssignmentOperators: true
|
||||||
SpaceBeforeCaseColon: false
|
SpaceBeforeCaseColon: false
|
||||||
SpaceBeforeCpp11BracedList: false
|
SpaceBeforeCpp11BracedList: false
|
||||||
SpaceBeforeCtorInitializerColon: true
|
SpaceBeforeCtorInitializerColon: true
|
||||||
SpaceBeforeInheritanceColon: true
|
SpaceBeforeInheritanceColon: true
|
||||||
SpaceBeforeJsonColon: false
|
|
||||||
SpaceBeforeParens: ControlStatements
|
SpaceBeforeParens: ControlStatements
|
||||||
SpaceBeforeParensOptions:
|
SpaceAroundPointerQualifiers: Default
|
||||||
AfterControlStatements: true
|
|
||||||
AfterForeachMacros: true
|
|
||||||
AfterFunctionDefinitionName: false
|
|
||||||
AfterFunctionDeclarationName: false
|
|
||||||
AfterIfMacros: true
|
|
||||||
AfterOverloadedOperator: false
|
|
||||||
AfterPlacementOperator: true
|
|
||||||
AfterRequiresInClause: false
|
|
||||||
AfterRequiresInExpression: false
|
|
||||||
BeforeNonEmptyParentheses: false
|
|
||||||
SpaceBeforeRangeBasedForLoopColon: true
|
SpaceBeforeRangeBasedForLoopColon: true
|
||||||
SpaceBeforeSquareBrackets: false
|
|
||||||
SpaceInEmptyBlock: false
|
SpaceInEmptyBlock: false
|
||||||
|
SpaceInEmptyParentheses: false
|
||||||
SpacesBeforeTrailingComments: 1
|
SpacesBeforeTrailingComments: 1
|
||||||
SpacesInAngles: Never
|
SpacesInAngles: false
|
||||||
|
SpacesInConditionalStatement: false
|
||||||
SpacesInContainerLiterals: true
|
SpacesInContainerLiterals: true
|
||||||
SpacesInLineCommentPrefix:
|
SpacesInCStyleCastParentheses: false
|
||||||
Minimum: 1
|
SpacesInParentheses: false
|
||||||
Maximum: -1
|
|
||||||
SpacesInParens: Never
|
|
||||||
SpacesInParensOptions:
|
|
||||||
ExceptDoubleParentheses: false
|
|
||||||
InCStyleCasts: false
|
|
||||||
InConditionalStatements: false
|
|
||||||
InEmptyParentheses: false
|
|
||||||
Other: false
|
|
||||||
SpacesInSquareBrackets: false
|
SpacesInSquareBrackets: false
|
||||||
|
SpaceBeforeSquareBrackets: false
|
||||||
|
BitFieldColonSpacing: Both
|
||||||
Standard: Latest
|
Standard: Latest
|
||||||
StatementAttributeLikeMacros:
|
|
||||||
- Q_EMIT
|
|
||||||
StatementMacros:
|
StatementMacros:
|
||||||
- Q_UNUSED
|
- Q_UNUSED
|
||||||
- QT_REQUIRE_VERSION
|
- QT_REQUIRE_VERSION
|
||||||
- munit_void_test_decl
|
|
||||||
- nghttp2_max_def
|
|
||||||
- nghttp2_min_def
|
|
||||||
TableGenBreakInsideDAGArg: DontBreak
|
|
||||||
TabWidth: 8
|
TabWidth: 8
|
||||||
|
UseCRLF: false
|
||||||
UseTab: Never
|
UseTab: Never
|
||||||
VerilogBreakBetweenInstancePorts: true
|
|
||||||
WhitespaceSensitiveMacros:
|
WhitespaceSensitiveMacros:
|
||||||
- STRINGIZE
|
- STRINGIZE
|
||||||
- PP_STRINGIZE
|
- PP_STRINGIZE
|
||||||
|
|||||||
10
.github/dependabot.yml
vendored
10
.github/dependabot.yml
vendored
@@ -1,10 +0,0 @@
|
|||||||
version: 2
|
|
||||||
updates:
|
|
||||||
- package-ecosystem: "github-actions"
|
|
||||||
directory: "/"
|
|
||||||
schedule:
|
|
||||||
interval: "weekly"
|
|
||||||
- package-ecosystem: "gomod"
|
|
||||||
directory: "/"
|
|
||||||
schedule:
|
|
||||||
interval: "weekly"
|
|
||||||
24
.github/workflows/android.yml
vendored
24
.github/workflows/android.yml
vendored
@@ -1,24 +0,0 @@
|
|||||||
name: android
|
|
||||||
|
|
||||||
on:
|
|
||||||
push:
|
|
||||||
paths:
|
|
||||||
- Dockerfile.android
|
|
||||||
- .github/workflows/android.yml
|
|
||||||
branches:
|
|
||||||
- '**'
|
|
||||||
|
|
||||||
permissions: read-all
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
build:
|
|
||||||
runs-on: ubuntu-24.04
|
|
||||||
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v5
|
|
||||||
- name: Set up Docker Buildx
|
|
||||||
uses: docker/setup-buildx-action@v3
|
|
||||||
- name: Build
|
|
||||||
uses: docker/build-push-action@v6
|
|
||||||
with:
|
|
||||||
file: Dockerfile.android
|
|
||||||
653
.github/workflows/build.yml
vendored
653
.github/workflows/build.yml
vendored
@@ -1,283 +1,39 @@
|
|||||||
name: build
|
name: build
|
||||||
|
|
||||||
on: [push, pull_request]
|
on: push
|
||||||
|
|
||||||
permissions: read-all
|
|
||||||
|
|
||||||
env:
|
|
||||||
LIBBPF_VERSION: v1.6.2
|
|
||||||
OPENSSL1_VERSION: 1_1_1w+quic
|
|
||||||
OPENSSL3_VERSION: 3.6.0
|
|
||||||
BORINGSSL_VERSION: db1a8456167249f95b854a1cd24c6b553d0f1567
|
|
||||||
AWSLC_VERSION: v1.62.0
|
|
||||||
NGHTTP3_VERSION: v1.12.0
|
|
||||||
NGTCP2_VERSION: v1.17.0
|
|
||||||
WOLFSSL_VERSION: v5.8.2-stable
|
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
build-cache:
|
build:
|
||||||
strategy:
|
|
||||||
matrix:
|
|
||||||
os: [ubuntu-24.04, macos-14, macos-15]
|
|
||||||
|
|
||||||
runs-on: ${{ matrix.os }}
|
runs-on: ${{ matrix.os }}
|
||||||
|
|
||||||
steps:
|
|
||||||
- name: Checkout
|
|
||||||
uses: actions/checkout@v5
|
|
||||||
- name: Restore libbpf cache
|
|
||||||
id: cache-libbpf
|
|
||||||
uses: actions/cache@v4
|
|
||||||
if: runner.os == 'Linux'
|
|
||||||
with:
|
|
||||||
path: libbpf/build
|
|
||||||
key: ${{ matrix.os }}-libbpf-${{ env.LIBBPF_VERSION }}
|
|
||||||
- name: Restore OpenSSL v1.1.1 cache
|
|
||||||
id: cache-openssl1
|
|
||||||
uses: actions/cache@v4
|
|
||||||
with:
|
|
||||||
path: openssl1/build
|
|
||||||
key: ${{ matrix.os }}-openssl-${{ env.OPENSSL1_VERSION }}
|
|
||||||
- name: Restore OpenSSL v3.x cache
|
|
||||||
id: cache-openssl3
|
|
||||||
uses: actions/cache@v4
|
|
||||||
with:
|
|
||||||
path: openssl3/build
|
|
||||||
key: ${{ matrix.os }}-openssl-${{ env.OPENSSL3_VERSION }}
|
|
||||||
- name: Restore BoringSSL cache
|
|
||||||
id: cache-boringssl
|
|
||||||
uses: actions/cache@v4
|
|
||||||
with:
|
|
||||||
path: |
|
|
||||||
boringssl/build/libcrypto.a
|
|
||||||
boringssl/build/libssl.a
|
|
||||||
boringssl/include
|
|
||||||
key: ${{ matrix.os }}-boringssl-${{ env.BORINGSSL_VERSION }}
|
|
||||||
- name: Restore aws-lc cache
|
|
||||||
id: cache-awslc
|
|
||||||
uses: actions/cache@v4
|
|
||||||
with:
|
|
||||||
path: |
|
|
||||||
aws-lc/build/crypto/libcrypto.a
|
|
||||||
aws-lc/build/ssl/libssl.a
|
|
||||||
aws-lc/include
|
|
||||||
key: ${{ matrix.os }}-awslc-${{ env.AWSLC_VERSION }}
|
|
||||||
- name: Restore wolfSSL cache
|
|
||||||
id: cache-wolfssl
|
|
||||||
uses: actions/cache@v4
|
|
||||||
with:
|
|
||||||
path: wolfssl/build
|
|
||||||
key: ${{ matrix.os }}-wolfssl-${{ env.WOLFSSL_VERSION }}
|
|
||||||
- name: Restore nghttp3 cache
|
|
||||||
id: cache-nghttp3
|
|
||||||
uses: actions/cache@v4
|
|
||||||
with:
|
|
||||||
path: nghttp3/build
|
|
||||||
key: ${{ matrix.os }}-nghttp3-${{ env.NGHTTP3_VERSION }}
|
|
||||||
- name: Restore ngtcp2 + quictls/openssl v1.1.1 cache
|
|
||||||
id: cache-ngtcp2-openssl1
|
|
||||||
uses: actions/cache@v4
|
|
||||||
with:
|
|
||||||
path: ngtcp2-openssl1/build
|
|
||||||
key: ${{ matrix.os }}-ngtcp2-${{ env.NGTCP2_VERSION }}-openssl-${{ env.OPENSSL1_VERSION }}
|
|
||||||
- name: Restore ngtcp2 + quictls/openssl v3.x cache
|
|
||||||
id: cache-ngtcp2-openssl3
|
|
||||||
uses: actions/cache@v4
|
|
||||||
with:
|
|
||||||
path: ngtcp2-openssl3/build
|
|
||||||
key: ${{ matrix.os }}-ngtcp2-${{ env.NGTCP2_VERSION }}-openssl-${{ env.OPENSSL3_VERSION }}
|
|
||||||
- id: settings
|
|
||||||
if: |
|
|
||||||
(steps.cache-libbpf.outputs.cache-hit != 'true' && runner.os == 'Linux') ||
|
|
||||||
steps.cache-openssl1.outputs.cache-hit != 'true' ||
|
|
||||||
steps.cache-openssl3.outputs.cache-hit != 'true' ||
|
|
||||||
steps.cache-boringssl.outputs.cache-hit != 'true' ||
|
|
||||||
steps.cache-awslc.outputs.cache-hit != 'true' ||
|
|
||||||
steps.cache-wolfssl.outputs.cache-hit != 'true' ||
|
|
||||||
steps.cache-nghttp3.outputs.cache-hit != 'true' ||
|
|
||||||
steps.cache-ngtcp2-openssl1.outputs.cache-hit != 'true' ||
|
|
||||||
steps.cache-ngtcp2-openssl3.outputs.cache-hit != 'true'
|
|
||||||
run: |
|
|
||||||
echo 'needs-build=true' >> $GITHUB_OUTPUT
|
|
||||||
- name: Linux setup
|
|
||||||
if: runner.os == 'Linux' && steps.settings.outputs.needs-build == 'true'
|
|
||||||
run: |
|
|
||||||
sudo apt-get update
|
|
||||||
sudo apt-get install \
|
|
||||||
autoconf \
|
|
||||||
automake \
|
|
||||||
autotools-dev \
|
|
||||||
libtool \
|
|
||||||
pkg-config \
|
|
||||||
libelf-dev \
|
|
||||||
cmake \
|
|
||||||
cmake-data
|
|
||||||
- name: MacOS setup
|
|
||||||
if: runner.os == 'macOS' && steps.settings.outputs.needs-build == 'true'
|
|
||||||
run: |
|
|
||||||
brew install \
|
|
||||||
autoconf \
|
|
||||||
automake \
|
|
||||||
libtool
|
|
||||||
- name: Build libbpf
|
|
||||||
if: steps.cache-libbpf.outputs.cache-hit != 'true' && runner.os == 'Linux'
|
|
||||||
run: |
|
|
||||||
git clone --recursive --shallow-submodules -b ${{ env.LIBBPF_VERSION }} https://github.com/libbpf/libbpf
|
|
||||||
cd libbpf
|
|
||||||
make -C src install PREFIX=$PWD/build
|
|
||||||
- name: Build quictls/openssl v1.1.1
|
|
||||||
if: steps.cache-openssl1.outputs.cache-hit != 'true'
|
|
||||||
run: |
|
|
||||||
git clone --recursive --shallow-submodules --depth 1 -b OpenSSL_${{ env.OPENSSL1_VERSION }} https://github.com/quictls/openssl openssl1
|
|
||||||
cd openssl1
|
|
||||||
./config --prefix=$PWD/build
|
|
||||||
make -j"$(nproc 2> /dev/null || sysctl -n hw.ncpu)"
|
|
||||||
make install_sw
|
|
||||||
- name: Build openssl/openssl v3.x
|
|
||||||
if: steps.cache-openssl3.outputs.cache-hit != 'true'
|
|
||||||
run: |
|
|
||||||
git clone --recursive --shallow-submodules --depth 1 -b openssl-${{ env.OPENSSL3_VERSION }} https://github.com/openssl/openssl openssl3
|
|
||||||
cd openssl3
|
|
||||||
./config enable-ktls --prefix=$PWD/build
|
|
||||||
make -j"$(nproc 2> /dev/null || sysctl -n hw.ncpu)"
|
|
||||||
make install_sw
|
|
||||||
- name: Build BoringSSL
|
|
||||||
if: steps.cache-boringssl.outputs.cache-hit != 'true'
|
|
||||||
run: |
|
|
||||||
mkdir boringssl
|
|
||||||
cd boringssl
|
|
||||||
git init
|
|
||||||
git remote add origin https://boringssl.googlesource.com/boringssl
|
|
||||||
git fetch origin --depth 1 ${{ env.BORINGSSL_VERSION }}
|
|
||||||
git checkout ${{ env.BORINGSSL_VERSION }}
|
|
||||||
mkdir build
|
|
||||||
cd build
|
|
||||||
cmake -DCMAKE_POSITION_INDEPENDENT_CODE=ON ..
|
|
||||||
make -j"$(nproc 2> /dev/null || sysctl -n hw.ncpu)"
|
|
||||||
- name: Build aws-lc
|
|
||||||
if: steps.cache-awslc.outputs.cache-hit != 'true'
|
|
||||||
run: |
|
|
||||||
git clone --recursive --shallow-submodules --depth 1 -b "${AWSLC_VERSION}" https://github.com/aws/aws-lc
|
|
||||||
cd aws-lc
|
|
||||||
cmake -B build -DDISABLE_GO=ON
|
|
||||||
make -j"$(nproc 2> /dev/null || sysctl -n hw.ncpu)" -C build
|
|
||||||
- name: Build wolfSSL
|
|
||||||
if: steps.cache-wolfssl.outputs.cache-hit != 'true'
|
|
||||||
run: |
|
|
||||||
git clone --depth 1 -b ${{ env.WOLFSSL_VERSION }} https://github.com/wolfSSL/wolfssl
|
|
||||||
cd wolfssl
|
|
||||||
autoreconf -i
|
|
||||||
./configure --disable-dependency-tracking --prefix=$PWD/build \
|
|
||||||
--enable-all --enable-harden --disable-ech
|
|
||||||
make -j"$(nproc 2> /dev/null || sysctl -n hw.ncpu)"
|
|
||||||
make install
|
|
||||||
- name: Build nghttp3
|
|
||||||
if: steps.cache-nghttp3.outputs.cache-hit != 'true'
|
|
||||||
run: |
|
|
||||||
git clone --recursive --shallow-submodules --depth 1 -b ${{ env.NGHTTP3_VERSION}} https://github.com/ngtcp2/nghttp3
|
|
||||||
cd nghttp3
|
|
||||||
autoreconf -i
|
|
||||||
./configure --disable-dependency-tracking --prefix=$PWD/build \
|
|
||||||
--enable-lib-only
|
|
||||||
make -j"$(nproc 2> /dev/null || sysctl -n hw.ncpu)" check
|
|
||||||
make install
|
|
||||||
- name: Build ngtcp2 + quictls/openssl v1.1.1 + BoringSSL
|
|
||||||
if: steps.cache-ngtcp2-openssl1.outputs.cache-hit != 'true'
|
|
||||||
run: |
|
|
||||||
git clone --recursive --shallow-submodules --depth 1 -b ${{ env.NGTCP2_VERSION }} https://github.com/ngtcp2/ngtcp2 ngtcp2-openssl1
|
|
||||||
cd ngtcp2-openssl1
|
|
||||||
autoreconf -i
|
|
||||||
./configure --prefix=$PWD/build --enable-lib-only \
|
|
||||||
PKG_CONFIG_PATH="../openssl1/build/lib/pkgconfig:../wolfssl/build/lib/pkgconfig" \
|
|
||||||
BORINGSSL_CFLAGS="-I$PWD/../boringssl/include/" \
|
|
||||||
BORINGSSL_LIBS="-L$PWD/../boringssl/build -lssl -lcrypto" \
|
|
||||||
--disable-dependency-tracking \
|
|
||||||
--with-boringssl \
|
|
||||||
--with-wolfssl
|
|
||||||
make -j"$(nproc 2> /dev/null || sysctl -n hw.ncpu)" check
|
|
||||||
make install
|
|
||||||
- name: Build ngtcp2 + quictls/openssl v3.x + aws-lc
|
|
||||||
if: steps.cache-ngtcp2-openssl3.outputs.cache-hit != 'true'
|
|
||||||
run: |
|
|
||||||
git clone --recursive --shallow-submodules --depth 1 -b ${{ env.NGTCP2_VERSION }} https://github.com/ngtcp2/ngtcp2 ngtcp2-openssl3
|
|
||||||
cd ngtcp2-openssl3
|
|
||||||
autoreconf -i
|
|
||||||
./configure --prefix=$PWD/build --enable-lib-only \
|
|
||||||
PKG_CONFIG_PATH="../openssl3/build/lib64/pkgconfig:../openssl3/build/lib/pkgconfig" \
|
|
||||||
BORINGSSL_CFLAGS="-I$PWD/../aws-lc/include/" \
|
|
||||||
BORINGSSL_LIBS="-L$PWD/../aws-lc/build/ssl -lssl -L$PWD/../aws-lc/build/crypto -lcrypto" \
|
|
||||||
--disable-dependency-tracking \
|
|
||||||
--with-boringssl
|
|
||||||
make -j"$(nproc 2> /dev/null || sysctl -n hw.ncpu)" check
|
|
||||||
make install
|
|
||||||
|
|
||||||
build:
|
|
||||||
needs:
|
|
||||||
- build-cache
|
|
||||||
|
|
||||||
strategy:
|
strategy:
|
||||||
matrix:
|
matrix:
|
||||||
os: [ubuntu-24.04, macos-14, macos-15]
|
os: [ubuntu-20.04, macos-10.15]
|
||||||
compiler: [gcc, clang]
|
compiler: [gcc, clang]
|
||||||
buildtool: [autotools, cmake]
|
buildtool: [autotools, cmake]
|
||||||
http3: [http3, no-http3]
|
http3: [http3, no-http3]
|
||||||
openssl: [openssl1, openssl3, boringssl, awslc, wolfssl]
|
openssl: [openssl1, openssl3]
|
||||||
exclude:
|
exclude:
|
||||||
|
- os: macos-10.15
|
||||||
|
openssl: openssl3
|
||||||
- http3: no-http3
|
- http3: no-http3
|
||||||
openssl: openssl3
|
openssl: openssl3
|
||||||
- os: macos-14
|
|
||||||
compiler: gcc
|
|
||||||
- os: macos-15
|
|
||||||
compiler: gcc
|
|
||||||
- # disable macos cmake because of include path issue
|
|
||||||
os: macos-14
|
|
||||||
buildtool: cmake
|
|
||||||
- # disable macos cmake because of include path issue
|
|
||||||
os: macos-15
|
|
||||||
buildtool: cmake
|
|
||||||
- os: macos-14
|
|
||||||
openssl: boringssl
|
|
||||||
- os: macos-15
|
|
||||||
openssl: boringssl
|
|
||||||
- openssl: boringssl
|
|
||||||
buildtool: cmake
|
|
||||||
- openssl: boringssl
|
|
||||||
compiler: gcc
|
|
||||||
- os: macos-14
|
|
||||||
openssl: awslc
|
|
||||||
- os: macos-15
|
|
||||||
openssl: awslc
|
|
||||||
- openssl: awslc
|
|
||||||
buildtool: cmake
|
|
||||||
- openssl: awslc
|
|
||||||
compiler: gcc
|
|
||||||
include:
|
|
||||||
- os: ubuntu-24.04
|
|
||||||
compiler: clang
|
|
||||||
buildtool: distcheck
|
|
||||||
http3: http3
|
|
||||||
openssl: awslc
|
|
||||||
|
|
||||||
runs-on: ${{ matrix.os }}
|
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout
|
- uses: actions/checkout@v2
|
||||||
uses: actions/checkout@v5
|
|
||||||
with:
|
|
||||||
submodules: recursive
|
|
||||||
- name: Linux setup
|
- name: Linux setup
|
||||||
if: runner.os == 'Linux'
|
if: runner.os == 'Linux'
|
||||||
run: |
|
run: |
|
||||||
sudo apt-get update
|
|
||||||
sudo apt-get install \
|
sudo apt-get install \
|
||||||
g++-14 \
|
g++-8 \
|
||||||
clang-19 \
|
clang-10 \
|
||||||
autoconf \
|
autoconf \
|
||||||
automake \
|
automake \
|
||||||
autotools-dev \
|
autotools-dev \
|
||||||
libtool \
|
libtool \
|
||||||
pkg-config \
|
pkg-config \
|
||||||
zlib1g-dev \
|
zlib1g-dev \
|
||||||
|
libcunit1-dev \
|
||||||
libssl-dev \
|
libssl-dev \
|
||||||
libxml2-dev \
|
libxml2-dev \
|
||||||
libev-dev \
|
libev-dev \
|
||||||
@@ -286,32 +42,29 @@ jobs:
|
|||||||
libjemalloc-dev \
|
libjemalloc-dev \
|
||||||
libc-ares-dev \
|
libc-ares-dev \
|
||||||
libelf-dev \
|
libelf-dev \
|
||||||
libbrotli-dev \
|
|
||||||
cmake \
|
cmake \
|
||||||
cmake-data
|
cmake-data
|
||||||
echo 'CPPFLAGS=-fsanitize=address,undefined -fno-sanitize-recover=undefined -g' >> $GITHUB_ENV
|
echo 'CPPFLAGS=-fsanitize=address,undefined -fno-sanitize-recover=undefined -g' >> $GITHUB_ENV
|
||||||
echo 'LDFLAGS=-fsanitize=address,undefined -fno-sanitize-recover=undefined' >> $GITHUB_ENV
|
echo 'LDFLAGS=-fsanitize=address,undefined -fno-sanitize-recover=undefined' >> $GITHUB_ENV
|
||||||
|
|
||||||
# https://github.com/actions/runner-images/issues/9491#issuecomment-1989718917
|
|
||||||
# Asan in llvm 14 provided in ubuntu 22.04 is incompatible with
|
|
||||||
# high-entropy ASLR in much newer kernels that GitHub runners are
|
|
||||||
# using leading to random crashes: https://reviews.llvm.org/D148280
|
|
||||||
sudo sysctl vm.mmap_rnd_bits=28
|
|
||||||
- name: MacOS setup
|
- name: MacOS setup
|
||||||
if: runner.os == 'macOS'
|
if: runner.os == 'macOS'
|
||||||
run: |
|
run: |
|
||||||
brew install \
|
brew install \
|
||||||
libev \
|
libev \
|
||||||
|
libevent \
|
||||||
|
c-ares \
|
||||||
|
cunit \
|
||||||
libressl \
|
libressl \
|
||||||
autoconf \
|
autoconf \
|
||||||
automake \
|
automake \
|
||||||
|
pkg-config \
|
||||||
libtool
|
libtool
|
||||||
echo 'PKG_CONFIG_PATH=/usr/local/opt/libressl/lib/pkgconfig:/usr/local/opt/libxml2/lib/pkgconfig' >> $GITHUB_ENV
|
echo 'PKG_CONFIG_PATH=/usr/local/opt/libressl/lib/pkgconfig:/usr/local/opt/libxml2/lib/pkgconfig' >> $GITHUB_ENV
|
||||||
- name: Setup clang (Linux)
|
- name: Setup clang (Linux)
|
||||||
if: runner.os == 'Linux' && matrix.compiler == 'clang'
|
if: runner.os == 'Linux' && matrix.compiler == 'clang'
|
||||||
run: |
|
run: |
|
||||||
echo 'CC=clang-19' >> $GITHUB_ENV
|
echo 'CC=clang-10' >> $GITHUB_ENV
|
||||||
echo 'CXX=clang++-19' >> $GITHUB_ENV
|
echo 'CXX=clang++-10' >> $GITHUB_ENV
|
||||||
- name: Setup clang (MacOS)
|
- name: Setup clang (MacOS)
|
||||||
if: runner.os == 'macOS' && matrix.compiler == 'clang'
|
if: runner.os == 'macOS' && matrix.compiler == 'clang'
|
||||||
run: |
|
run: |
|
||||||
@@ -320,360 +73,106 @@ jobs:
|
|||||||
- name: Setup gcc (Linux)
|
- name: Setup gcc (Linux)
|
||||||
if: runner.os == 'Linux' && matrix.compiler == 'gcc'
|
if: runner.os == 'Linux' && matrix.compiler == 'gcc'
|
||||||
run: |
|
run: |
|
||||||
echo 'CC=gcc-14' >> $GITHUB_ENV
|
echo 'CC=gcc-8' >> $GITHUB_ENV
|
||||||
echo 'CXX=g++-14' >> $GITHUB_ENV
|
echo 'CXX=g++-8' >> $GITHUB_ENV
|
||||||
# g++-12 is known to produce false positive warnings.
|
|
||||||
echo 'CXXFLAGS=-Wno-restrict' >> $GITHUB_ENV
|
|
||||||
- name: Setup gcc (MacOS)
|
- name: Setup gcc (MacOS)
|
||||||
if: runner.os == 'macOS' && matrix.compiler == 'gcc'
|
if: runner.os == 'macOS' && matrix.compiler == 'gcc'
|
||||||
run: |
|
run: |
|
||||||
echo 'CC=gcc' >> $GITHUB_ENV
|
echo 'CC=gcc' >> $GITHUB_ENV
|
||||||
echo 'CXX=g++' >> $GITHUB_ENV
|
echo 'CXX=g++' >> $GITHUB_ENV
|
||||||
- name: Restore libbpf cache
|
- name: Build libbpf
|
||||||
uses: actions/cache/restore@v4
|
|
||||||
if: matrix.http3 == 'http3' && matrix.compiler == 'clang' && runner.os == 'Linux'
|
|
||||||
with:
|
|
||||||
path: libbpf/build
|
|
||||||
key: ${{ matrix.os }}-libbpf-${{ env.LIBBPF_VERSION }}
|
|
||||||
fail-on-cache-miss: true
|
|
||||||
- name: Set libbpf variables
|
|
||||||
if: matrix.http3 == 'http3' && matrix.compiler == 'clang' && runner.os == 'Linux'
|
if: matrix.http3 == 'http3' && matrix.compiler == 'clang' && runner.os == 'Linux'
|
||||||
run: |
|
run: |
|
||||||
|
git clone -b v0.4.0 https://github.com/libbpf/libbpf
|
||||||
cd libbpf
|
cd libbpf
|
||||||
|
PREFIX=$PWD/build make -C src install
|
||||||
|
|
||||||
EXTRA_AUTOTOOLS_OPTS="$EXTRA_AUTOTOOLS_OPTS --with-libbpf"
|
EXTRA_AUTOTOOLS_OPTS="--with-libbpf"
|
||||||
EXTRA_CMAKE_OPTS="$EXTRA_CMAKE_OPTS -DWITH_LIBBPF=1"
|
|
||||||
|
|
||||||
echo 'EXTRA_AUTOTOOLS_OPTS='"$EXTRA_AUTOTOOLS_OPTS" >> $GITHUB_ENV
|
echo 'EXTRA_AUTOTOOLS_OPTS='"$EXTRA_AUTOTOOLS_OPTS" >> $GITHUB_ENV
|
||||||
echo 'EXTRA_CMAKE_OPTS='"$EXTRA_CMAKE_OPTS" >> $GITHUB_ENV
|
- name: Build quictls/openssl v1.1.1
|
||||||
- name: Setup libev variables
|
if: matrix.http3 == 'http3' && matrix.openssl == 'openssl1'
|
||||||
if: runner.os == 'macOS'
|
|
||||||
run: |
|
run: |
|
||||||
LIBEV_CFLAGS="-I/opt/homebrew/Cellar/libev/4.33/include"
|
git clone --depth 1 -b OpenSSL_1_1_1l+quic https://github.com/quictls/openssl
|
||||||
LIBEV_LIBS="-L/opt/homebrew/Cellar/libev/4.33/lib -lev"
|
cd openssl
|
||||||
|
./config enable-tls1_3 --prefix=$PWD/build
|
||||||
echo 'LIBEV_CFLAGS='"$LIBEV_CFLAGS" >> $GITHUB_ENV
|
make -j$(nproc)
|
||||||
echo 'LIBEV_LIBS='"$LIBEV_LIBS" >> $GITHUB_ENV
|
make install_sw
|
||||||
- name: Restore quictls/openssl v1.1.1 cache
|
- name: Build quictls/openssl v3.0.0
|
||||||
uses: actions/cache/restore@v4
|
if: matrix.http3 == 'http3' && matrix.openssl == 'openssl3'
|
||||||
if: matrix.openssl == 'openssl1'
|
|
||||||
with:
|
|
||||||
path: openssl1/build
|
|
||||||
key: ${{ matrix.os }}-openssl-${{ env.OPENSSL1_VERSION }}
|
|
||||||
fail-on-cache-miss: true
|
|
||||||
- name: Restore openssl/openssl v3.x cache
|
|
||||||
uses: actions/cache/restore@v4
|
|
||||||
if: matrix.openssl == 'openssl3'
|
|
||||||
with:
|
|
||||||
path: openssl3/build
|
|
||||||
key: ${{ matrix.os }}-openssl-${{ env.OPENSSL3_VERSION }}
|
|
||||||
fail-on-cache-miss: true
|
|
||||||
- name: Restore BoringSSL cache
|
|
||||||
uses: actions/cache/restore@v4
|
|
||||||
if: matrix.openssl == 'boringssl'
|
|
||||||
with:
|
|
||||||
path: |
|
|
||||||
boringssl/build/libcrypto.a
|
|
||||||
boringssl/build/libssl.a
|
|
||||||
boringssl/include
|
|
||||||
key: ${{ matrix.os }}-boringssl-${{ env.BORINGSSL_VERSION }}
|
|
||||||
fail-on-cache-miss: true
|
|
||||||
- name: Restore aws-lc cache
|
|
||||||
uses: actions/cache/restore@v4
|
|
||||||
if: matrix.openssl == 'awslc'
|
|
||||||
with:
|
|
||||||
path: |
|
|
||||||
aws-lc/build/crypto/libcrypto.a
|
|
||||||
aws-lc/build/ssl/libssl.a
|
|
||||||
aws-lc/include
|
|
||||||
key: ${{ matrix.os }}-awslc-${{ env.AWSLC_VERSION }}
|
|
||||||
fail-on-cache-miss: true
|
|
||||||
- name: Set BoringSSL variables
|
|
||||||
if: matrix.openssl == 'boringssl'
|
|
||||||
run: |
|
run: |
|
||||||
cd boringssl
|
unset CPPFLAGS
|
||||||
|
unset LDFLAGS
|
||||||
|
|
||||||
OPENSSL_CFLAGS="-I$PWD/include/"
|
git clone --depth 1 -b openssl-3.0.0+quic https://github.com/quictls/openssl
|
||||||
OPENSSL_LIBS="-L$PWD/build -lssl -lcrypto -pthread"
|
cd openssl
|
||||||
EXTRA_AUTOTOOLS_OPTS="$EXTRA_AUTOTOOLS_OPTS --without-neverbleed --without-jemalloc --disable-examples"
|
./config enable-tls1_3 --prefix=$PWD/build --libdir=$PWD/build/lib
|
||||||
|
make -j$(nproc)
|
||||||
echo 'OPENSSL_CFLAGS='"$OPENSSL_CFLAGS" >> $GITHUB_ENV
|
make install_sw
|
||||||
echo 'OPENSSL_LIBS='"$OPENSSL_LIBS" >> $GITHUB_ENV
|
- name: Build nghttp3
|
||||||
echo 'BORINGSSL_CFLAGS='"$OPENSSL_CFLAGS" >> $GITHUB_ENV
|
|
||||||
echo 'BORINGSSL_LIBS='"$OPENSSL_LIBS" >> $GITHUB_ENV
|
|
||||||
echo 'EXTRA_AUTOTOOLS_OPTS='"$EXTRA_AUTOTOOLS_OPTS" >> $GITHUB_ENV
|
|
||||||
- name: Set aws-lc variables
|
|
||||||
if: matrix.openssl == 'awslc'
|
|
||||||
run: |
|
|
||||||
cd aws-lc
|
|
||||||
|
|
||||||
OPENSSL_CFLAGS="-I$PWD/include/"
|
|
||||||
OPENSSL_LIBS="-L$PWD/build/ssl -lssl -L$PWD/build/crypto -lcrypto -pthread"
|
|
||||||
EXTRA_AUTOTOOLS_OPTS="$EXTRA_AUTOTOOLS_OPTS --without-neverbleed --without-jemalloc"
|
|
||||||
|
|
||||||
echo 'OPENSSL_CFLAGS='"$OPENSSL_CFLAGS" >> $GITHUB_ENV
|
|
||||||
echo 'OPENSSL_LIBS='"$OPENSSL_LIBS" >> $GITHUB_ENV
|
|
||||||
echo 'BORINGSSL_CFLAGS='"$OPENSSL_CFLAGS" >> $GITHUB_ENV
|
|
||||||
echo 'BORINGSSL_LIBS='"$OPENSSL_LIBS" >> $GITHUB_ENV
|
|
||||||
echo 'EXTRA_AUTOTOOLS_OPTS='"$EXTRA_AUTOTOOLS_OPTS" >> $GITHUB_ENV
|
|
||||||
- name: Restore wolfSSL cache
|
|
||||||
uses: actions/cache/restore@v4
|
|
||||||
if: matrix.openssl == 'wolfssl'
|
|
||||||
with:
|
|
||||||
path: wolfssl/build
|
|
||||||
key: ${{ matrix.os }}-wolfssl-${{ env.WOLFSSL_VERSION }}
|
|
||||||
fail-on-cache-miss: true
|
|
||||||
- name: Set wolfSSL variables
|
|
||||||
if: matrix.openssl == 'wolfssl'
|
|
||||||
run: |
|
|
||||||
EXTRA_AUTOTOOLS_OPTS="$EXTRA_AUTOTOOLS_OPTS --with-wolfssl --without-neverbleed"
|
|
||||||
EXTRA_CMAKE_OPTS="$EXTRA_CMAKE_OPTS -DWITH_WOLFSSL=1 -DWITH_NEVERBLEED=0 -DENABLE_EXAMPLES=0"
|
|
||||||
|
|
||||||
echo 'EXTRA_AUTOTOOLS_OPTS='"$EXTRA_AUTOTOOLS_OPTS" >> $GITHUB_ENV
|
|
||||||
echo 'EXTRA_CMAKE_OPTS='"$EXTRA_CMAKE_OPTS" >> $GITHUB_ENV
|
|
||||||
- name: Restore nghttp3 cache
|
|
||||||
uses: actions/cache/restore@v4
|
|
||||||
if: matrix.http3 == 'http3'
|
if: matrix.http3 == 'http3'
|
||||||
with:
|
|
||||||
path: nghttp3/build
|
|
||||||
key: ${{ matrix.os }}-nghttp3-${{ env.NGHTTP3_VERSION }}
|
|
||||||
fail-on-cache-miss: true
|
|
||||||
- name: Restore ngtcp2 + quictls/openssl v1.1.1 cache + BoringSSL
|
|
||||||
uses: actions/cache/restore@v4
|
|
||||||
if: matrix.http3 == 'http3' && (matrix.openssl == 'openssl1' || matrix.openssl == 'boringssl' || matrix.openssl == 'wolfssl')
|
|
||||||
with:
|
|
||||||
path: ngtcp2-openssl1/build
|
|
||||||
key: ${{ matrix.os }}-ngtcp2-${{ env.NGTCP2_VERSION }}-openssl-${{ env.OPENSSL1_VERSION }}
|
|
||||||
fail-on-cache-miss: true
|
|
||||||
- name: Restore ngtcp2 + quictls/openssl v3.x cache + aws-lc
|
|
||||||
uses: actions/cache/restore@v4
|
|
||||||
if: matrix.http3 == 'http3' && (matrix.openssl == 'openssl3' || matrix.openssl == 'awslc')
|
|
||||||
with:
|
|
||||||
path: ngtcp2-openssl3/build
|
|
||||||
key: ${{ matrix.os }}-ngtcp2-${{ env.NGTCP2_VERSION }}-openssl-${{ env.OPENSSL3_VERSION }}
|
|
||||||
fail-on-cache-miss: true
|
|
||||||
- name: Setup extra environment variables
|
|
||||||
if: matrix.http3 == 'no-http3'
|
|
||||||
run: |
|
run: |
|
||||||
PKG_CONFIG_PATH="$PWD/openssl1/build/lib/pkgconfig:$PWD/openssl3/build/lib64/pkgconfig:$PWD/openssl3/build/lib/pkgconfig:$PWD/wolfssl/build/lib/pkgconfig:$PKG_CONFIG_PATH"
|
git clone https://github.com/ngtcp2/nghttp3
|
||||||
LDFLAGS="$LDFLAGS -Wl,-rpath,$PWD/openssl1/build/lib -Wl,-rpath,$PWD/openssl3/build/lib64 -Wl,-rpath,$PWD/openssl3/build/lib"
|
cd nghttp3
|
||||||
|
autoreconf -i
|
||||||
echo 'PKG_CONFIG_PATH='"$PKG_CONFIG_PATH" >> $GITHUB_ENV
|
./configure --prefix=$PWD/build --enable-lib-only
|
||||||
echo 'LDFLAGS='"$LDFLAGS" >> $GITHUB_ENV
|
make -j$(nproc) check
|
||||||
|
make install
|
||||||
|
- name: Build ngtcp2
|
||||||
|
if: matrix.http3 == 'http3'
|
||||||
|
run: |
|
||||||
|
git clone https://github.com/ngtcp2/ngtcp2
|
||||||
|
cd ngtcp2
|
||||||
|
autoreconf -i
|
||||||
|
./configure --prefix=$PWD/build --enable-lib-only PKG_CONFIG_PATH="../openssl/build/lib/pkgconfig"
|
||||||
|
make -j$(nproc) check
|
||||||
|
make install
|
||||||
- name: Setup extra environment variables for HTTP/3
|
- name: Setup extra environment variables for HTTP/3
|
||||||
if: matrix.http3 == 'http3'
|
if: matrix.http3 == 'http3'
|
||||||
run: |
|
run: |
|
||||||
PKG_CONFIG_PATH="$PWD/openssl1/build/lib/pkgconfig:$PWD/openssl3/build/lib64/pkgconfig:$PWD/openssl3/build/lib/pkgconfig:$PWD/wolfssl/build/lib/pkgconfig:$PWD/nghttp3/build/lib/pkgconfig:$PWD/ngtcp2-openssl1/build/lib/pkgconfig:$PWD/ngtcp2-openssl3/build/lib/pkgconfig:$PWD/libbpf/build/lib64/pkgconfig:$PKG_CONFIG_PATH"
|
PKG_CONFIG_PATH="$PWD/openssl/build/lib/pkgconfig:$PWD/nghttp3/build/lib/pkgconfig:$PWD/ngtcp2/build/lib/pkgconfig:$PWD/libbpf/build/lib64/pkgconfig:$PKG_CONFIG_PATH"
|
||||||
LDFLAGS="$LDFLAGS -Wl,-rpath,$PWD/openssl1/build/lib -Wl,-rpath,$PWD/openssl3/build/lib64 -Wl,-rpath,$PWD/openssl3/build/lib -Wl,-rpath,$PWD/libbpf/build/lib64"
|
LDFLAGS="$LDFLAGS -Wl,-rpath,$PWD/openssl/build/lib -Wl,-rpath,$PWD/libbpf/build/lib64"
|
||||||
EXTRA_AUTOTOOLS_OPTS="$EXTRA_AUTOTOOLS_OPTS --enable-http3"
|
EXTRA_AUTOTOOLS_OPTS="--enable-http3 $EXTRA_AUTOTOOLS_OPTS"
|
||||||
EXTRA_CMAKE_OPTS="$EXTRA_CMAKE_OPTS -DENABLE_HTTP3=1"
|
|
||||||
|
|
||||||
echo 'PKG_CONFIG_PATH='"$PKG_CONFIG_PATH" >> $GITHUB_ENV
|
echo 'PKG_CONFIG_PATH='"$PKG_CONFIG_PATH" >> $GITHUB_ENV
|
||||||
echo 'LDFLAGS='"$LDFLAGS" >> $GITHUB_ENV
|
echo 'LDFLAGS='"$LDFLAGS" >> $GITHUB_ENV
|
||||||
echo 'EXTRA_AUTOTOOLS_OPTS='"$EXTRA_AUTOTOOLS_OPTS" >> $GITHUB_ENV
|
echo 'EXTRA_AUTOTOOLS_OPTS='"$EXTRA_AUTOTOOLS_OPTS" >> $GITHUB_ENV
|
||||||
echo 'EXTRA_CMAKE_OPTS='"$EXTRA_CMAKE_OPTS" >> $GITHUB_ENV
|
echo 'EXTRA_CMAKE_OPTS=-DENABLE_HTTP3=ON' >> $GITHUB_ENV
|
||||||
|
- name: Setup git submodules
|
||||||
|
run: |
|
||||||
|
git submodule update --init
|
||||||
- name: Configure autotools
|
- name: Configure autotools
|
||||||
run: |
|
run: |
|
||||||
autoreconf -i
|
autoreconf -i
|
||||||
./configure --disable-dependency-tracking
|
./configure
|
||||||
- name: Make distribution and unpack
|
- name: Configure cmake
|
||||||
if: matrix.buildtool != 'distcheck'
|
if: matrix.buildtool == 'cmake'
|
||||||
run: |
|
run: |
|
||||||
make dist
|
make dist
|
||||||
VERSION=$(grep PACKAGE_VERSION config.h | cut -d' ' -f3 | tr -d '"')
|
VERSION=$(grep PACKAGE_VERSION config.h | cut -d' ' -f3 | tr -d '"')
|
||||||
tar xf nghttp2-$VERSION.tar.gz
|
tar xf nghttp2-$VERSION.tar.gz
|
||||||
cd nghttp2-$VERSION
|
cd nghttp2-$VERSION
|
||||||
echo 'NGHTTP2_BUILD_DIR='"$PWD" >> $GITHUB_ENV
|
echo 'NGHTTP2_CMAKE_DIR='"$PWD" >> $GITHUB_ENV
|
||||||
- name: Configure cmake (Linux)
|
|
||||||
if: matrix.buildtool == 'cmake' && runner.os == 'Linux'
|
|
||||||
run: |
|
|
||||||
cd $NGHTTP2_BUILD_DIR
|
|
||||||
|
|
||||||
cmake -DENABLE_WERROR=1 -DWITH_MRUBY=1 -DWITH_NEVERBLEED=1 -DENABLE_APP=1 $EXTRA_CMAKE_OPTS -DCPPFLAGS="$CPPFLAGS" -DLDFLAGS="$LDFLAGS" -DBUILD_STATIC_LIBS=ON -DBUILD_TESTING=ON .
|
|
||||||
- name: Configure cmake (MacOS)
|
|
||||||
if: matrix.buildtool == 'cmake' && runner.os == 'macOS'
|
|
||||||
run: |
|
|
||||||
# This fixes infamous 'stdio.h not found' error.
|
# This fixes infamous 'stdio.h not found' error.
|
||||||
echo 'SDKROOT='"$(xcrun --sdk macosx --show-sdk-path)" >> $GITHUB_ENV
|
echo 'SDKROOT='"$(xcrun --sdk macosx --show-sdk-path)" >> $GITHUB_ENV
|
||||||
|
|
||||||
cd $NGHTTP2_BUILD_DIR
|
cmake -DENABLE_WERROR=1 -DWITH_MRUBY=1 -DWITH_NEVERBLEED=1 -DENABLE_APP=1 $EXTRA_CMAKE_OPTS -DCPPFLAGS="$CPPFLAGS" -DLDFLAGS="$LDFLAGS" .
|
||||||
|
- name: Build nghttp2 with autotools
|
||||||
cmake -DENABLE_WERROR=1 -DWITH_MRUBY=1 -DENABLE_APP=1 $EXTRA_CMAKE_OPTS -DCPPFLAGS="$CPPFLAGS" -DLDFLAGS="$LDFLAGS" -DBUILD_STATIC_LIBS=ON -DBUILD_TESTING=ON .
|
if: matrix.buildtool == 'autotools'
|
||||||
- name: Build nghttp2 with autotools (Linux)
|
|
||||||
if: matrix.buildtool == 'autotools' && runner.os == 'Linux'
|
|
||||||
run: |
|
run: |
|
||||||
cd $NGHTTP2_BUILD_DIR
|
make distcheck \
|
||||||
|
DISTCHECK_CONFIGURE_FLAGS="--with-mruby --with-neverbleed --with-libev --enable-werror $EXTRA_AUTOTOOLS_OPTS CPPFLAGS=\"$CPPFLAGS\" LDFLAGS=\"$LDFLAGS\""
|
||||||
./configure --disable-dependency-tracking --with-mruby --with-neverbleed --with-libev --with-libbrotlienc --with-libbrotlidec --enable-werror $EXTRA_AUTOTOOLS_OPTS
|
|
||||||
make -j"$(nproc)" check
|
|
||||||
- name: Build nghttp2 with autotools (MacOS)
|
|
||||||
if: matrix.buildtool == 'autotools' && runner.os == 'macOS'
|
|
||||||
run: |
|
|
||||||
cd $NGHTTP2_BUILD_DIR
|
|
||||||
|
|
||||||
./configure --disable-dependency-tracking --with-mruby --with-libev --with-libbrotlienc --with-libbrotlidec --enable-werror $EXTRA_AUTOTOOLS_OPTS
|
|
||||||
make -j"$(sysctl -n hw.ncpu)" check
|
|
||||||
- name: Build nghttp2 with autotools (distcheck)
|
|
||||||
if: matrix.buildtool == 'distcheck'
|
|
||||||
run: |
|
|
||||||
make -j"$(nproc)" distcheck \
|
|
||||||
DISTCHECK_CONFIGURE_FLAGS="--with-mruby --with-neverbleed --with-libev --with-libbrotlienc --with-libbrotlidec --enable-werror $EXTRA_AUTOTOOLS_OPTS CPPFLAGS=\"$CPPFLAGS\" LDFLAGS=\"$LDFLAGS\""
|
|
||||||
- name: Build nghttp2 with cmake
|
- name: Build nghttp2 with cmake
|
||||||
if: matrix.buildtool == 'cmake'
|
if: matrix.buildtool == 'cmake'
|
||||||
run: |
|
run: |
|
||||||
cd $NGHTTP2_BUILD_DIR
|
cd $NGHTTP2_CMAKE_DIR
|
||||||
make -j"$(nproc 2> /dev/null || sysctl -n hw.ncpu)"
|
make
|
||||||
make -j"$(nproc 2> /dev/null || sysctl -n hw.ncpu)" check
|
make check
|
||||||
- uses: actions/setup-go@v6
|
|
||||||
if: matrix.buildtool != 'distcheck'
|
|
||||||
with:
|
|
||||||
go-version: "1.24"
|
|
||||||
- name: Integration test
|
- name: Integration test
|
||||||
# Integration tests for nghttpx; autotools erases build
|
# Integration tests for nghttpx; autotools erases build
|
||||||
# artifacts.
|
# artifacts.
|
||||||
if: matrix.buildtool != 'distcheck'
|
if: matrix.buildtool == 'cmake'
|
||||||
run: |
|
run: |
|
||||||
sudo sh -c 'echo "127.0.0.1 127.0.0.1.nip.io" >> /etc/hosts'
|
cd $NGHTTP2_CMAKE_DIR/integration-tests
|
||||||
cd $NGHTTP2_BUILD_DIR/integration-tests
|
make itprep it
|
||||||
make it
|
|
||||||
|
|
||||||
build-cross:
|
|
||||||
strategy:
|
|
||||||
matrix:
|
|
||||||
host: [x86_64-w64-mingw32, i686-w64-mingw32]
|
|
||||||
|
|
||||||
runs-on: ubuntu-24.04
|
|
||||||
|
|
||||||
env:
|
|
||||||
HOST: ${{ matrix.host }}
|
|
||||||
|
|
||||||
steps:
|
|
||||||
- name: Checkout
|
|
||||||
uses: actions/checkout@v5
|
|
||||||
with:
|
|
||||||
submodules: recursive
|
|
||||||
- name: Prepare for i386
|
|
||||||
if: matrix.host == 'i686-w64-mingw32'
|
|
||||||
run: |
|
|
||||||
sudo dpkg --add-architecture i386
|
|
||||||
- name: Linux setup
|
|
||||||
run: |
|
|
||||||
sudo apt-get update
|
|
||||||
sudo apt-get install \
|
|
||||||
gcc-mingw-w64 \
|
|
||||||
autoconf \
|
|
||||||
automake \
|
|
||||||
autotools-dev \
|
|
||||||
libtool \
|
|
||||||
pkg-config \
|
|
||||||
wine
|
|
||||||
- name: Configure autotools
|
|
||||||
run: |
|
|
||||||
autoreconf -i && \
|
|
||||||
./configure --disable-dependency-tracking --enable-werror \
|
|
||||||
--enable-lib-only --host="$HOST" \
|
|
||||||
CFLAGS="-g -O2 -D_WIN32_WINNT=0x0600" LIBS="-pthread"
|
|
||||||
- name: Build nghttp2
|
|
||||||
run: |
|
|
||||||
make -j$(nproc)
|
|
||||||
make -j$(nproc) check TESTS=""
|
|
||||||
- name: Run tests
|
|
||||||
run: |
|
|
||||||
export WINEPATH="/usr/${{ matrix.host }}/lib;$(winepath -w /usr/lib/x86_64-linux-gnu/wine/x86_64-windows)"
|
|
||||||
cd tests
|
|
||||||
wine main.exe
|
|
||||||
|
|
||||||
build-windows:
|
|
||||||
strategy:
|
|
||||||
matrix:
|
|
||||||
arch: [x86, x64]
|
|
||||||
include:
|
|
||||||
- arch: x86
|
|
||||||
platform: Win32
|
|
||||||
- arch: x64
|
|
||||||
platform: x64
|
|
||||||
|
|
||||||
runs-on: windows-latest
|
|
||||||
|
|
||||||
steps:
|
|
||||||
- name: Checkout
|
|
||||||
uses: actions/checkout@v5
|
|
||||||
with:
|
|
||||||
submodules: recursive
|
|
||||||
- uses: microsoft/setup-msbuild@v2
|
|
||||||
- name: Configure cmake
|
|
||||||
run: cmake -B build -DCMAKE_TOOLCHAIN_FILE=C:/vcpkg/scripts/buildsystems/vcpkg.cmake -DCMAKE_GENERATOR_PLATFORM=${{ matrix.platform }} -DVCPKG_TARGET_TRIPLET=${{ matrix.arch}}-windows -DBUILD_STATIC_LIBS=ON -DBUILD_TESTING=ON
|
|
||||||
- name: Build nghttp2
|
|
||||||
run: |
|
|
||||||
cmake --build build
|
|
||||||
cmake --build build --target check
|
|
||||||
|
|
||||||
release:
|
|
||||||
if: github.ref_type == 'tag'
|
|
||||||
|
|
||||||
needs:
|
|
||||||
- build
|
|
||||||
- build-cross
|
|
||||||
- build-windows
|
|
||||||
|
|
||||||
permissions:
|
|
||||||
contents: write
|
|
||||||
|
|
||||||
runs-on: ubuntu-24.04
|
|
||||||
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v5
|
|
||||||
with:
|
|
||||||
fetch-depth: 0
|
|
||||||
submodules: recursive
|
|
||||||
- name: Make artifacts
|
|
||||||
run: |
|
|
||||||
ver='${{ github.ref_name }}'
|
|
||||||
|
|
||||||
prev_ver=$(git tag --sort v:refname | grep -v -F "${ver}" | \
|
|
||||||
grep 'v[0-9]\+\.[0-9]\+\.0' | tail -n1)
|
|
||||||
|
|
||||||
echo -n "$GPG_KEY" | gpg --batch --pinentry-mode loopback --import
|
|
||||||
./makerelease.sh "${ver}" "${prev_ver}"
|
|
||||||
env:
|
|
||||||
GPG_KEY: ${{ secrets.GPG_KEY }}
|
|
||||||
GPG_PASSPHRASE: ${{ secrets.GPG_PASSPHRASE }}
|
|
||||||
- name: Make release
|
|
||||||
uses: actions/github-script@v8
|
|
||||||
with:
|
|
||||||
script: |
|
|
||||||
const fs = require('fs')
|
|
||||||
|
|
||||||
let ver = '${{ github.ref_name }}'
|
|
||||||
|
|
||||||
let {data: release} = await github.rest.repos.createRelease({
|
|
||||||
owner: context.repo.owner,
|
|
||||||
repo: context.repo.repo,
|
|
||||||
tag_name: ver,
|
|
||||||
name: `nghttp2 ${ver}`,
|
|
||||||
draft: true,
|
|
||||||
generate_release_notes: true,
|
|
||||||
discussion_category_name: 'Announcements',
|
|
||||||
})
|
|
||||||
|
|
||||||
let v = ver.substring(1)
|
|
||||||
|
|
||||||
let files = [
|
|
||||||
'checksums.txt',
|
|
||||||
`nghttp2-${v}.tar.bz2`,
|
|
||||||
`nghttp2-${v}.tar.bz2.asc`,
|
|
||||||
`nghttp2-${v}.tar.gz`,
|
|
||||||
`nghttp2-${v}.tar.gz.asc`,
|
|
||||||
`nghttp2-${v}.tar.xz`,
|
|
||||||
`nghttp2-${v}.tar.xz.asc`,
|
|
||||||
]
|
|
||||||
|
|
||||||
await Promise.all(files.map(elem =>
|
|
||||||
github.rest.repos.uploadReleaseAsset({
|
|
||||||
owner: context.repo.owner,
|
|
||||||
repo: context.repo.repo,
|
|
||||||
release_id: release.id,
|
|
||||||
name: elem,
|
|
||||||
data: fs.readFileSync(elem),
|
|
||||||
})
|
|
||||||
))
|
|
||||||
|
|||||||
24
.github/workflows/docker.yaml
vendored
24
.github/workflows/docker.yaml
vendored
@@ -1,24 +0,0 @@
|
|||||||
name: docker-build
|
|
||||||
|
|
||||||
on:
|
|
||||||
push:
|
|
||||||
paths:
|
|
||||||
- docker/Dockerfile
|
|
||||||
branches:
|
|
||||||
- '**'
|
|
||||||
|
|
||||||
permissions: read-all
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
build:
|
|
||||||
runs-on: ubuntu-24.04
|
|
||||||
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v5
|
|
||||||
- name: Set up Docker Buildx
|
|
||||||
uses: docker/setup-buildx-action@v3
|
|
||||||
- name: Build
|
|
||||||
uses: docker/build-push-action@v6
|
|
||||||
with:
|
|
||||||
context: docker
|
|
||||||
build-args: NGHTTP2_BRANCH=${{ github.ref_name }}
|
|
||||||
10
.github/workflows/fuzz.yml
vendored
10
.github/workflows/fuzz.yml
vendored
@@ -1,17 +1,9 @@
|
|||||||
name: CIFuzz
|
name: CIFuzz
|
||||||
on: [pull_request]
|
on: [pull_request]
|
||||||
permissions: read-all
|
|
||||||
jobs:
|
jobs:
|
||||||
Fuzzing:
|
Fuzzing:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- name: LLVM workaround
|
|
||||||
run: |
|
|
||||||
# https://github.com/actions/runner-images/issues/9491#issuecomment-1989718917
|
|
||||||
# Asan in llvm 14 provided in ubuntu 22.04 is incompatible with
|
|
||||||
# high-entropy ASLR in much newer kernels that GitHub runners are
|
|
||||||
# using leading to random crashes: https://reviews.llvm.org/D148280
|
|
||||||
sudo sysctl vm.mmap_rnd_bits=28
|
|
||||||
- name: Build Fuzzers
|
- name: Build Fuzzers
|
||||||
uses: google/oss-fuzz/infra/cifuzz/actions/build_fuzzers@master
|
uses: google/oss-fuzz/infra/cifuzz/actions/build_fuzzers@master
|
||||||
with:
|
with:
|
||||||
@@ -24,7 +16,7 @@ jobs:
|
|||||||
fuzz-seconds: 600
|
fuzz-seconds: 600
|
||||||
dry-run: false
|
dry-run: false
|
||||||
- name: Upload Crash
|
- name: Upload Crash
|
||||||
uses: actions/upload-artifact@v5
|
uses: actions/upload-artifact@v1
|
||||||
if: failure()
|
if: failure()
|
||||||
with:
|
with:
|
||||||
name: artifacts
|
name: artifacts
|
||||||
|
|||||||
22
.github/workflows/stale.yaml
vendored
22
.github/workflows/stale.yaml
vendored
@@ -1,22 +0,0 @@
|
|||||||
name: 'Close stale issues'
|
|
||||||
|
|
||||||
on:
|
|
||||||
schedule:
|
|
||||||
- cron: '30 1 * * *'
|
|
||||||
|
|
||||||
permissions:
|
|
||||||
issues: write
|
|
||||||
actions: write
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
stale:
|
|
||||||
runs-on: ubuntu-24.04
|
|
||||||
|
|
||||||
steps:
|
|
||||||
- uses: actions/stale@v10
|
|
||||||
with:
|
|
||||||
stale-issue-message: 'This issue is stale because it has been open 30 days with no activity. Remove stale label or comment or this will be closed in 7 days.'
|
|
||||||
days-before-stale: 30
|
|
||||||
days-before-close: 7
|
|
||||||
days-before-pr-stale: -1
|
|
||||||
exempt-all-milestones: true
|
|
||||||
9
.gitignore
vendored
9
.gitignore
vendored
@@ -42,7 +42,6 @@ rules.ninja
|
|||||||
lib*.so
|
lib*.so
|
||||||
lib*.so.*
|
lib*.so.*
|
||||||
lib*.a
|
lib*.a
|
||||||
|
|
||||||
# generated by "make test" with cmake
|
# generated by "make test" with cmake
|
||||||
Testing/
|
Testing/
|
||||||
|
|
||||||
@@ -55,10 +54,4 @@ _VC_ROOT/
|
|||||||
.depend.MSVC
|
.depend.MSVC
|
||||||
*.pyd
|
*.pyd
|
||||||
*.egg-info/
|
*.egg-info/
|
||||||
|
python/nghttp2.c
|
||||||
# Build Directories
|
|
||||||
build/
|
|
||||||
|
|
||||||
# IDEs
|
|
||||||
cmake-*
|
|
||||||
.idea/
|
|
||||||
|
|||||||
8
.gitmodules
vendored
8
.gitmodules
vendored
@@ -4,10 +4,4 @@
|
|||||||
[submodule "third-party/neverbleed"]
|
[submodule "third-party/neverbleed"]
|
||||||
path = third-party/neverbleed
|
path = third-party/neverbleed
|
||||||
url = https://github.com/tatsuhiro-t/neverbleed.git
|
url = https://github.com/tatsuhiro-t/neverbleed.git
|
||||||
branch = nghttp2
|
branch = openssl111fix
|
||||||
[submodule "tests/munit"]
|
|
||||||
path = tests/munit
|
|
||||||
url = https://github.com/ngtcp2/munit
|
|
||||||
[submodule "third-party/urlparse"]
|
|
||||||
path = third-party/urlparse
|
|
||||||
url = https://github.com/ngtcp2/urlparse
|
|
||||||
|
|||||||
89
.travis.yml
Normal file
89
.travis.yml
Normal file
@@ -0,0 +1,89 @@
|
|||||||
|
dist: xenial
|
||||||
|
os:
|
||||||
|
- linux
|
||||||
|
compiler:
|
||||||
|
- clang
|
||||||
|
- gcc
|
||||||
|
env:
|
||||||
|
matrix:
|
||||||
|
- CI_BUILD=cmake
|
||||||
|
- CI_BUILD=autotools
|
||||||
|
matrix:
|
||||||
|
include:
|
||||||
|
- os: osx
|
||||||
|
compiler: clang
|
||||||
|
osx_image: xcode10.2
|
||||||
|
env: CI_BUILD=autotools
|
||||||
|
language: cpp
|
||||||
|
sudo: required
|
||||||
|
addons:
|
||||||
|
apt:
|
||||||
|
sources:
|
||||||
|
- ubuntu-toolchain-r-test
|
||||||
|
packages:
|
||||||
|
- g++-8
|
||||||
|
- autoconf
|
||||||
|
- automake
|
||||||
|
- autotools-dev
|
||||||
|
- libtool
|
||||||
|
- pkg-config
|
||||||
|
- zlib1g-dev
|
||||||
|
- libcunit1-dev
|
||||||
|
- libssl-dev
|
||||||
|
- libxml2-dev
|
||||||
|
- libev-dev
|
||||||
|
- libevent-dev
|
||||||
|
- libjansson-dev
|
||||||
|
- libjemalloc-dev
|
||||||
|
- libc-ares-dev
|
||||||
|
- cmake
|
||||||
|
- cmake-data
|
||||||
|
homebrew:
|
||||||
|
packages:
|
||||||
|
- libev
|
||||||
|
- libevent
|
||||||
|
- c-ares
|
||||||
|
- cunit
|
||||||
|
- libressl
|
||||||
|
before_install:
|
||||||
|
- $CC --version
|
||||||
|
- if [ "$CXX" = "g++" ]; then export CXX="g++-8" CC="gcc-8"; fi
|
||||||
|
- $CC --version
|
||||||
|
- go version
|
||||||
|
- cmake --version
|
||||||
|
before_script:
|
||||||
|
- |
|
||||||
|
if [ "$TRAVIS_OS_NAME" = "linux" ]; then
|
||||||
|
CPPFLAGS="-fsanitize=address" LDFLAGS="-fsanitize=address -fuse-ld=gold"
|
||||||
|
fi
|
||||||
|
- |
|
||||||
|
if [ "$TRAVIS_OS_NAME" = "osx" ]; then
|
||||||
|
PKG_CONFIG_PATH="/usr/local/opt/libressl/lib/pkgconfig:/usr/local/opt/libxml2/lib/pkgconfig"
|
||||||
|
fi
|
||||||
|
# Now build nghttp2
|
||||||
|
- git submodule update --init
|
||||||
|
- |
|
||||||
|
if [ "$CI_BUILD" = "autotools" ]; then
|
||||||
|
autoreconf -i && ./configure --with-mruby PKG_CONFIG_PATH=$PKG_CONFIG_PATH
|
||||||
|
fi
|
||||||
|
- |
|
||||||
|
if [ "$CI_BUILD" = "cmake" ]; then
|
||||||
|
cmake -DENABLE_WERROR=1 -DWITH_MRUBY=1 -DWITH_NEVERBLEED=1
|
||||||
|
fi
|
||||||
|
script:
|
||||||
|
- |
|
||||||
|
if [ "$CI_BUILD" = "autotools" ]; then
|
||||||
|
make distcheck DISTCHECK_CONFIGURE_FLAGS="--with-mruby --with-neverbleed --enable-werror CPPFLAGS=$CPPFLAGS LDFLAGS=\"$LDFLAGS\" PKG_CONFIG_PATH=$PKG_CONFIG_PATH"
|
||||||
|
fi
|
||||||
|
- |
|
||||||
|
if [ "$CI_BUILD" = "cmake" ]; then
|
||||||
|
make && make check
|
||||||
|
fi
|
||||||
|
- |
|
||||||
|
if [ "$CI_BUILD" = "cmake" ]; then
|
||||||
|
# Integration tests for nghttpx; autotools build erases build
|
||||||
|
# for packaging test.
|
||||||
|
cd integration-tests
|
||||||
|
export GO111MODULE=on
|
||||||
|
make it
|
||||||
|
fi
|
||||||
32
AUTHORS
32
AUTHORS
@@ -17,10 +17,8 @@ github issues [2].
|
|||||||
Adam Gołębiowski
|
Adam Gołębiowski
|
||||||
Alek Storm
|
Alek Storm
|
||||||
Alex Nalivko
|
Alex Nalivko
|
||||||
Alexandr Vlasov
|
|
||||||
Alexandros Konstantinakis-Karmis
|
Alexandros Konstantinakis-Karmis
|
||||||
Alexis La Goutte
|
Alexis La Goutte
|
||||||
Alyssa Ross
|
|
||||||
Amir Livneh
|
Amir Livneh
|
||||||
Amir Pakdel
|
Amir Pakdel
|
||||||
Anders Bakken
|
Anders Bakken
|
||||||
@@ -30,12 +28,10 @@ Andy Davies
|
|||||||
Angus Gratton
|
Angus Gratton
|
||||||
Anna Henningsen
|
Anna Henningsen
|
||||||
Ant Bryan
|
Ant Bryan
|
||||||
Anthony Alayo
|
|
||||||
Asra Ali
|
Asra Ali
|
||||||
Benedikt Christoph Wolters
|
Benedikt Christoph Wolters
|
||||||
Benjamin Peterson
|
Benjamin Peterson
|
||||||
Bernard Spil
|
Bernard Spil
|
||||||
Bernhard Walle
|
|
||||||
Brendan Heinonen
|
Brendan Heinonen
|
||||||
Brian Card
|
Brian Card
|
||||||
Brian Suh
|
Brian Suh
|
||||||
@@ -44,11 +40,7 @@ Daniel Evers
|
|||||||
Daniel Stenberg
|
Daniel Stenberg
|
||||||
Dave Reisner
|
Dave Reisner
|
||||||
David Beitey
|
David Beitey
|
||||||
David Korczynski
|
|
||||||
David Weekly
|
David Weekly
|
||||||
Deel
|
|
||||||
Deep Chordia
|
|
||||||
Dimitris Apostolou
|
|
||||||
Dmitri Tikhonov
|
Dmitri Tikhonov
|
||||||
Dmitriy Vetutnev
|
Dmitriy Vetutnev
|
||||||
Don
|
Don
|
||||||
@@ -56,7 +48,6 @@ Dylan Plecki
|
|||||||
Etienne Cimon
|
Etienne Cimon
|
||||||
Fabian Möller
|
Fabian Möller
|
||||||
Fabian Wiesel
|
Fabian Wiesel
|
||||||
Fred Sundvik
|
|
||||||
Gabi Davar
|
Gabi Davar
|
||||||
Gaël PORTAY
|
Gaël PORTAY
|
||||||
Geoff Hill
|
Geoff Hill
|
||||||
@@ -75,12 +66,9 @@ Jay Satiro
|
|||||||
Jeff 'Raid' Baitis
|
Jeff 'Raid' Baitis
|
||||||
Jianqing Wang
|
Jianqing Wang
|
||||||
Jim Morrison
|
Jim Morrison
|
||||||
Jiwoo Park
|
|
||||||
Jonas Kvinge
|
|
||||||
Josh Braegger
|
Josh Braegger
|
||||||
José F. Calcerrada
|
José F. Calcerrada
|
||||||
Kamil Dudka
|
Kamil Dudka
|
||||||
Karthik Dasari
|
|
||||||
Kazuho Oku
|
Kazuho Oku
|
||||||
Kenny (kang-yen) Peng
|
Kenny (kang-yen) Peng
|
||||||
Kenny Peng
|
Kenny Peng
|
||||||
@@ -90,11 +78,8 @@ LazyHamster
|
|||||||
Leo Neat
|
Leo Neat
|
||||||
Lorenz Nickel
|
Lorenz Nickel
|
||||||
Lucas Pardue
|
Lucas Pardue
|
||||||
Lukas Märdian
|
|
||||||
MATSUMOTO Ryosuke
|
MATSUMOTO Ryosuke
|
||||||
Marc Bachmann
|
Marc Bachmann
|
||||||
Marcelo Trylesinski
|
|
||||||
Mark Boddington
|
|
||||||
Matt Rudary
|
Matt Rudary
|
||||||
Matt Way
|
Matt Way
|
||||||
Michael Kaufmann
|
Michael Kaufmann
|
||||||
@@ -103,28 +88,18 @@ Mike Frysinger
|
|||||||
Mike Lothian
|
Mike Lothian
|
||||||
Nicholas Hurley
|
Nicholas Hurley
|
||||||
Nora Shoemaker
|
Nora Shoemaker
|
||||||
Paweł Wegner
|
|
||||||
Pedro Santos
|
Pedro Santos
|
||||||
Peeyush Aggarwal
|
Peeyush Aggarwal
|
||||||
Peng-Yu Chen
|
|
||||||
Peter Wu
|
Peter Wu
|
||||||
Piotr Sikora
|
Piotr Sikora
|
||||||
PufferOverflow
|
|
||||||
Raul Gutierrez Segales
|
Raul Gutierrez Segales
|
||||||
Remo E
|
Remo E
|
||||||
Renaud
|
|
||||||
Reza Tavakoli
|
Reza Tavakoli
|
||||||
Richard Wolfert
|
Richard Wolfert
|
||||||
Rick Lei
|
Rick Lei
|
||||||
Ross Smith II
|
Ross Smith II
|
||||||
Rudi Heitbaum
|
|
||||||
Ryan Carsten Schmidt
|
|
||||||
Ryo Ota
|
|
||||||
Scott Mitchell
|
Scott Mitchell
|
||||||
Sebastiaan Deckers
|
Sebastiaan Deckers
|
||||||
Sergei Trofimovich
|
|
||||||
Sergey Fedorov
|
|
||||||
Shelley Vohr
|
|
||||||
Simon Frankenberger
|
Simon Frankenberger
|
||||||
Simone Basso
|
Simone Basso
|
||||||
Soham Sinha
|
Soham Sinha
|
||||||
@@ -136,7 +111,6 @@ Syohei YOSHIDA
|
|||||||
Tapanito
|
Tapanito
|
||||||
Tatsuhiko Kubo
|
Tatsuhiko Kubo
|
||||||
Tatsuhiro Tsujikawa
|
Tatsuhiro Tsujikawa
|
||||||
Thomas Devoogdt
|
|
||||||
Tobias Geerinckx-Rice
|
Tobias Geerinckx-Rice
|
||||||
Tom Harwood
|
Tom Harwood
|
||||||
Tomas Krizek
|
Tomas Krizek
|
||||||
@@ -146,23 +120,18 @@ Vernon Tang
|
|||||||
Viacheslav Biriukov
|
Viacheslav Biriukov
|
||||||
Viktor Szakats
|
Viktor Szakats
|
||||||
Viktor Szépe
|
Viktor Szépe
|
||||||
Ville Vesilehto
|
|
||||||
Wenfeng Liu
|
Wenfeng Liu
|
||||||
William A Rowe Jr
|
William A Rowe Jr
|
||||||
Xiaoguang Sun
|
Xiaoguang Sun
|
||||||
Zachary Turner
|
|
||||||
Zhuoyun Wei
|
Zhuoyun Wei
|
||||||
acesso
|
acesso
|
||||||
ayanamist
|
ayanamist
|
||||||
bmarques1995
|
|
||||||
bxshi
|
bxshi
|
||||||
clemahieu
|
clemahieu
|
||||||
dalf
|
dalf
|
||||||
dawg
|
dawg
|
||||||
es
|
es
|
||||||
fangdingjun
|
fangdingjun
|
||||||
feicong
|
|
||||||
hrxi
|
|
||||||
jwchoi
|
jwchoi
|
||||||
kumagi
|
kumagi
|
||||||
lhuang04
|
lhuang04
|
||||||
@@ -170,6 +139,5 @@ lstefani
|
|||||||
makovich
|
makovich
|
||||||
mod-h2-dev
|
mod-h2-dev
|
||||||
moparisthebest
|
moparisthebest
|
||||||
robaho
|
|
||||||
snnn
|
snnn
|
||||||
yuuki-kodama
|
yuuki-kodama
|
||||||
|
|||||||
280
CMakeLists.txt
280
CMakeLists.txt
@@ -22,15 +22,15 @@
|
|||||||
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||||
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
|
|
||||||
cmake_minimum_required(VERSION 3.14)
|
cmake_minimum_required(VERSION 3.0)
|
||||||
# XXX using 1.8.90 instead of 1.9.0-DEV
|
# XXX using 1.8.90 instead of 1.9.0-DEV
|
||||||
project(nghttp2 VERSION 1.68.90 LANGUAGES C)
|
project(nghttp2 VERSION 1.45.1)
|
||||||
|
|
||||||
# See versioning rule:
|
# See versioning rule:
|
||||||
# https://www.gnu.org/software/libtool/manual/html_node/Updating-version-info.html
|
# http://www.gnu.org/software/libtool/manual/html_node/Updating-version-info.html
|
||||||
set(LT_CURRENT 43)
|
set(LT_CURRENT 35)
|
||||||
set(LT_REVISION 2)
|
set(LT_REVISION 0)
|
||||||
set(LT_AGE 29)
|
set(LT_AGE 21)
|
||||||
|
|
||||||
set(CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake" ${CMAKE_MODULE_PATH})
|
set(CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake" ${CMAKE_MODULE_PATH})
|
||||||
include(Version)
|
include(Version)
|
||||||
@@ -51,35 +51,21 @@ if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES)
|
|||||||
endif()
|
endif()
|
||||||
|
|
||||||
include(GNUInstallDirs)
|
include(GNUInstallDirs)
|
||||||
include(CMakeDependentOption)
|
|
||||||
|
|
||||||
# For documentation
|
# For Python bindings and documentation
|
||||||
find_package(Python3 COMPONENTS Interpreter)
|
# (Must be called before PythonLibs for matching versions.)
|
||||||
|
find_package(PythonInterp)
|
||||||
|
|
||||||
# Auto-detection of features that can be toggled
|
# Auto-detection of features that can be toggled
|
||||||
if(NOT ENABLE_LIB_ONLY)
|
find_package(OpenSSL 1.0.1)
|
||||||
enable_language(CXX)
|
|
||||||
find_package(Libev 4.11)
|
find_package(Libev 4.11)
|
||||||
find_package(Libcares 1.7.5)
|
find_package(Libcares 1.7.5)
|
||||||
find_package(ZLIB 1.2.3)
|
find_package(ZLIB 1.2.3)
|
||||||
find_package(Libbrotlienc 1.0.9)
|
find_package(Libngtcp2 0.0.0)
|
||||||
find_package(Libbrotlidec 1.0.9)
|
find_package(Libngtcp2_crypto_openssl 0.0.0)
|
||||||
endif()
|
find_package(Libnghttp3 0.0.0)
|
||||||
|
find_package(Libbpf 0.4.0)
|
||||||
if(WITH_WOLFSSL)
|
if(OPENSSL_FOUND AND LIBEV_FOUND AND ZLIB_FOUND)
|
||||||
find_package(WolfSSL 5.7.0)
|
|
||||||
else()
|
|
||||||
find_package(OpenSSL 1.1.1)
|
|
||||||
endif()
|
|
||||||
find_package(Libngtcp2 1.15.0)
|
|
||||||
find_package(Libnghttp3 1.11.0)
|
|
||||||
if(WITH_LIBBPF)
|
|
||||||
find_package(Libbpf 0.7.0)
|
|
||||||
if(NOT LIBBPF_FOUND)
|
|
||||||
message(FATAL_ERROR "libbpf was requested (WITH_LIBBPF=1) but not found.")
|
|
||||||
endif()
|
|
||||||
endif()
|
|
||||||
if((OPENSSL_FOUND OR WOLFSSL_FOUND) AND LIBEV_FOUND AND ZLIB_FOUND)
|
|
||||||
set(ENABLE_APP_DEFAULT ON)
|
set(ENABLE_APP_DEFAULT ON)
|
||||||
else()
|
else()
|
||||||
set(ENABLE_APP_DEFAULT OFF)
|
set(ENABLE_APP_DEFAULT OFF)
|
||||||
@@ -88,8 +74,15 @@ find_package(Systemd 209)
|
|||||||
find_package(Jansson 2.5)
|
find_package(Jansson 2.5)
|
||||||
set(ENABLE_HPACK_TOOLS_DEFAULT ${JANSSON_FOUND})
|
set(ENABLE_HPACK_TOOLS_DEFAULT ${JANSSON_FOUND})
|
||||||
# 2.0.8 is required because we use evconnlistener_set_error_cb()
|
# 2.0.8 is required because we use evconnlistener_set_error_cb()
|
||||||
find_package(Libevent 2.0.8 COMPONENTS core extra openssl)
|
find_package(Libevent 2.0.8 COMPONENTS libevent openssl)
|
||||||
set(ENABLE_EXAMPLES_DEFAULT ${LIBEVENT_OPENSSL_FOUND})
|
set(ENABLE_EXAMPLES_DEFAULT ${LIBEVENT_OPENSSL_FOUND})
|
||||||
|
find_package(Cython)
|
||||||
|
find_package(PythonLibs)
|
||||||
|
if(CYTHON_FOUND AND PYTHONLIBS_FOUND)
|
||||||
|
set(ENABLE_PYTHON_BINDINGS_DEFAULT ON)
|
||||||
|
else()
|
||||||
|
set(ENABLE_PYTHON_BINDINGS_DEFAULT OFF)
|
||||||
|
endif()
|
||||||
|
|
||||||
find_package(LibXml2 2.6.26)
|
find_package(LibXml2 2.6.26)
|
||||||
set(WITH_LIBXML2_DEFAULT ${LIBXML2_FOUND})
|
set(WITH_LIBXML2_DEFAULT ${LIBXML2_FOUND})
|
||||||
@@ -98,7 +91,8 @@ set(WITH_JEMALLOC_DEFAULT ${JEMALLOC_FOUND})
|
|||||||
|
|
||||||
include(CMakeOptions.txt)
|
include(CMakeOptions.txt)
|
||||||
|
|
||||||
if(ENABLE_LIB_ONLY AND (ENABLE_APP OR ENABLE_HPACK_TOOLS OR ENABLE_EXAMPLES))
|
if(ENABLE_LIB_ONLY AND (ENABLE_APP OR ENABLE_HPACK_TOOLS OR ENABLE_EXAMPLES OR
|
||||||
|
ENABLE_PYTHON_BINDINGS))
|
||||||
# Remember when disabled options are disabled for later diagnostics.
|
# Remember when disabled options are disabled for later diagnostics.
|
||||||
set(ENABLE_LIB_ONLY_DISABLED_OTHERS 1)
|
set(ENABLE_LIB_ONLY_DISABLED_OTHERS 1)
|
||||||
else()
|
else()
|
||||||
@@ -108,6 +102,7 @@ if(ENABLE_LIB_ONLY)
|
|||||||
set(ENABLE_APP OFF)
|
set(ENABLE_APP OFF)
|
||||||
set(ENABLE_HPACK_TOOLS OFF)
|
set(ENABLE_HPACK_TOOLS OFF)
|
||||||
set(ENABLE_EXAMPLES OFF)
|
set(ENABLE_EXAMPLES OFF)
|
||||||
|
set(ENABLE_PYTHON_BINDINGS OFF)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
# Do not disable assertions based on CMAKE_BUILD_TYPE.
|
# Do not disable assertions based on CMAKE_BUILD_TYPE.
|
||||||
@@ -124,9 +119,8 @@ else()
|
|||||||
set(HINT_NORETURN)
|
set(HINT_NORETURN)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if(NOT ENABLE_LIB_ONLY)
|
|
||||||
include(ExtractValidFlags)
|
include(ExtractValidFlags)
|
||||||
foreach(_cxx1x_flag -std=c++20)
|
foreach(_cxx1x_flag -std=c++14)
|
||||||
extract_valid_cxx_flags(_cxx1x_flag_supported ${_cxx1x_flag})
|
extract_valid_cxx_flags(_cxx1x_flag_supported ${_cxx1x_flag})
|
||||||
if(_cxx1x_flag_supported)
|
if(_cxx1x_flag_supported)
|
||||||
set(CXX1XCXXFLAGS ${_cxx1x_flag})
|
set(CXX1XCXXFLAGS ${_cxx1x_flag})
|
||||||
@@ -143,17 +137,31 @@ if(NOT ENABLE_LIB_ONLY)
|
|||||||
#include <vector>
|
#include <vector>
|
||||||
#include <future>
|
#include <future>
|
||||||
int main() { std::vector<std::future<int>> v; }" HAVE_STD_FUTURE)
|
int main() { std::vector<std::future<int>> v; }" HAVE_STD_FUTURE)
|
||||||
# Check that std::chrono::time_zone is available.
|
# Check that std::map::emplace is available for g++-4.7.
|
||||||
check_cxx_source_compiles("
|
check_cxx_source_compiles("
|
||||||
#include <chrono>
|
#include <map>
|
||||||
int main() { auto tz = std::chrono::current_zone(); (void)tz; }" HAVE_STD_CHRONO_TIME_ZONE)
|
int main() { std::map<int, int>().emplace(1, 2); }" HAVE_STD_MAP_EMPLACE)
|
||||||
cmake_pop_check_state()
|
cmake_pop_check_state()
|
||||||
endif()
|
|
||||||
|
|
||||||
# Checks for libraries.
|
# Checks for libraries.
|
||||||
# Additional libraries required for programs under src directory.
|
# Additional libraries required for programs under src directory.
|
||||||
set(APP_LIBRARIES)
|
set(APP_LIBRARIES)
|
||||||
|
|
||||||
|
if(ENABLE_PYTHON_BINDINGS)
|
||||||
|
if(NOT (CYTHON_FOUND AND PYTHONLIBS_FOUND))
|
||||||
|
message(FATAL_ERROR "python bindings were requested "
|
||||||
|
"(ENABLE_PYTHON_BINDINGS=1) but dependencies are not met.")
|
||||||
|
endif()
|
||||||
|
if(NOT PYTHON_VERSION_STRING STREQUAL PYTHONLIBS_VERSION_STRING)
|
||||||
|
message(FATAL_ERROR
|
||||||
|
"Python executable and library must have the same version!"
|
||||||
|
" Found Python ${PYTHON_VERSION_STRING} and"
|
||||||
|
" PythonLibs ${PYTHONLIBS_VERSION_STRING}"
|
||||||
|
)
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
|
||||||
set(CMAKE_THREAD_PREFER_PTHREAD 1)
|
set(CMAKE_THREAD_PREFER_PTHREAD 1)
|
||||||
find_package(Threads)
|
find_package(Threads)
|
||||||
if(CMAKE_USE_PTHREADS_INIT)
|
if(CMAKE_USE_PTHREADS_INIT)
|
||||||
@@ -163,58 +171,37 @@ endif()
|
|||||||
# case "$host" in
|
# case "$host" in
|
||||||
# *android*)
|
# *android*)
|
||||||
# android_build=yes
|
# android_build=yes
|
||||||
# # android does not need -pthread, but needs following 3 libs for C++
|
# # android does not need -pthread, but needs followng 3 libs for C++
|
||||||
# APPLDFLAGS="$APPLDFLAGS -lstdc++ -latomic -lsupc++"
|
# APPLDFLAGS="$APPLDFLAGS -lstdc++ -latomic -lsupc++"
|
||||||
|
|
||||||
# dl: openssl requires libdl when it is statically linked.
|
# dl: openssl requires libdl when it is statically linked.
|
||||||
# XXX shouldn't ${CMAKE_DL_LIBS} be appended to OPENSSL_LIBRARIES instead of
|
# XXX shouldn't ${CMAKE_DL_LIBS} be appended to OPENSSL_LIBRARIES instead of
|
||||||
# APP_LIBRARIES if it is really specific to OpenSSL?
|
# APP_LIBRARIES if it is really specific to OpenSSL?
|
||||||
|
|
||||||
|
find_package(CUnit 2.1)
|
||||||
enable_testing()
|
enable_testing()
|
||||||
|
set(HAVE_CUNIT ${CUNIT_FOUND})
|
||||||
|
if(HAVE_CUNIT)
|
||||||
add_custom_target(check COMMAND ${CMAKE_CTEST_COMMAND})
|
add_custom_target(check COMMAND ${CMAKE_CTEST_COMMAND})
|
||||||
|
endif()
|
||||||
|
|
||||||
# openssl (for src)
|
# openssl (for src)
|
||||||
include(CheckSymbolExists)
|
include(CheckSymbolExists)
|
||||||
set(HAVE_OPENSSL ${OPENSSL_FOUND})
|
set(HAVE_OPENSSL ${OPENSSL_FOUND})
|
||||||
if(NOT ENABLE_LIB_ONLY AND OPENSSL_FOUND)
|
if(OPENSSL_FOUND)
|
||||||
set(OPENSSL_INCLUDE_DIRS ${OPENSSL_INCLUDE_DIR})
|
set(OPENSSL_INCLUDE_DIRS ${OPENSSL_INCLUDE_DIR})
|
||||||
cmake_push_check_state()
|
cmake_push_check_state()
|
||||||
set(CMAKE_REQUIRED_INCLUDES "${OPENSSL_INCLUDE_DIR}")
|
set(CMAKE_REQUIRED_INCLUDES "${OPENSSL_INCLUDE_DIR}")
|
||||||
set(CMAKE_REQUIRED_LIBRARIES "${OPENSSL_LIBRARIES}")
|
set(CMAKE_REQUIRED_LIBRARIES "${OPENSSL_LIBRARIES}")
|
||||||
if(WIN32)
|
check_symbol_exists(SSL_is_quic "openssl/ssl.h" HAVE_SSL_IS_QUIC)
|
||||||
set(CMAKE_REQUIRED_LIBRARIES "${CMAKE_REQUIRED_LIBRARIES}" "ws2_32" "bcrypt")
|
if(NOT HAVE_SSL_IS_QUIC)
|
||||||
endif()
|
message(WARNING "OpenSSL in ${OPENSSL_LIBRARIES} dose not have SSL_is_quic. HTTP/3 support cannot be enabled")
|
||||||
check_symbol_exists("LIBRESSL_VERSION_NUMBER" "openssl/opensslv.h" LIBRESSL_FOUND)
|
|
||||||
if(ENABLE_HTTP3)
|
|
||||||
check_symbol_exists(SSL_provide_quic_data "openssl/ssl.h" HAVE_SSL_PROVIDE_QUIC_DATA)
|
|
||||||
if(NOT HAVE_SSL_PROVIDE_QUIC_DATA)
|
|
||||||
check_symbol_exists(SSL_set_quic_tls_cbs "openssl/ssl.h" HAVE_SSL_SET_QUIC_TLS_CBS)
|
|
||||||
if(NOT HAVE_SSL_SET_QUIC_TLS_CBS)
|
|
||||||
message(WARNING "OpenSSL in ${OPENSSL_LIBRARIES} has neither SSL_provide_quic_data nor SSL_set_quic_tls_cbs. HTTP/3 support cannot be enabled")
|
|
||||||
endif()
|
|
||||||
endif()
|
|
||||||
endif()
|
endif()
|
||||||
cmake_pop_check_state()
|
cmake_pop_check_state()
|
||||||
else()
|
else()
|
||||||
set(OPENSSL_INCLUDE_DIRS "")
|
set(OPENSSL_INCLUDE_DIRS "")
|
||||||
set(OPENSSL_LIBRARIES "")
|
set(OPENSSL_LIBRARIES "")
|
||||||
endif()
|
endif()
|
||||||
# wolfSSL (for src)
|
|
||||||
set(HAVE_WOLFSSL ${WOLFSSL_FOUND})
|
|
||||||
if(WOLFSSL_FOUND)
|
|
||||||
set(WOLFSSL_INCLUDE_DIRS ${WOLFSSL_INCLUDE_DIR})
|
|
||||||
cmake_push_check_state()
|
|
||||||
set(CMAKE_REQUIRED_INCLUDES "${WOLFSSL_INCLUDE_DIR}")
|
|
||||||
set(CMAKE_REQUIRED_LIBRARIES "${WOLFSSL_LIBRARIES}")
|
|
||||||
check_symbol_exists(SSL_provide_quic_data "wolfssl/options.h;wolfssl/ssl.h" HAVE_WOLFSSL_SSL_PROVIDE_QUIC_DATA)
|
|
||||||
if(NOT HAVE_WOLFSSL_SSL_PROVIDE_QUIC_DATA)
|
|
||||||
message(WARNING "wolfSSL in ${WOLFSSL_LIBRARIES} does not have SSL_provide_quic_data. HTTP/3 support cannot be enabled")
|
|
||||||
endif()
|
|
||||||
cmake_pop_check_state()
|
|
||||||
else()
|
|
||||||
set(WOLFSSL_INCLUDE_DIRS "")
|
|
||||||
set(WOLFSSL_LIBRARIES "")
|
|
||||||
endif()
|
|
||||||
# libev (for src)
|
# libev (for src)
|
||||||
set(HAVE_LIBEV ${LIBEV_FOUND})
|
set(HAVE_LIBEV ${LIBEV_FOUND})
|
||||||
set(HAVE_ZLIB ${ZLIB_FOUND})
|
set(HAVE_ZLIB ${ZLIB_FOUND})
|
||||||
@@ -245,11 +232,8 @@ endif()
|
|||||||
# jemalloc
|
# jemalloc
|
||||||
set(HAVE_JEMALLOC ${JEMALLOC_FOUND})
|
set(HAVE_JEMALLOC ${JEMALLOC_FOUND})
|
||||||
|
|
||||||
# libbrotli (for src)
|
if(ENABLE_ASIO_LIB)
|
||||||
set(HAVE_LIBBROTLIENC ${LIBBROTLIENC_FOUND})
|
find_package(Boost 1.54.0 REQUIRED system thread)
|
||||||
set(HAVE_LIBBROTLIDEC ${LIBBROTLIDEC_FOUND})
|
|
||||||
if(LIBBROTLIENC_FOUND AND LIBBROTLIDEC_FOUND)
|
|
||||||
set(HAVE_LIBBROTLI 1)
|
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
# libbpf (for bpf)
|
# libbpf (for bpf)
|
||||||
@@ -267,45 +251,13 @@ int main() { enum bpf_stats_type foo; (void)foo; }" HAVE_BPF_STATS_TYPE)
|
|||||||
endif()
|
endif()
|
||||||
|
|
||||||
# The nghttp, nghttpd and nghttpx under src depend on zlib, OpenSSL and libev
|
# The nghttp, nghttpd and nghttpx under src depend on zlib, OpenSSL and libev
|
||||||
if(ENABLE_APP AND NOT (ZLIB_FOUND AND (OPENSSL_FOUND OR WOLFSSL_FOUND) AND LIBEV_FOUND))
|
if(ENABLE_APP AND NOT (ZLIB_FOUND AND OPENSSL_FOUND AND LIBEV_FOUND))
|
||||||
message(FATAL_ERROR "Applications were requested (ENABLE_APP=1) but dependencies are not met.")
|
message(FATAL_ERROR "Applications were requested (ENABLE_APP=1) but dependencies are not met.")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if(ENABLE_HTTP3)
|
# HTTP/3 requires quictls/openssl, libngtcp2, libngtcp2_crypto_openssl
|
||||||
if(HAVE_SSL_PROVIDE_QUIC_DATA AND NOT LIBRESSL_FOUND)
|
# and libnghttp3.
|
||||||
find_package(Libngtcp2_crypto_quictls 1.15.0)
|
if(ENABLE_HTTP3 AND NOT (HAVE_SSL_IS_QUIC AND LIBNGTCP2_FOUND AND LIBNGTCP2_CRYPTO_OPENSSL_FOUND AND LIBNGHTTP3_FOUND))
|
||||||
if(LIBNGTCP2_CRYPTO_QUICTLS_FOUND)
|
|
||||||
set(HAVE_LIBNGTCP2_CRYPTO_QUICTLS 1)
|
|
||||||
endif()
|
|
||||||
elseif(HAVE_SSL_PROVIDE_QUIC_DATA AND LIBRESSL_FOUND)
|
|
||||||
find_package(Libngtcp2_crypto_libressl 1.15.0)
|
|
||||||
if(LIBNGTCP2_CRYPTO_LIBRESSL_FOUND)
|
|
||||||
set(HAVE_LIBNGTCP2_CRYPTO_LIBRESSL 1)
|
|
||||||
endif()
|
|
||||||
elseif(HAVE_WOLFSSL_SSL_PROVIDE_QUIC_DATA)
|
|
||||||
find_package(Libngtcp2_crypto_wolfssl 1.15.0)
|
|
||||||
if(LIBNGTCP2_CRYPTO_WOLFSSL_FOUND)
|
|
||||||
set(HAVE_LIBNGTCP2_CRYPTO_WOLFSSL 1)
|
|
||||||
endif()
|
|
||||||
elseif(HAVE_SSL_SET_QUIC_TLS_CBS)
|
|
||||||
find_package(Libngtcp2_crypto_ossl 1.15.0)
|
|
||||||
if(LIBNGTCP2_CRYPTO_OSSL_FOUND)
|
|
||||||
set(HAVE_LIBNGTCP2_CRYPTO_OSSL 1)
|
|
||||||
endif()
|
|
||||||
endif()
|
|
||||||
endif()
|
|
||||||
|
|
||||||
# HTTP/3 requires libngtcp2 + nghttp3 + one of:
|
|
||||||
#
|
|
||||||
# - quictls/openssl + libngtcp2_crypto_quictls
|
|
||||||
# - libressl + libngtcp2_crypto_libressl
|
|
||||||
# - wolfSSL + libngtcp2_crypto_wolfssl
|
|
||||||
# - openssl/openssl + libngtcp2_crypto_ossl
|
|
||||||
if(ENABLE_HTTP3 AND NOT (LIBNGTCP2_FOUND AND LIBNGHTTP3_FOUND AND
|
|
||||||
((HAVE_SSL_PROVIDE_QUIC_DATA AND NOT LIBRESSL_FOUND AND LIBNGTCP2_CRYPTO_QUICTLS_FOUND) OR
|
|
||||||
(HAVE_SSL_PROVIDE_QUIC_DATA AND LIBRESSL_FOUND AND LIBNGTCP2_CRYPTO_LIBRESSL_FOUND) OR
|
|
||||||
(HAVE_WOLFSSL_SSL_PROVIDE_QUIC_DATA AND LIBNGTCP2_CRYPTO_WOLFSSL_FOUND) OR
|
|
||||||
(HAVE_SSL_SET_QUIC_TLS_CBS AND LIBNGTCP2_CRYPTO_OSSL_FOUND))))
|
|
||||||
message(FATAL_ERROR "HTTP/3 was requested (ENABLE_HTTP3=1) but dependencies are not met.")
|
message(FATAL_ERROR "HTTP/3 was requested (ENABLE_HTTP3=1) but dependencies are not met.")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
@@ -314,13 +266,13 @@ if(ENABLE_HPACK_TOOLS AND NOT HAVE_JANSSON)
|
|||||||
message(FATAL_ERROR "HPACK tools were requested (ENABLE_HPACK_TOOLS=1) but dependencies are not met.")
|
message(FATAL_ERROR "HPACK tools were requested (ENABLE_HPACK_TOOLS=1) but dependencies are not met.")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
# examples
|
# C++ library libnghttp2_asio
|
||||||
if(ENABLE_EXAMPLES AND NOT (OPENSSL_FOUND AND LIBEVENT_OPENSSL_FOUND))
|
if(ENABLE_EXAMPLES AND NOT (OPENSSL_FOUND AND LIBEVENT_OPENSSL_FOUND))
|
||||||
message(FATAL_ERROR "examples were requested (ENABLE_EXAMPLES=1) but dependencies are not met.")
|
message(FATAL_ERROR "examples were requested (ENABLE_EXAMPLES=1) but dependencies are not met.")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
# third-party http-parser only be built when needed
|
# third-party http-parser only be built when needed
|
||||||
if(ENABLE_EXAMPLES OR ENABLE_APP OR ENABLE_HPACK_TOOLS)
|
if(ENABLE_EXAMPLES OR ENABLE_APP OR ENABLE_HPACK_TOOLS OR ENABLE_ASIO_LIB)
|
||||||
set(ENABLE_THIRD_PARTY 1)
|
set(ENABLE_THIRD_PARTY 1)
|
||||||
# mruby (for src/nghttpx)
|
# mruby (for src/nghttpx)
|
||||||
set(HAVE_MRUBY ${WITH_MRUBY})
|
set(HAVE_MRUBY ${WITH_MRUBY})
|
||||||
@@ -338,13 +290,12 @@ check_include_file("inttypes.h" HAVE_INTTYPES_H)
|
|||||||
check_include_file("limits.h" HAVE_LIMITS_H)
|
check_include_file("limits.h" HAVE_LIMITS_H)
|
||||||
check_include_file("netdb.h" HAVE_NETDB_H)
|
check_include_file("netdb.h" HAVE_NETDB_H)
|
||||||
check_include_file("netinet/in.h" HAVE_NETINET_IN_H)
|
check_include_file("netinet/in.h" HAVE_NETINET_IN_H)
|
||||||
check_include_file("netinet/ip.h" HAVE_NETINET_IP_H)
|
|
||||||
check_include_file("pwd.h" HAVE_PWD_H)
|
check_include_file("pwd.h" HAVE_PWD_H)
|
||||||
check_include_file("sys/socket.h" HAVE_SYS_SOCKET_H)
|
check_include_file("sys/socket.h" HAVE_SYS_SOCKET_H)
|
||||||
check_include_file("sys/time.h" HAVE_SYS_TIME_H)
|
check_include_file("sys/time.h" HAVE_SYS_TIME_H)
|
||||||
check_include_file("syslog.h" HAVE_SYSLOG_H)
|
check_include_file("syslog.h" HAVE_SYSLOG_H)
|
||||||
|
check_include_file("time.h" HAVE_TIME_H)
|
||||||
check_include_file("unistd.h" HAVE_UNISTD_H)
|
check_include_file("unistd.h" HAVE_UNISTD_H)
|
||||||
check_include_file("windows.h" HAVE_WINDOWS_H)
|
|
||||||
|
|
||||||
include(CheckTypeSize)
|
include(CheckTypeSize)
|
||||||
# Checks for typedefs, structures, and compiler characteristics.
|
# Checks for typedefs, structures, and compiler characteristics.
|
||||||
@@ -374,15 +325,15 @@ endif()
|
|||||||
include(CheckStructHasMember)
|
include(CheckStructHasMember)
|
||||||
check_struct_has_member("struct tm" tm_gmtoff time.h HAVE_STRUCT_TM_TM_GMTOFF)
|
check_struct_has_member("struct tm" tm_gmtoff time.h HAVE_STRUCT_TM_TM_GMTOFF)
|
||||||
|
|
||||||
|
# Check size of pointer to decide we need 8 bytes alignment adjustment.
|
||||||
|
check_type_size("int *" SIZEOF_INT_P)
|
||||||
|
check_type_size("time_t" SIZEOF_TIME_T)
|
||||||
|
|
||||||
# Checks for library functions.
|
# Checks for library functions.
|
||||||
include(CheckFunctionExists)
|
include(CheckFunctionExists)
|
||||||
check_function_exists(_Exit HAVE__EXIT)
|
check_function_exists(_Exit HAVE__EXIT)
|
||||||
check_function_exists(accept4 HAVE_ACCEPT4)
|
check_function_exists(accept4 HAVE_ACCEPT4)
|
||||||
check_function_exists(clock_gettime HAVE_CLOCK_GETTIME)
|
|
||||||
check_function_exists(mkostemp HAVE_MKOSTEMP)
|
check_function_exists(mkostemp HAVE_MKOSTEMP)
|
||||||
check_function_exists(pipe2 HAVE_PIPE2)
|
|
||||||
|
|
||||||
check_symbol_exists(GetTickCount64 "windows.h;sysinfoapi.h" HAVE_GETTICKCOUNT64)
|
|
||||||
|
|
||||||
include(CheckSymbolExists)
|
include(CheckSymbolExists)
|
||||||
# XXX does this correctly detect initgroups (un)availability on cygwin?
|
# XXX does this correctly detect initgroups (un)availability on cygwin?
|
||||||
@@ -395,8 +346,6 @@ if(NOT HAVE_DECL_INITGROUPS AND HAVE_UNISTD_H)
|
|||||||
endif()
|
endif()
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
check_symbol_exists(CLOCK_MONOTONIC "time.h" HAVE_DECL_CLOCK_MONOTONIC)
|
|
||||||
|
|
||||||
set(WARNCFLAGS)
|
set(WARNCFLAGS)
|
||||||
set(WARNCXXFLAGS)
|
set(WARNCXXFLAGS)
|
||||||
if(CMAKE_C_COMPILER_ID MATCHES "MSVC")
|
if(CMAKE_C_COMPILER_ID MATCHES "MSVC")
|
||||||
@@ -406,12 +355,65 @@ if(CMAKE_C_COMPILER_ID MATCHES "MSVC")
|
|||||||
endif()
|
endif()
|
||||||
else()
|
else()
|
||||||
if(ENABLE_WERROR)
|
if(ENABLE_WERROR)
|
||||||
set(WARNCFLAGS "-Werror")
|
extract_valid_c_flags(WARNCFLAGS -Werror)
|
||||||
set(WARNCXXFLAGS "-Werror")
|
extract_valid_c_flags(WARNCXXFLAGS -Werror)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
include(PickyWarningsC)
|
# For C compiler
|
||||||
include(PickyWarningsCXX)
|
extract_valid_c_flags(WARNCFLAGS
|
||||||
|
-Wall
|
||||||
|
-Wextra
|
||||||
|
-Wmissing-prototypes
|
||||||
|
-Wstrict-prototypes
|
||||||
|
-Wmissing-declarations
|
||||||
|
-Wpointer-arith
|
||||||
|
-Wdeclaration-after-statement
|
||||||
|
-Wformat-security
|
||||||
|
-Wwrite-strings
|
||||||
|
-Wshadow
|
||||||
|
-Winline
|
||||||
|
-Wnested-externs
|
||||||
|
-Wfloat-equal
|
||||||
|
-Wundef
|
||||||
|
-Wendif-labels
|
||||||
|
-Wempty-body
|
||||||
|
-Wcast-align
|
||||||
|
-Wclobbered
|
||||||
|
-Wvla
|
||||||
|
-Wpragmas
|
||||||
|
-Wunreachable-code
|
||||||
|
-Waddress
|
||||||
|
-Wattributes
|
||||||
|
-Wdiv-by-zero
|
||||||
|
-Wshorten-64-to-32
|
||||||
|
|
||||||
|
-Wconversion
|
||||||
|
-Wextended-offsetof
|
||||||
|
-Wformat-nonliteral
|
||||||
|
-Wlanguage-extension-token
|
||||||
|
-Wmissing-field-initializers
|
||||||
|
-Wmissing-noreturn
|
||||||
|
-Wmissing-variable-declarations
|
||||||
|
# Not used because we cannot change public structs
|
||||||
|
# -Wpadded
|
||||||
|
-Wsign-conversion
|
||||||
|
# Not used because this basically disallows default case
|
||||||
|
# -Wswitch-enum
|
||||||
|
-Wunreachable-code-break
|
||||||
|
-Wunused-macros
|
||||||
|
-Wunused-parameter
|
||||||
|
-Wredundant-decls
|
||||||
|
# Only work with Clang for the moment
|
||||||
|
-Wheader-guard
|
||||||
|
# This is required because we pass format string as "const char*.
|
||||||
|
-Wno-format-nonliteral
|
||||||
|
)
|
||||||
|
|
||||||
|
extract_valid_cxx_flags(WARNCXXFLAGS
|
||||||
|
# For C++ compiler
|
||||||
|
-Wall
|
||||||
|
-Wformat-security
|
||||||
|
)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if(ENABLE_STATIC_CRT)
|
if(ENABLE_STATIC_CRT)
|
||||||
@@ -454,6 +456,8 @@ set(sbindir "${CMAKE_INSTALL_FULL_SBINDIR}")
|
|||||||
foreach(name
|
foreach(name
|
||||||
lib/libnghttp2.pc
|
lib/libnghttp2.pc
|
||||||
lib/includes/nghttp2/nghttp2ver.h
|
lib/includes/nghttp2/nghttp2ver.h
|
||||||
|
src/libnghttp2_asio.pc
|
||||||
|
python/setup.py
|
||||||
integration-tests/config.go
|
integration-tests/config.go
|
||||||
integration-tests/setenv
|
integration-tests/setenv
|
||||||
doc/conf.py
|
doc/conf.py
|
||||||
@@ -464,9 +468,14 @@ foreach(name
|
|||||||
doc/tutorial-hpack.rst
|
doc/tutorial-hpack.rst
|
||||||
doc/nghttpx-howto.rst
|
doc/nghttpx-howto.rst
|
||||||
doc/h2load-howto.rst
|
doc/h2load-howto.rst
|
||||||
|
doc/libnghttp2_asio.rst
|
||||||
|
doc/python-apiref.rst
|
||||||
doc/building-android-binary.rst
|
doc/building-android-binary.rst
|
||||||
doc/nghttp2.h.rst
|
doc/nghttp2.h.rst
|
||||||
doc/nghttp2ver.h.rst
|
doc/nghttp2ver.h.rst
|
||||||
|
doc/asio_http2.h.rst
|
||||||
|
doc/asio_http2_server.h.rst
|
||||||
|
doc/asio_http2_client.h.rst
|
||||||
doc/contribute.rst
|
doc/contribute.rst
|
||||||
)
|
)
|
||||||
configure_file("${name}.in" "${name}" @ONLY)
|
configure_file("${name}.in" "${name}" @ONLY)
|
||||||
@@ -489,16 +498,15 @@ add_subdirectory(lib)
|
|||||||
#add_subdirectory(lib/includes)
|
#add_subdirectory(lib/includes)
|
||||||
add_subdirectory(third-party)
|
add_subdirectory(third-party)
|
||||||
add_subdirectory(src)
|
add_subdirectory(src)
|
||||||
|
#add_subdirectory(src/includes)
|
||||||
add_subdirectory(examples)
|
add_subdirectory(examples)
|
||||||
if(CMAKE_PROJECT_NAME STREQUAL PROJECT_NAME AND BUILD_TESTING)
|
add_subdirectory(python)
|
||||||
add_subdirectory(tests)
|
add_subdirectory(tests)
|
||||||
#add_subdirectory(tests/testdata)
|
#add_subdirectory(tests/testdata)
|
||||||
add_subdirectory(integration-tests)
|
add_subdirectory(integration-tests)
|
||||||
endif()
|
|
||||||
if(ENABLE_DOC)
|
|
||||||
add_subdirectory(doc)
|
add_subdirectory(doc)
|
||||||
endif()
|
|
||||||
add_subdirectory(contrib)
|
add_subdirectory(contrib)
|
||||||
|
add_subdirectory(script)
|
||||||
add_subdirectory(bpf)
|
add_subdirectory(bpf)
|
||||||
|
|
||||||
|
|
||||||
@@ -517,23 +525,21 @@ message(STATUS "summary of build options:
|
|||||||
CXXFLAGS: ${CMAKE_CXX_FLAGS_${_build_type}} ${CMAKE_CXX_FLAGS}
|
CXXFLAGS: ${CMAKE_CXX_FLAGS_${_build_type}} ${CMAKE_CXX_FLAGS}
|
||||||
WARNCFLAGS: ${WARNCFLAGS}
|
WARNCFLAGS: ${WARNCFLAGS}
|
||||||
CXX1XCXXFLAGS: ${CXX1XCXXFLAGS}
|
CXX1XCXXFLAGS: ${CXX1XCXXFLAGS}
|
||||||
WARNCXXFLAGS: ${WARNCXXFLAGS}
|
|
||||||
Python:
|
Python:
|
||||||
Python: ${Python3_EXECUTABLE}
|
Python: ${PYTHON_EXECUTABLE}
|
||||||
Python3_VERSION: ${Python3_VERSION}
|
PYTHON_VERSION: ${PYTHON_VERSION_STRING}
|
||||||
|
Library version:${PYTHONLIBS_VERSION_STRING}
|
||||||
|
Cython: ${CYTHON_EXECUTABLE}
|
||||||
Test:
|
Test:
|
||||||
|
CUnit: ${HAVE_CUNIT} (LIBS='${CUNIT_LIBRARIES}')
|
||||||
Failmalloc: ${ENABLE_FAILMALLOC}
|
Failmalloc: ${ENABLE_FAILMALLOC}
|
||||||
Build Test: ${BUILD_TESTING}
|
|
||||||
Libs:
|
Libs:
|
||||||
OpenSSL: ${HAVE_OPENSSL} (LIBS='${OPENSSL_LIBRARIES}')
|
OpenSSL: ${HAVE_OPENSSL} (LIBS='${OPENSSL_LIBRARIES}')
|
||||||
wolfSSL: ${HAVE_WOLFSSL} (LIBS='${WOLFSSL_LIBRARIES}')
|
|
||||||
Libxml2: ${HAVE_LIBXML2} (LIBS='${LIBXML2_LIBRARIES}')
|
Libxml2: ${HAVE_LIBXML2} (LIBS='${LIBXML2_LIBRARIES}')
|
||||||
Libev: ${HAVE_LIBEV} (LIBS='${LIBEV_LIBRARIES}')
|
Libev: ${HAVE_LIBEV} (LIBS='${LIBEV_LIBRARIES}')
|
||||||
Libc-ares: ${HAVE_LIBCARES} (LIBS='${LIBCARES_LIBRARIES}')
|
Libc-ares: ${HAVE_LIBCARES} (LIBS='${LIBCARES_LIBRARIES}')
|
||||||
Libngtcp2: ${HAVE_LIBNGTCP2} (LIBS='${LIBNGTCP2_LIBRARIES}')
|
Libngtcp2: ${HAVE_LIBNGTCP2} (LIBS='${LIBNGTCP2_LIBRARIES}')
|
||||||
Libngtcp2_crypto_quictls: ${HAVE_LIBNGTCP2_CRYPTO_QUICTLS} (LIBS='${LIBNGTCP2_CRYPTO_QUICTLS_LIBRARIES}')
|
Libngtcp2_crypto_openssl: ${HAVE_LIBNGTCP2_CRYPTO_OPENSSL} (LIBS='${LIBNGTCP2_CRYPTO_OPENSSL_LIBRARIES}')
|
||||||
Libngtcp2_crypto_libressl: ${HAVE_LIBNGTCP2_CRYPTO_LIBRESSL} (LIBS='${LIBNGTCP2_CRYPTO_LIBRESSL_LIBRARIES}')
|
|
||||||
Libngtcp2_crypto_wolfssl: ${HAVE_LIBNGTCP2_CRYPTO_WOLFSSL} (LIBS='${LIBNGTCP2_CRYPTO_WOLFSSL_LIBRARIES}')
|
|
||||||
Libnghttp3: ${HAVE_LIBNGHTTP3} (LIBS='${LIBNGHTTP3_LIBRARIES}')
|
Libnghttp3: ${HAVE_LIBNGHTTP3} (LIBS='${LIBNGHTTP3_LIBRARIES}')
|
||||||
Libbpf: ${HAVE_LIBBPF} (LIBS='${LIBBPF_LIBRARIES}')
|
Libbpf: ${HAVE_LIBBPF} (LIBS='${LIBBPF_LIBRARIES}')
|
||||||
Libevent(SSL): ${HAVE_LIBEVENT_OPENSSL} (LIBS='${LIBEVENT_OPENSSL_LIBRARIES}')
|
Libevent(SSL): ${HAVE_LIBEVENT_OPENSSL} (LIBS='${LIBEVENT_OPENSSL_LIBRARIES}')
|
||||||
@@ -541,8 +547,8 @@ message(STATUS "summary of build options:
|
|||||||
Jemalloc: ${HAVE_JEMALLOC} (LIBS='${JEMALLOC_LIBRARIES}')
|
Jemalloc: ${HAVE_JEMALLOC} (LIBS='${JEMALLOC_LIBRARIES}')
|
||||||
Zlib: ${HAVE_ZLIB} (LIBS='${ZLIB_LIBRARIES}')
|
Zlib: ${HAVE_ZLIB} (LIBS='${ZLIB_LIBRARIES}')
|
||||||
Systemd: ${HAVE_SYSTEMD} (LIBS='${SYSTEMD_LIBRARIES}')
|
Systemd: ${HAVE_SYSTEMD} (LIBS='${SYSTEMD_LIBRARIES}')
|
||||||
Libbrotlienc: ${HAVE_LIBBROTLIENC} (LIBS='${LIBBROTLIENC_LIBRARIES}')
|
Boost::System: ${Boost_SYSTEM_LIBRARY}
|
||||||
Libbrotlidec: ${HAVE_LIBBROTLIDEC} (LIBS='${LIBBROTLIDEC_LIBRARIES}')
|
Boost::Thread: ${Boost_THREAD_LIBRARY}
|
||||||
Third-party:
|
Third-party:
|
||||||
http-parser: ${ENABLE_THIRD_PARTY}
|
http-parser: ${ENABLE_THIRD_PARTY}
|
||||||
MRuby: ${HAVE_MRUBY}
|
MRuby: ${HAVE_MRUBY}
|
||||||
@@ -550,7 +556,9 @@ message(STATUS "summary of build options:
|
|||||||
Features:
|
Features:
|
||||||
Applications: ${ENABLE_APP}
|
Applications: ${ENABLE_APP}
|
||||||
HPACK tools: ${ENABLE_HPACK_TOOLS}
|
HPACK tools: ${ENABLE_HPACK_TOOLS}
|
||||||
|
Libnghttp2_asio:${ENABLE_ASIO_LIB}
|
||||||
Examples: ${ENABLE_EXAMPLES}
|
Examples: ${ENABLE_EXAMPLES}
|
||||||
|
Python bindings:${ENABLE_PYTHON_BINDINGS}
|
||||||
Threading: ${ENABLE_THREADS}
|
Threading: ${ENABLE_THREADS}
|
||||||
HTTP/3(EXPERIMENTAL): ${ENABLE_HTTP3}
|
HTTP/3(EXPERIMENTAL): ${ENABLE_HTTP3}
|
||||||
")
|
")
|
||||||
|
|||||||
@@ -7,24 +7,25 @@ option(ENABLE_APP "Build applications (nghttp, nghttpd, nghttpx and h2load
|
|||||||
${ENABLE_APP_DEFAULT})
|
${ENABLE_APP_DEFAULT})
|
||||||
option(ENABLE_HPACK_TOOLS "Build HPACK tools"
|
option(ENABLE_HPACK_TOOLS "Build HPACK tools"
|
||||||
${ENABLE_HPACK_TOOLS_DEFAULT})
|
${ENABLE_HPACK_TOOLS_DEFAULT})
|
||||||
|
option(ENABLE_ASIO_LIB "Build C++ libnghttp2_asio library")
|
||||||
option(ENABLE_EXAMPLES "Build examples"
|
option(ENABLE_EXAMPLES "Build examples"
|
||||||
${ENABLE_EXAMPLES_DEFAULT})
|
${ENABLE_EXAMPLES_DEFAULT})
|
||||||
|
option(ENABLE_PYTHON_BINDINGS "Build Python bindings"
|
||||||
|
${ENABLE_PYTHON_BINDINGS_DEFAULT})
|
||||||
option(ENABLE_FAILMALLOC "Build failmalloc test program" ON)
|
option(ENABLE_FAILMALLOC "Build failmalloc test program" ON)
|
||||||
option(ENABLE_LIB_ONLY "Build libnghttp2 only. This is a short hand for -DENABLE_APP=0 -DENABLE_EXAMPLES=0 -DENABLE_HPACK_TOOLS=0")
|
option(ENABLE_LIB_ONLY "Build libnghttp2 only. This is a short hand for -DENABLE_APP=0 -DENABLE_EXAMPLES=0 -DENABLE_HPACK_TOOLS=0 -DENABLE_PYTHON_BINDINGS=0")
|
||||||
option(BUILD_SHARED_LIBS "Build libnghttp2 as a shared library" ON)
|
option(ENABLE_STATIC_LIB "Build libnghttp2 in static mode also")
|
||||||
option(BUILD_STATIC_LIBS "Build libnghttp2 in static mode also" OFF)
|
option(ENABLE_SHARED_LIB "Build libnghttp2 as a shared library" ON)
|
||||||
option(ENABLE_STATIC_CRT "Build libnghttp2 against the MS LIBCMT[d]")
|
option(ENABLE_STATIC_CRT "Build libnghttp2 against the MS LIBCMT[d]")
|
||||||
option(ENABLE_HTTP3 "Enable HTTP/3 support" OFF)
|
option(ENABLE_HTTP3 "Enable HTTP/3 support" OFF)
|
||||||
option(ENABLE_DOC "Build documentation" ON)
|
|
||||||
cmake_dependent_option(BUILD_TESTING "Enable tests" ON "BUILD_STATIC_LIBS" OFF)
|
|
||||||
|
|
||||||
option(WITH_LIBXML2 "Use libxml2"
|
option(WITH_LIBXML2 "Use libxml2"
|
||||||
${WITH_LIBXML2_DEFAULT})
|
${WITH_LIBXML2_DEFAULT})
|
||||||
option(WITH_JEMALLOC "Use jemalloc"
|
option(WITH_JEMALLOC "Use jemalloc"
|
||||||
${WITH_JEMALLOC_DEFAULT})
|
${WITH_JEMALLOC_DEFAULT})
|
||||||
|
option(WITH_SPDYLAY "Use spdylay"
|
||||||
|
${WITH_SPDYLAY_DEFAULT})
|
||||||
option(WITH_MRUBY "Use mruby")
|
option(WITH_MRUBY "Use mruby")
|
||||||
option(WITH_NEVERBLEED "Use neverbleed")
|
option(WITH_NEVERBLEED "Use neverbleed")
|
||||||
option(WITH_LIBBPF "Use libbpf")
|
|
||||||
option(WITH_WOLFSSL "Use wolfSSL")
|
|
||||||
|
|
||||||
# vim: ft=cmake:
|
# vim: ft=cmake:
|
||||||
|
|||||||
@@ -12,41 +12,59 @@
|
|||||||
|
|
||||||
|
|
||||||
# Only use standalone-toolchain for reduce size
|
# Only use standalone-toolchain for reduce size
|
||||||
FROM ubuntu:24.04
|
FROM ubuntu:xenial
|
||||||
LABEL org.opencontainers.image.authors="Tatsuhiro Tsujikawa"
|
MAINTAINER Tatsuhiro Tsujikawa
|
||||||
|
ENV ANDROID_HOME /root
|
||||||
|
ENV TOOLCHAIN $ANDROID_HOME/toolchain
|
||||||
|
ENV PATH $TOOLCHAIN/bin:$PATH
|
||||||
|
|
||||||
ARG NDK_VERSION=r27c
|
ENV NDK_VERSION r14b
|
||||||
ARG NDK=/root/android-ndk-$NDK_VERSION
|
|
||||||
ARG TOOLCHAIN=$NDK/toolchains/llvm/prebuilt/linux-x86_64
|
|
||||||
ARG TARGET=aarch64-linux-android
|
|
||||||
ARG API=33
|
|
||||||
ARG AR=$TOOLCHAIN/bin/llvm-ar
|
|
||||||
ARG CC=$TOOLCHAIN/bin/$TARGET$API-clang
|
|
||||||
ARG CXX=$TOOLCHAIN/bin/$TARGET$API-clang++
|
|
||||||
ARG LD=$TOOLCHAIN/bin/ld
|
|
||||||
ARG RANDLIB=$TOOLCHAIN/bin/llvm-ranlib
|
|
||||||
ARG STRIP=$TOOLCHAIN/bin/llvm-strip
|
|
||||||
ARG PREFIX=/root/usr/local
|
|
||||||
|
|
||||||
WORKDIR /root
|
WORKDIR /root
|
||||||
RUN apt-get update && \
|
RUN apt-get update && \
|
||||||
apt-get install -y unzip make binutils autoconf \
|
apt-get install -y unzip make binutils autoconf \
|
||||||
automake autotools-dev libtool pkg-config git \
|
automake autotools-dev libtool pkg-config git \
|
||||||
curl dpkg-dev libxml2-dev genisoimage libc6-i386 \
|
curl dpkg-dev libxml2-dev genisoimage libc6-i386 \
|
||||||
lib32stdc++6 && \
|
lib32stdc++6 python&& \
|
||||||
rm -rf /var/cache/apt/*
|
rm -rf /var/cache/apk/*
|
||||||
|
|
||||||
# Download NDK
|
# Install toolchain
|
||||||
RUN curl -L -O https://dl.google.com/android/repository/android-ndk-$NDK_VERSION-linux.zip && \
|
RUN curl -L -O https://dl.google.com/android/repository/android-ndk-$NDK_VERSION-linux-x86_64.zip && \
|
||||||
unzip -q android-ndk-$NDK_VERSION-linux.zip && \
|
unzip -q android-ndk-$NDK_VERSION-linux-x86_64.zip && \
|
||||||
rm android-ndk-$NDK_VERSION-linux.zip
|
rm android-ndk-$NDK_VERSION-linux-x86_64.zip && \
|
||||||
|
mkdir -p $ANDROID_HOME/toolchain && \
|
||||||
|
$ANDROID_HOME/android-ndk-$NDK_VERSION/build/tools/make-standalone-toolchain.sh \
|
||||||
|
--install-dir=$ANDROID_HOME/toolchain \
|
||||||
|
--toolchain=arm-linux-androideabi-4.9 \
|
||||||
|
--force && \
|
||||||
|
rm -r android-ndk-$NDK_VERSION
|
||||||
|
|
||||||
|
ENV PREFIX /root/usr/local
|
||||||
|
|
||||||
# Setup version of libraries
|
# Setup version of libraries
|
||||||
ARG OPENSSL_VERSION=1.1.1w
|
ENV OPENSSL_VERSION 1.0.2d
|
||||||
ARG LIBEV_VERSION=4.33
|
ENV SPDYLAY_VERSION v1.4.0
|
||||||
ARG ZLIB_VERSION=1.3.1
|
ENV LIBEV_VERSION 4.19
|
||||||
ARG CARES_VERSION=1.18.1
|
ENV ZLIB_VERSION 1.2.8
|
||||||
ARG NGHTTP2_VERSION=master
|
ENV CARES_VERSION 1.13.0
|
||||||
|
ENV NGHTTP2_VERSION v1.24.0
|
||||||
|
|
||||||
|
WORKDIR /root/build
|
||||||
|
RUN git clone https://github.com/tatsuhiro-t/spdylay -b $SPDYLAY_VERSION --depth 1
|
||||||
|
WORKDIR /root/build/spdylay
|
||||||
|
RUN autoreconf -i && \
|
||||||
|
./configure \
|
||||||
|
--disable-shared \
|
||||||
|
--host=arm-linux-androideabi \
|
||||||
|
--build=`dpkg-architecture -qDEB_BUILD_GNU_TYPE` \
|
||||||
|
--prefix=$PREFIX \
|
||||||
|
--without-libxml2 \
|
||||||
|
--disable-src \
|
||||||
|
--disable-examples \
|
||||||
|
CPPFLAGS="-I$PREFIX/include" \
|
||||||
|
PKG_CONFIG_LIBDIR="$PREFIX/lib/pkgconfig" \
|
||||||
|
LDFLAGS="-L$PREFIX/lib" && \
|
||||||
|
make install
|
||||||
|
|
||||||
WORKDIR /root/build
|
WORKDIR /root/build
|
||||||
RUN curl -L -O https://www.openssl.org/source/openssl-$OPENSSL_VERSION.tar.gz && \
|
RUN curl -L -O https://www.openssl.org/source/openssl-$OPENSSL_VERSION.tar.gz && \
|
||||||
@@ -54,19 +72,20 @@ RUN curl -L -O https://www.openssl.org/source/openssl-$OPENSSL_VERSION.tar.gz &&
|
|||||||
rm openssl-$OPENSSL_VERSION.tar.gz
|
rm openssl-$OPENSSL_VERSION.tar.gz
|
||||||
|
|
||||||
WORKDIR /root/build/openssl-$OPENSSL_VERSION
|
WORKDIR /root/build/openssl-$OPENSSL_VERSION
|
||||||
RUN export ANDROID_NDK_HOME=$NDK PATH=$TOOLCHAIN/bin:$PATH && \
|
RUN export CROSS_COMPILE=$TOOLCHAIN/bin/arm-linux-androideabi- && \
|
||||||
./Configure no-shared --prefix=$PREFIX android-arm64 && \
|
./Configure --prefix=$PREFIX android && \
|
||||||
make && make install_sw
|
make && make install_sw
|
||||||
|
|
||||||
WORKDIR /root/build
|
WORKDIR /root/build
|
||||||
RUN curl -L -O http://dist.schmorp.de/libev/Attic/libev-$LIBEV_VERSION.tar.gz && \
|
RUN curl -L -O http://dist.schmorp.de/libev/Attic/libev-$LIBEV_VERSION.tar.gz && \
|
||||||
|
curl -L -O https://gist.github.com/tatsuhiro-t/48c45f08950f587180ed/raw/80a8f003b5d1091eae497c5995bbaa68096e739b/libev-4.19-android.patch && \
|
||||||
tar xf libev-$LIBEV_VERSION.tar.gz && \
|
tar xf libev-$LIBEV_VERSION.tar.gz && \
|
||||||
rm libev-$LIBEV_VERSION.tar.gz
|
rm libev-$LIBEV_VERSION.tar.gz
|
||||||
|
|
||||||
WORKDIR /root/build/libev-$LIBEV_VERSION
|
WORKDIR /root/build/libev-$LIBEV_VERSION
|
||||||
RUN ./configure \
|
RUN patch -p1 < ../libev-4.19-android.patch && \
|
||||||
--disable-dependency-tracking \
|
./configure \
|
||||||
--host=$TARGET \
|
--host=arm-linux-androideabi \
|
||||||
--build=`dpkg-architecture -qDEB_BUILD_GNU_TYPE` \
|
--build=`dpkg-architecture -qDEB_BUILD_GNU_TYPE` \
|
||||||
--prefix=$PREFIX \
|
--prefix=$PREFIX \
|
||||||
--disable-shared \
|
--disable-shared \
|
||||||
@@ -76,12 +95,17 @@ RUN ./configure \
|
|||||||
make install
|
make install
|
||||||
|
|
||||||
WORKDIR /root/build
|
WORKDIR /root/build
|
||||||
RUN curl -L -O https://github.com/madler/zlib/releases/download/v$ZLIB_VERSION/zlib-$ZLIB_VERSION.tar.gz && \
|
RUN curl -L -O https://downloads.sourceforge.net/project/libpng/zlib/$ZLIB_VERSION/zlib-$ZLIB_VERSION.tar.gz && \
|
||||||
tar xf zlib-$ZLIB_VERSION.tar.gz && \
|
tar xf zlib-$ZLIB_VERSION.tar.gz && \
|
||||||
rm zlib-$ZLIB_VERSION.tar.gz
|
rm zlib-$ZLIB_VERSION.tar.gz
|
||||||
|
|
||||||
WORKDIR /root/build/zlib-$ZLIB_VERSION
|
WORKDIR /root/build/zlib-$ZLIB_VERSION
|
||||||
RUN HOST=$TARGET \
|
RUN HOST=arm-linux-androideabi \
|
||||||
|
CC=$HOST-gcc \
|
||||||
|
AR=$HOST-ar \
|
||||||
|
LD=$HOST-ld \
|
||||||
|
RANLIB=$HOST-ranlib \
|
||||||
|
STRIP=$HOST-strip \
|
||||||
./configure \
|
./configure \
|
||||||
--prefix=$PREFIX \
|
--prefix=$PREFIX \
|
||||||
--libdir=$PREFIX/lib \
|
--libdir=$PREFIX/lib \
|
||||||
@@ -91,34 +115,36 @@ RUN HOST=$TARGET \
|
|||||||
|
|
||||||
|
|
||||||
WORKDIR /root/build
|
WORKDIR /root/build
|
||||||
RUN curl -L -O https://github.com/c-ares/c-ares/releases/download/cares-1_18_1/c-ares-$CARES_VERSION.tar.gz && \
|
RUN curl -L -O https://c-ares.haxx.se/download/c-ares-$CARES_VERSION.tar.gz && \
|
||||||
tar xf c-ares-$CARES_VERSION.tar.gz && \
|
tar xf c-ares-$CARES_VERSION.tar.gz && \
|
||||||
rm c-ares-$CARES_VERSION.tar.gz
|
rm c-ares-$CARES_VERSION.tar.gz
|
||||||
|
|
||||||
WORKDIR /root/build/c-ares-$CARES_VERSION
|
WORKDIR /root/build/c-ares-$CARES_VERSION
|
||||||
RUN ./configure \
|
RUN ./configure \
|
||||||
--disable-dependency-tracking \
|
--host=arm-linux-androideabi \
|
||||||
--host=$TARGET \
|
|
||||||
--build=`dpkg-architecture -qDEB_BUILD_GNU_TYPE` \
|
--build=`dpkg-architecture -qDEB_BUILD_GNU_TYPE` \
|
||||||
--prefix=$PREFIX \
|
--prefix=$PREFIX \
|
||||||
--disable-shared && \
|
--disable-shared && \
|
||||||
make install
|
make install
|
||||||
|
|
||||||
WORKDIR /root/build
|
WORKDIR /root/build
|
||||||
RUN git clone --recursive --shallow-submodules https://github.com/nghttp2/nghttp2 -b $NGHTTP2_VERSION --depth 1
|
RUN git clone https://github.com/nghttp2/nghttp2 -b $NGHTTP2_VERSION --depth 1
|
||||||
WORKDIR /root/build/nghttp2
|
WORKDIR /root/build/nghttp2
|
||||||
RUN autoreconf -i && \
|
RUN autoreconf -i && \
|
||||||
./configure \
|
./configure \
|
||||||
--disable-dependency-tracking \
|
|
||||||
--enable-app \
|
--enable-app \
|
||||||
--disable-shared \
|
--disable-shared \
|
||||||
--host=$TARGET \
|
--host=arm-linux-androideabi \
|
||||||
--build=`dpkg-architecture -qDEB_BUILD_GNU_TYPE` \
|
--build=`dpkg-architecture -qDEB_BUILD_GNU_TYPE` \
|
||||||
|
--with-xml-prefix="$PREFIX" \
|
||||||
--without-libxml2 \
|
--without-libxml2 \
|
||||||
|
--disable-python-bindings \
|
||||||
--disable-examples \
|
--disable-examples \
|
||||||
--disable-threads \
|
--disable-threads \
|
||||||
|
CC="$TOOLCHAIN"/bin/arm-linux-androideabi-clang \
|
||||||
|
CXX="$TOOLCHAIN"/bin/arm-linux-androideabi-clang++ \
|
||||||
CPPFLAGS="-fPIE -I$PREFIX/include" \
|
CPPFLAGS="-fPIE -I$PREFIX/include" \
|
||||||
PKG_CONFIG_LIBDIR="$PREFIX/lib/pkgconfig" \
|
PKG_CONFIG_LIBDIR="$PREFIX/lib/pkgconfig" \
|
||||||
LDFLAGS="-static-libstdc++ -static-libgcc -fPIE -pie -L$PREFIX/lib" && \
|
LDFLAGS="-fPIE -pie -L$PREFIX/lib" && \
|
||||||
make && \
|
make && \
|
||||||
$STRIP src/nghttpx src/nghttpd src/nghttp
|
arm-linux-androideabi-strip src/nghttpx src/nghttpd src/nghttp
|
||||||
|
|||||||
28
Makefile.am
28
Makefile.am
@@ -20,14 +20,19 @@
|
|||||||
# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
||||||
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||||
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
SUBDIRS = lib tests third-party src bpf examples integration-tests \
|
SUBDIRS = lib third-party src bpf examples python tests integration-tests \
|
||||||
doc contrib
|
doc contrib script
|
||||||
|
|
||||||
|
# Now with python setuptools, make uninstall will leave many files we
|
||||||
|
# cannot easily remove (e.g., easy-install.pth). Disable it for
|
||||||
|
# distcheck rule.
|
||||||
|
AM_DISTCHECK_CONFIGURE_FLAGS = --disable-python-bindings
|
||||||
|
|
||||||
ACLOCAL_AMFLAGS = -I m4
|
ACLOCAL_AMFLAGS = -I m4
|
||||||
|
|
||||||
dist_doc_DATA = README.rst
|
dist_doc_DATA = README.rst
|
||||||
|
|
||||||
EXTRA_DIST = nghttpx.conf.sample proxy.pac.sample android-config android-env \
|
EXTRA_DIST = nghttpx.conf.sample proxy.pac.sample android-config android-make \
|
||||||
Dockerfile.android \
|
Dockerfile.android \
|
||||||
cmakeconfig.h.in \
|
cmakeconfig.h.in \
|
||||||
CMakeLists.txt \
|
CMakeLists.txt \
|
||||||
@@ -35,7 +40,9 @@ EXTRA_DIST = nghttpx.conf.sample proxy.pac.sample android-config android-env \
|
|||||||
cmake/ExtractValidFlags.cmake \
|
cmake/ExtractValidFlags.cmake \
|
||||||
cmake/FindJemalloc.cmake \
|
cmake/FindJemalloc.cmake \
|
||||||
cmake/FindLibev.cmake \
|
cmake/FindLibev.cmake \
|
||||||
|
cmake/FindCUnit.cmake \
|
||||||
cmake/Version.cmake \
|
cmake/Version.cmake \
|
||||||
|
cmake/FindCython.cmake \
|
||||||
cmake/FindLibevent.cmake \
|
cmake/FindLibevent.cmake \
|
||||||
cmake/FindJansson.cmake \
|
cmake/FindJansson.cmake \
|
||||||
cmake/FindLibcares.cmake \
|
cmake/FindLibcares.cmake \
|
||||||
@@ -43,23 +50,16 @@ EXTRA_DIST = nghttpx.conf.sample proxy.pac.sample android-config android-env \
|
|||||||
cmake/FindLibbpf.cmake \
|
cmake/FindLibbpf.cmake \
|
||||||
cmake/FindLibnghttp3.cmake \
|
cmake/FindLibnghttp3.cmake \
|
||||||
cmake/FindLibngtcp2.cmake \
|
cmake/FindLibngtcp2.cmake \
|
||||||
cmake/FindLibngtcp2_crypto_quictls.cmake \
|
cmake/FindLibngtcp2_crypto_openssl.cmake
|
||||||
cmake/FindLibbrotlienc.cmake \
|
|
||||||
cmake/FindLibbrotlidec.cmake \
|
|
||||||
cmake/FindLibngtcp2_crypto_wolfssl.cmake \
|
|
||||||
cmake/FindLibngtcp2_crypto_ossl.cmake \
|
|
||||||
cmake/FindWolfSSL.cmake \
|
|
||||||
cmake/PickyWarningsC.cmake \
|
|
||||||
cmake/PickyWarningsCXX.cmake
|
|
||||||
|
|
||||||
.PHONY: clang-format
|
.PHONY: clang-format
|
||||||
|
|
||||||
# Format source files using clang-format. Don't format source files
|
# Format source files using clang-format. Don't format source files
|
||||||
# under third-party directory since we are not responsible for their
|
# under third-party directory since we are not responsible for thier
|
||||||
# coding style.
|
# coding style.
|
||||||
clang-format:
|
clang-format:
|
||||||
CLANGFORMAT=`git config --get clangformat.binary`; \
|
CLANGFORMAT=`git config --get clangformat.binary`; \
|
||||||
test -z $${CLANGFORMAT} && CLANGFORMAT="clang-format"; \
|
test -z $${CLANGFORMAT} && CLANGFORMAT="clang-format"; \
|
||||||
$${CLANGFORMAT} -i lib/*.{c,h} lib/includes/nghttp2/*.h \
|
$${CLANGFORMAT} -i lib/*.{c,h} lib/includes/nghttp2/*.h \
|
||||||
src/*.{c,cc,h} examples/*.c \
|
src/*.{c,cc,h} src/includes/nghttp2/*.h examples/*.{c,cc} \
|
||||||
tests/*.{c,h} bpf/*.c fuzz/*.cc
|
tests/*.{c,h}
|
||||||
|
|||||||
400
README.rst
400
README.rst
@@ -11,14 +11,17 @@ HTTP/2.
|
|||||||
|
|
||||||
An HPACK encoder and decoder are available as a public API.
|
An HPACK encoder and decoder are available as a public API.
|
||||||
|
|
||||||
|
An experimental high level C++ library is also available.
|
||||||
|
|
||||||
|
We have Python bindings of this library, but we do not have full
|
||||||
|
code coverage yet.
|
||||||
|
|
||||||
Development Status
|
Development Status
|
||||||
------------------
|
------------------
|
||||||
|
|
||||||
nghttp2 was originally developed based on `RFC 7540
|
We have implemented `RFC 7540 <https://tools.ietf.org/html/rfc7540>`_
|
||||||
<https://tools.ietf.org/html/rfc7540>`_ HTTP/2 and `RFC 7541
|
HTTP/2 and `RFC 7541 <https://tools.ietf.org/html/rfc7541>`_ HPACK -
|
||||||
<https://tools.ietf.org/html/rfc7541>`_ HPACK - Header Compression for
|
Header Compression for HTTP/2
|
||||||
HTTP/2. Now we are updating our code to implement `RFC 9113
|
|
||||||
<https://datatracker.ietf.org/doc/html/rfc9113>`_.
|
|
||||||
|
|
||||||
The nghttp2 code base was forked from the spdylay
|
The nghttp2 code base was forked from the spdylay
|
||||||
(https://github.com/tatsuhiro-t/spdylay) project.
|
(https://github.com/tatsuhiro-t/spdylay) project.
|
||||||
@@ -29,12 +32,11 @@ Public Test Server
|
|||||||
The following endpoints are available to try out our nghttp2
|
The following endpoints are available to try out our nghttp2
|
||||||
implementation.
|
implementation.
|
||||||
|
|
||||||
* https://nghttp2.org/ (TLS + ALPN and HTTP/3)
|
* https://nghttp2.org/ (TLS + ALPN/NPN)
|
||||||
|
|
||||||
This endpoint supports ``h2`` and ``http/1.1`` via ALPN and requires
|
This endpoint supports ``h2``, ``h2-16``, ``h2-14``, and
|
||||||
TLSv1.2 for HTTP/2 connection.
|
``http/1.1`` via ALPN/NPN and requires TLSv1.2 for HTTP/2
|
||||||
|
connection.
|
||||||
It also supports HTTP/3.
|
|
||||||
|
|
||||||
* http://nghttp2.org/ (HTTP Upgrade and HTTP/2 Direct)
|
* http://nghttp2.org/ (HTTP Upgrade and HTTP/2 Direct)
|
||||||
|
|
||||||
@@ -47,6 +49,11 @@ The following package is required to build the libnghttp2 library:
|
|||||||
|
|
||||||
* pkg-config >= 0.20
|
* pkg-config >= 0.20
|
||||||
|
|
||||||
|
To build and run the unit test programs, the following package is
|
||||||
|
required:
|
||||||
|
|
||||||
|
* cunit >= 2.1
|
||||||
|
|
||||||
To build the documentation, you need to install:
|
To build the documentation, you need to install:
|
||||||
|
|
||||||
* sphinx (http://sphinx-doc.org/)
|
* sphinx (http://sphinx-doc.org/)
|
||||||
@@ -60,12 +67,15 @@ To build and run the application programs (``nghttp``, ``nghttpd``,
|
|||||||
``nghttpx`` and ``h2load``) in the ``src`` directory, the following packages
|
``nghttpx`` and ``h2load``) in the ``src`` directory, the following packages
|
||||||
are required:
|
are required:
|
||||||
|
|
||||||
* OpenSSL >= 1.1.1; or wolfSSL >= 5.7.0; or LibreSSL >= 3.8.1; or
|
* OpenSSL >= 1.0.1
|
||||||
aws-lc >= 1.19.0; or BoringSSL
|
|
||||||
* libev >= 4.11
|
* libev >= 4.11
|
||||||
* zlib >= 1.2.3
|
* zlib >= 1.2.3
|
||||||
* libc-ares >= 1.7.5
|
* libc-ares >= 1.7.5
|
||||||
|
|
||||||
|
ALPN support requires OpenSSL >= 1.0.2 (released 22 January 2015).
|
||||||
|
LibreSSL >= 2.2.0 can be used instead of OpenSSL, but OpenSSL has more
|
||||||
|
features than LibreSSL at the time of this writing.
|
||||||
|
|
||||||
To enable ``-a`` option (getting linked assets from the downloaded
|
To enable ``-a`` option (getting linked assets from the downloaded
|
||||||
resource) in ``nghttp``, the following package is required:
|
resource) in ``nghttp``, the following package is required:
|
||||||
|
|
||||||
@@ -94,15 +104,31 @@ To mitigate heap fragmentation in long running server programs
|
|||||||
Alpine Linux currently does not support malloc replacement
|
Alpine Linux currently does not support malloc replacement
|
||||||
due to musl limitations. See details in issue `#762 <https://github.com/nghttp2/nghttp2/issues/762>`_.
|
due to musl limitations. See details in issue `#762 <https://github.com/nghttp2/nghttp2/issues/762>`_.
|
||||||
|
|
||||||
For BoringSSL or aws-lc build, to enable :rfc:`8879` TLS Certificate
|
libnghttp2_asio C++ library requires the following packages:
|
||||||
Compression in applications, the following library is required:
|
|
||||||
|
|
||||||
* libbrotli-dev >= 1.0.9
|
* libboost-dev >= 1.54.0
|
||||||
|
* libboost-thread-dev >= 1.54.0
|
||||||
|
|
||||||
|
The Python bindings require the following packages:
|
||||||
|
|
||||||
|
* cython >= 0.19
|
||||||
|
* python >= 3.8
|
||||||
|
* python-setuptools
|
||||||
|
|
||||||
|
If you are using Ubuntu 16.04 LTS (Xenial Xerus) or Debian 8 (jessie)
|
||||||
|
and above, run the following to install the required packages:
|
||||||
|
|
||||||
|
.. code-block:: text
|
||||||
|
|
||||||
|
sudo apt-get install g++ make binutils autoconf automake autotools-dev libtool pkg-config \
|
||||||
|
zlib1g-dev libcunit1-dev libssl-dev libxml2-dev libev-dev libevent-dev libjansson-dev \
|
||||||
|
libc-ares-dev libjemalloc-dev libsystemd-dev \
|
||||||
|
cython python3-dev python-setuptools
|
||||||
|
|
||||||
To enable mruby support for nghttpx, `mruby
|
To enable mruby support for nghttpx, `mruby
|
||||||
<https://github.com/mruby/mruby>`_ is required. We need to build
|
<https://github.com/mruby/mruby>`_ is required. We need to build
|
||||||
mruby with C++ ABI explicitly turned on, and probably need other
|
mruby with C++ ABI explicitly turned on, and probably need other
|
||||||
mrgems, mruby is managed by git submodule under third-party/mruby
|
mrgems, mruby is manged by git submodule under third-party/mruby
|
||||||
directory. Currently, mruby support for nghttpx is disabled by
|
directory. Currently, mruby support for nghttpx is disabled by
|
||||||
default. To enable mruby support, use ``--with-mruby`` configure
|
default. To enable mruby support, use ``--with-mruby`` configure
|
||||||
option. Note that at the time of this writing, libmruby-dev and mruby
|
option. Note that at the time of this writing, libmruby-dev and mruby
|
||||||
@@ -114,21 +140,18 @@ required:
|
|||||||
* bison
|
* bison
|
||||||
|
|
||||||
nghttpx supports `neverbleed <https://github.com/h2o/neverbleed>`_,
|
nghttpx supports `neverbleed <https://github.com/h2o/neverbleed>`_,
|
||||||
privilege separation engine for OpenSSL. In short, it minimizes the
|
privilege separation engine for OpenSSL / LibreSSL. In short, it
|
||||||
risk of private key leakage when serious bug like Heartbleed is
|
minimizes the risk of private key leakage when serious bug like
|
||||||
exploited. The neverbleed is disabled by default. To enable it, use
|
Heartbleed is exploited. The neverbleed is disabled by default. To
|
||||||
``--with-neverbleed`` configure option.
|
enable it, use ``--with-neverbleed`` configure option.
|
||||||
|
|
||||||
To enable the experimental HTTP/3 support for h2load and nghttpx, the
|
To enable the experimental HTTP/3 support for h2load and nghttpx, the
|
||||||
following libraries are required:
|
following libraries are required:
|
||||||
|
|
||||||
* `quictls
|
* `OpenSSL with QUIC support
|
||||||
<https://github.com/quictls/openssl/tree/OpenSSL_1_1_1w+quic>`_; or
|
<https://github.com/quictls/openssl/tree/OpenSSL_1_1_1k+quic>`_
|
||||||
wolfSSL; or LibreSSL (does not support 0RTT); or aws-lc; or
|
* `ngtcp2 <https://github.com/ngtcp2/ngtcp2>`_
|
||||||
`BoringSSL <https://boringssl.googlesource.com/boringssl/>`_ (commit
|
* `nghttp3 <https://github.com/ngtcp2/nghttp3>`_
|
||||||
db1a8456167249f95b854a1cd24c6b553d0f1567); or OpenSSL >= 3.5.0
|
|
||||||
* `ngtcp2 <https://github.com/ngtcp2/ngtcp2>`_ >= 1.16.0
|
|
||||||
* `nghttp3 <https://github.com/ngtcp2/nghttp3>`_ >= 1.12.0
|
|
||||||
|
|
||||||
Use ``--enable-http3`` configure option to enable HTTP/3 feature for
|
Use ``--enable-http3`` configure option to enable HTTP/3 feature for
|
||||||
h2load and nghttpx.
|
h2load and nghttpx.
|
||||||
@@ -137,20 +160,20 @@ In order to build optional eBPF program to direct an incoming QUIC UDP
|
|||||||
datagram to a correct socket for nghttpx, the following libraries are
|
datagram to a correct socket for nghttpx, the following libraries are
|
||||||
required:
|
required:
|
||||||
|
|
||||||
* libbpf-dev >= 0.7.0
|
* libbpf-dev >= 0.4.0
|
||||||
|
|
||||||
Use ``--with-libbpf`` configure option to build eBPF program.
|
Use ``--with-libbpf`` configure option to build eBPF program.
|
||||||
libelf-dev is needed to build libbpf.
|
libelf-dev is needed to build libbpf.
|
||||||
|
|
||||||
For Ubuntu 20.04, you can build libbpf from `the source code
|
For Ubuntu 20.04, you can build libbpf from `the source code
|
||||||
<https://github.com/libbpf/libbpf/releases>`_. nghttpx requires eBPF
|
<https://github.com/libbpf/libbpf/releases/tag/v0.4.0>`_. nghttpx
|
||||||
program for reloading its configuration and hot swapping its
|
requires eBPF program for reloading its configuration and hot swapping
|
||||||
executable.
|
its executable.
|
||||||
|
|
||||||
Compiling libnghttp2 C source code requires a C99 compiler. gcc 4.8
|
Compiling libnghttp2 C source code requires a C99 compiler. gcc 4.8
|
||||||
is known to be adequate. In order to compile the C++ source code,
|
is known to be adequate. In order to compile the C++ source code, gcc
|
||||||
C++20 compliant compiler is required. At least g++ >= 12 and
|
>= 6.0 or clang >= 6.0 is required. C++ source code requires C++14
|
||||||
clang++ >= 18 are known to work.
|
language features.
|
||||||
|
|
||||||
.. note::
|
.. note::
|
||||||
|
|
||||||
@@ -197,18 +220,6 @@ clang++ >= 18 are known to work.
|
|||||||
responsible to specify the correct values to these variables. For
|
responsible to specify the correct values to these variables. For
|
||||||
complete list of these variables, run ``./configure -h``.
|
complete list of these variables, run ``./configure -h``.
|
||||||
|
|
||||||
If you are using Ubuntu 22.04 LTS, run the following to install the
|
|
||||||
required packages:
|
|
||||||
|
|
||||||
.. code-block:: text
|
|
||||||
|
|
||||||
sudo apt-get install g++ clang make binutils autoconf automake \
|
|
||||||
autotools-dev libtool pkg-config \
|
|
||||||
zlib1g-dev libssl-dev libxml2-dev libev-dev \
|
|
||||||
libevent-dev libjansson-dev \
|
|
||||||
libc-ares-dev libjemalloc-dev libsystemd-dev \
|
|
||||||
ruby-dev bison libelf-dev
|
|
||||||
|
|
||||||
Building nghttp2 from release tar archive
|
Building nghttp2 from release tar archive
|
||||||
-----------------------------------------
|
-----------------------------------------
|
||||||
|
|
||||||
@@ -330,30 +341,29 @@ configure script with ``--enable-http3``.
|
|||||||
For nghttpx to reload configurations and swapping its executable while
|
For nghttpx to reload configurations and swapping its executable while
|
||||||
gracefully terminating old worker processes, eBPF is required. Run
|
gracefully terminating old worker processes, eBPF is required. Run
|
||||||
the configure script with ``--enable-http3 --with-libbpf`` to build
|
the configure script with ``--enable-http3 --with-libbpf`` to build
|
||||||
eBPF program. The QUIC keying material must be set with
|
eBPF program. The Connection ID encryption key must be set with
|
||||||
``--frontend-quic-secret-file`` in order to keep the existing
|
``--frontend-quic-connection-id-encryption-key`` and must not change
|
||||||
connections alive during reload.
|
in order to keep the existing connections alive during reload.
|
||||||
|
|
||||||
The detailed steps to build HTTP/3 enabled h2load and nghttpx follow.
|
The detailed steps to build HTTP/3 enabled h2load and nghttpx follow.
|
||||||
|
|
||||||
Build aws-lc:
|
Build custom OpenSSL:
|
||||||
|
|
||||||
.. code-block:: text
|
.. code-block:: text
|
||||||
|
|
||||||
$ git clone --depth 1 -b v1.62.0 https://github.com/aws/aws-lc
|
$ git clone --depth 1 -b OpenSSL_1_1_1l+quic https://github.com/quictls/openssl
|
||||||
$ cd aws-lc
|
$ cd openssl
|
||||||
$ cmake -B build -DDISABLE_GO=ON --install-prefix=$PWD/opt
|
$ ./config --prefix=$PWD/build --openssldir=/etc/ssl
|
||||||
$ make -j$(nproc) -C build
|
$ make -j$(nproc)
|
||||||
$ cmake --install build
|
$ make install_sw
|
||||||
$ cd ..
|
$ cd ..
|
||||||
|
|
||||||
Build nghttp3:
|
Build nghttp3:
|
||||||
|
|
||||||
.. code-block:: text
|
.. code-block:: text
|
||||||
|
|
||||||
$ git clone --depth 1 -b v1.12.0 https://github.com/ngtcp2/nghttp3
|
$ git clone --depth 1 https://github.com/ngtcp2/nghttp3
|
||||||
$ cd nghttp3
|
$ cd nghttp3
|
||||||
$ git submodule update --init --depth 1
|
|
||||||
$ autoreconf -i
|
$ autoreconf -i
|
||||||
$ ./configure --prefix=$PWD/build --enable-lib-only
|
$ ./configure --prefix=$PWD/build --enable-lib-only
|
||||||
$ make -j$(nproc)
|
$ make -j$(nproc)
|
||||||
@@ -364,23 +374,21 @@ Build ngtcp2:
|
|||||||
|
|
||||||
.. code-block:: text
|
.. code-block:: text
|
||||||
|
|
||||||
$ git clone --depth 1 -b v1.17.0 https://github.com/ngtcp2/ngtcp2
|
$ git clone --depth 1 https://github.com/ngtcp2/ngtcp2
|
||||||
$ cd ngtcp2
|
$ cd ngtcp2
|
||||||
$ git submodule update --init --depth 1
|
|
||||||
$ autoreconf -i
|
$ autoreconf -i
|
||||||
$ ./configure --prefix=$PWD/build --enable-lib-only --with-boringssl \
|
$ ./configure --prefix=$PWD/build --enable-lib-only \
|
||||||
BORINGSSL_CFLAGS="-I$PWD/../aws-lc/opt/include" \
|
PKG_CONFIG_PATH="$PWD/../openssl/build/lib/pkgconfig"
|
||||||
BORINGSSL_LIBS="-L$PWD/../aws-lc/opt/lib -lssl -lcrypto"
|
|
||||||
$ make -j$(nproc)
|
$ make -j$(nproc)
|
||||||
$ make install
|
$ make install
|
||||||
$ cd ..
|
$ cd ..
|
||||||
|
|
||||||
If your Linux distribution does not have libbpf-dev >= 0.7.0, build
|
If your Linux distribution does not have libbpf-dev >= 0.4.0, build
|
||||||
from source:
|
from source:
|
||||||
|
|
||||||
.. code-block:: text
|
.. code-block:: text
|
||||||
|
|
||||||
$ git clone --depth 1 -b v1.6.2 https://github.com/libbpf/libbpf
|
$ git clone --depth 1 -b v0.4.0 https://github.com/libbpf/libbpf
|
||||||
$ cd libbpf
|
$ cd libbpf
|
||||||
$ PREFIX=$PWD/build make -C src install
|
$ PREFIX=$PWD/build make -C src install
|
||||||
$ cd ..
|
$ cd ..
|
||||||
@@ -393,10 +401,11 @@ Build nghttp2:
|
|||||||
$ cd nghttp2
|
$ cd nghttp2
|
||||||
$ git submodule update --init
|
$ git submodule update --init
|
||||||
$ autoreconf -i
|
$ autoreconf -i
|
||||||
$ ./configure --with-mruby --enable-http3 --with-libbpf \
|
$ ./configure --with-mruby --with-neverbleed --enable-http3 --with-libbpf \
|
||||||
CC=clang-19 CXX=clang++-19 \
|
--disable-python-bindings \
|
||||||
PKG_CONFIG_PATH="$PWD/../aws-lc/opt/lib/pkgconfig:$PWD/../nghttp3/build/lib/pkgconfig:$PWD/../ngtcp2/build/lib/pkgconfig:$PWD/../libbpf/build/lib64/pkgconfig" \
|
CC=clang-12 CXX=clang++-12 \
|
||||||
LDFLAGS="$LDFLAGS -Wl,-rpath,$PWD/../aws-lc/opt/lib -Wl,-rpath,$PWD/../libbpf/build/lib64"
|
PKG_CONFIG_PATH="$PWD/../openssl/build/lib/pkgconfig:$PWD/../nghttp3/build/lib/pkgconfig:$PWD/../ngtcp2/build/lib/pkgconfig:$PWD/../libbpf/build/lib64/pkgconfig" \
|
||||||
|
LDFLAGS="$LDFLAGS -Wl,-rpath,$PWD/../openssl/build/lib -Wl,-rpath,$PWD/../libbpf/build/lib64"
|
||||||
$ make -j$(nproc)
|
$ make -j$(nproc)
|
||||||
|
|
||||||
The eBPF program ``reuseport_kern.o`` should be found under bpf
|
The eBPF program ``reuseport_kern.o`` should be found under bpf
|
||||||
@@ -481,7 +490,7 @@ Previously nghttp2 library did not send client magic, which is first
|
|||||||
24 bytes byte string of client connection preface, and client
|
24 bytes byte string of client connection preface, and client
|
||||||
applications have to send it by themselves. Since v1.0.0, client
|
applications have to send it by themselves. Since v1.0.0, client
|
||||||
magic is sent by library via first call of ``nghttp2_session_send()``
|
magic is sent by library via first call of ``nghttp2_session_send()``
|
||||||
or ``nghttp2_session_mem_send2()``.
|
or ``nghttp2_session_mem_send()``.
|
||||||
|
|
||||||
The client applications which send client magic must remove the
|
The client applications which send client magic must remove the
|
||||||
relevant code.
|
relevant code.
|
||||||
@@ -539,7 +548,7 @@ nghttp - client
|
|||||||
+++++++++++++++
|
+++++++++++++++
|
||||||
|
|
||||||
``nghttp`` is a HTTP/2 client. It can connect to the HTTP/2 server
|
``nghttp`` is a HTTP/2 client. It can connect to the HTTP/2 server
|
||||||
with prior knowledge, HTTP Upgrade and ALPN TLS extension.
|
with prior knowledge, HTTP Upgrade and NPN/ALPN TLS extension.
|
||||||
|
|
||||||
It has verbose output mode for framing information. Here is sample
|
It has verbose output mode for framing information. Here is sample
|
||||||
output from ``nghttp`` client:
|
output from ``nghttp`` client:
|
||||||
@@ -765,8 +774,8 @@ nghttpd - server
|
|||||||
By default, it uses SSL/TLS connection. Use ``--no-tls`` option to
|
By default, it uses SSL/TLS connection. Use ``--no-tls`` option to
|
||||||
disable it.
|
disable it.
|
||||||
|
|
||||||
``nghttpd`` only accepts HTTP/2 connections via ALPN or direct HTTP/2
|
``nghttpd`` only accepts HTTP/2 connections via NPN/ALPN or direct
|
||||||
connections. No HTTP Upgrade is supported.
|
HTTP/2 connections. No HTTP Upgrade is supported.
|
||||||
|
|
||||||
The ``-p`` option allows users to configure server push.
|
The ``-p`` option allows users to configure server push.
|
||||||
|
|
||||||
@@ -846,10 +855,10 @@ to know how to migrate from earlier releases.
|
|||||||
|
|
||||||
``nghttpx`` implements `important performance-oriented features
|
``nghttpx`` implements `important performance-oriented features
|
||||||
<https://istlsfastyet.com/#server-performance>`_ in TLS, such as
|
<https://istlsfastyet.com/#server-performance>`_ in TLS, such as
|
||||||
session IDs, session tickets (with automatic key rotation), dynamic
|
session IDs, session tickets (with automatic key rotation), OCSP
|
||||||
record sizing, ALPN, forward secrecy and HTTP/2. ``nghttpx`` also
|
stapling, dynamic record sizing, ALPN/NPN, forward secrecy and HTTP/2.
|
||||||
offers the functionality to share ticket keys among multiple
|
``nghttpx`` also offers the functionality to share session cache and
|
||||||
``nghttpx`` instances via memcached.
|
ticket keys among multiple ``nghttpx`` instances via memcached.
|
||||||
|
|
||||||
``nghttpx`` has 2 operation modes:
|
``nghttpx`` has 2 operation modes:
|
||||||
|
|
||||||
@@ -974,15 +983,12 @@ threads to avoid saturating a single core on client side.
|
|||||||
servers.
|
servers.
|
||||||
|
|
||||||
If the experimental HTTP/3 is enabled, h2load can send requests to
|
If the experimental HTTP/3 is enabled, h2load can send requests to
|
||||||
HTTP/3 server. To do this, specify ``h3`` to ``--alpn-list`` option
|
HTTP/3 server. To do this, specify ``h3`` to ``--npn-list`` option
|
||||||
like so:
|
like so:
|
||||||
|
|
||||||
.. code-block:: text
|
.. code-block:: text
|
||||||
|
|
||||||
$ h2load --alpn-list h3 https://127.0.0.1:4433
|
$ h2load --npn-list h3 https://127.0.0.1:4433
|
||||||
|
|
||||||
For nghttp2 v1.58 or earlier, use ``--npn-list`` instead of
|
|
||||||
``--alpn-list``.
|
|
||||||
|
|
||||||
HPACK tools
|
HPACK tools
|
||||||
-----------
|
-----------
|
||||||
@@ -1421,6 +1427,219 @@ associated value includes the state of the dynamic header table after the
|
|||||||
corresponding header set was processed. The format is the same as
|
corresponding header set was processed. The format is the same as
|
||||||
``deflatehd``.
|
``deflatehd``.
|
||||||
|
|
||||||
|
libnghttp2_asio: High level HTTP/2 C++ library
|
||||||
|
----------------------------------------------
|
||||||
|
|
||||||
|
libnghttp2_asio is C++ library built on top of libnghttp2 and provides
|
||||||
|
high level abstraction API to build HTTP/2 applications. It depends
|
||||||
|
on the Boost::ASIO library and OpenSSL. Currently libnghttp2_asio
|
||||||
|
provides both client and server APIs.
|
||||||
|
|
||||||
|
libnghttp2_asio is not built by default. Use the ``--enable-asio-lib``
|
||||||
|
configure flag to build libnghttp2_asio. The required Boost libraries
|
||||||
|
are:
|
||||||
|
|
||||||
|
* Boost::Asio
|
||||||
|
* Boost::System
|
||||||
|
* Boost::Thread
|
||||||
|
|
||||||
|
The server API is designed to build an HTTP/2 server very easily to utilize
|
||||||
|
C++14 anonymous functions and closures. The bare minimum example of
|
||||||
|
an HTTP/2 server looks like this:
|
||||||
|
|
||||||
|
.. code-block:: cpp
|
||||||
|
|
||||||
|
#include <iostream>
|
||||||
|
|
||||||
|
#include <nghttp2/asio_http2_server.h>
|
||||||
|
|
||||||
|
using namespace nghttp2::asio_http2;
|
||||||
|
using namespace nghttp2::asio_http2::server;
|
||||||
|
|
||||||
|
int main(int argc, char *argv[]) {
|
||||||
|
boost::system::error_code ec;
|
||||||
|
http2 server;
|
||||||
|
|
||||||
|
server.handle("/", [](const request &req, const response &res) {
|
||||||
|
res.write_head(200);
|
||||||
|
res.end("hello, world\n");
|
||||||
|
});
|
||||||
|
|
||||||
|
if (server.listen_and_serve(ec, "localhost", "3000")) {
|
||||||
|
std::cerr << "error: " << ec.message() << std::endl;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Here is sample code to use the client API:
|
||||||
|
|
||||||
|
.. code-block:: cpp
|
||||||
|
|
||||||
|
#include <iostream>
|
||||||
|
|
||||||
|
#include <nghttp2/asio_http2_client.h>
|
||||||
|
|
||||||
|
using boost::asio::ip::tcp;
|
||||||
|
|
||||||
|
using namespace nghttp2::asio_http2;
|
||||||
|
using namespace nghttp2::asio_http2::client;
|
||||||
|
|
||||||
|
int main(int argc, char *argv[]) {
|
||||||
|
boost::system::error_code ec;
|
||||||
|
boost::asio::io_service io_service;
|
||||||
|
|
||||||
|
// connect to localhost:3000
|
||||||
|
session sess(io_service, "localhost", "3000");
|
||||||
|
|
||||||
|
sess.on_connect([&sess](tcp::resolver::iterator endpoint_it) {
|
||||||
|
boost::system::error_code ec;
|
||||||
|
|
||||||
|
auto req = sess.submit(ec, "GET", "http://localhost:3000/");
|
||||||
|
|
||||||
|
req->on_response([](const response &res) {
|
||||||
|
// print status code and response header fields.
|
||||||
|
std::cerr << "HTTP/2 " << res.status_code() << std::endl;
|
||||||
|
for (auto &kv : res.header()) {
|
||||||
|
std::cerr << kv.first << ": " << kv.second.value << "\n";
|
||||||
|
}
|
||||||
|
std::cerr << std::endl;
|
||||||
|
|
||||||
|
res.on_data([](const uint8_t *data, std::size_t len) {
|
||||||
|
std::cerr.write(reinterpret_cast<const char *>(data), len);
|
||||||
|
std::cerr << std::endl;
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
req->on_close([&sess](uint32_t error_code) {
|
||||||
|
// shutdown session after first request was done.
|
||||||
|
sess.shutdown();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
sess.on_error([](const boost::system::error_code &ec) {
|
||||||
|
std::cerr << "error: " << ec.message() << std::endl;
|
||||||
|
});
|
||||||
|
|
||||||
|
io_service.run();
|
||||||
|
}
|
||||||
|
|
||||||
|
For more details, see the documentation of libnghttp2_asio.
|
||||||
|
|
||||||
|
Python bindings
|
||||||
|
---------------
|
||||||
|
|
||||||
|
The ``python`` directory contains nghttp2 Python bindings. The
|
||||||
|
bindings currently provide HPACK compressor and decompressor classes
|
||||||
|
and an HTTP/2 server.
|
||||||
|
|
||||||
|
The extension module is called ``nghttp2``.
|
||||||
|
|
||||||
|
``make`` will build the bindings and target Python version is
|
||||||
|
determined by the ``configure`` script. If the detected Python version is not
|
||||||
|
what you expect, specify a path to Python executable in a ``PYTHON``
|
||||||
|
variable as an argument to configure script (e.g., ``./configure
|
||||||
|
PYTHON=/usr/bin/python3.8``).
|
||||||
|
|
||||||
|
The following example code illustrates basic usage of the HPACK compressor
|
||||||
|
and decompressor in Python:
|
||||||
|
|
||||||
|
.. code-block:: python
|
||||||
|
|
||||||
|
import binascii
|
||||||
|
import nghttp2
|
||||||
|
|
||||||
|
deflater = nghttp2.HDDeflater()
|
||||||
|
inflater = nghttp2.HDInflater()
|
||||||
|
|
||||||
|
data = deflater.deflate([(b'foo', b'bar'),
|
||||||
|
(b'baz', b'buz')])
|
||||||
|
print(binascii.b2a_hex(data))
|
||||||
|
|
||||||
|
hdrs = inflater.inflate(data)
|
||||||
|
print(hdrs)
|
||||||
|
|
||||||
|
The ``nghttp2.HTTP2Server`` class builds on top of the asyncio event
|
||||||
|
loop. On construction, *RequestHandlerClass* must be given, which
|
||||||
|
must be a subclass of ``nghttp2.BaseRequestHandler`` class.
|
||||||
|
|
||||||
|
The ``BaseRequestHandler`` class is used to handle the HTTP/2 stream.
|
||||||
|
By default, it does nothing. It must be subclassed to handle each
|
||||||
|
event callback method.
|
||||||
|
|
||||||
|
The first callback method invoked is ``on_headers()``. It is called
|
||||||
|
when HEADERS frame, which includes the request header fields, has arrived.
|
||||||
|
|
||||||
|
If the request has a request body, ``on_data(data)`` is invoked for each
|
||||||
|
chunk of received data.
|
||||||
|
|
||||||
|
Once the entire request is received, ``on_request_done()`` is invoked.
|
||||||
|
|
||||||
|
When the stream is closed, ``on_close(error_code)`` is called.
|
||||||
|
|
||||||
|
The application can send a response using ``send_response()`` method.
|
||||||
|
It can be used in ``on_headers()``, ``on_data()`` or
|
||||||
|
``on_request_done()``.
|
||||||
|
|
||||||
|
The application can push resources using the ``push()`` method. It must be
|
||||||
|
used before the ``send_response()`` call.
|
||||||
|
|
||||||
|
The following instance variables are available:
|
||||||
|
|
||||||
|
client_address
|
||||||
|
Contains a tuple of the form (host, port) referring to the
|
||||||
|
client's address.
|
||||||
|
|
||||||
|
stream_id
|
||||||
|
Stream ID of this stream.
|
||||||
|
|
||||||
|
scheme
|
||||||
|
Scheme of the request URI. This is a value of :scheme header
|
||||||
|
field.
|
||||||
|
|
||||||
|
method
|
||||||
|
Method of this stream. This is a value of :method header field.
|
||||||
|
|
||||||
|
host
|
||||||
|
This is a value of :authority or host header field.
|
||||||
|
|
||||||
|
path
|
||||||
|
This is a value of :path header field.
|
||||||
|
|
||||||
|
The following example illustrates the HTTP2Server and
|
||||||
|
BaseRequestHandler usage:
|
||||||
|
|
||||||
|
.. code-block:: python
|
||||||
|
|
||||||
|
#!/usr/bin/env python3
|
||||||
|
|
||||||
|
import io, ssl
|
||||||
|
import nghttp2
|
||||||
|
|
||||||
|
class Handler(nghttp2.BaseRequestHandler):
|
||||||
|
|
||||||
|
def on_headers(self):
|
||||||
|
self.push(path='/css/bootstrap.css',
|
||||||
|
request_headers = [('content-length', '3')],
|
||||||
|
status=200,
|
||||||
|
body='foo')
|
||||||
|
|
||||||
|
self.push(path='/js/bootstrap.js',
|
||||||
|
method='GET',
|
||||||
|
request_headers = [('content-length', '10')],
|
||||||
|
status=200,
|
||||||
|
body='foobarbuzz')
|
||||||
|
|
||||||
|
self.send_response(status=200,
|
||||||
|
headers = [('content-type', 'text/plain')],
|
||||||
|
body=io.BytesIO(b'nghttp2-python FTW'))
|
||||||
|
|
||||||
|
ctx = ssl.SSLContext(ssl.PROTOCOL_SSLv23)
|
||||||
|
ctx.options = ssl.OP_ALL | ssl.OP_NO_SSLv2
|
||||||
|
ctx.load_cert_chain('server.crt', 'server.key')
|
||||||
|
|
||||||
|
# give None to ssl to make the server non-SSL/TLS
|
||||||
|
server = nghttp2.HTTP2Server(('127.0.0.1', 8443), Handler, ssl=ctx)
|
||||||
|
server.serve_forever()
|
||||||
|
|
||||||
Contribution
|
Contribution
|
||||||
------------
|
------------
|
||||||
|
|
||||||
@@ -1448,10 +1667,23 @@ See `Contribution Guidelines
|
|||||||
<https://nghttp2.org/documentation/contribute.html>`_ for more
|
<https://nghttp2.org/documentation/contribute.html>`_ for more
|
||||||
details.
|
details.
|
||||||
|
|
||||||
Versioning
|
Reporting vulnerability
|
||||||
----------
|
-----------------------
|
||||||
|
|
||||||
In general, we follow `Semantic Versioning <http://semver.org/>`_.
|
If you find a vulnerability in our software, please send the email to
|
||||||
|
"tatsuhiro.t at gmail dot com" about its details instead of submitting
|
||||||
|
issues on github issue page. It is a standard practice not to
|
||||||
|
disclose vulnerability information publicly until a fixed version is
|
||||||
|
released, or mitigation is worked out.
|
||||||
|
|
||||||
|
In the future, we may setup a dedicated mail address for this purpose.
|
||||||
|
|
||||||
|
Release schedule
|
||||||
|
----------------
|
||||||
|
|
||||||
|
In general, we follow `Semantic Versioning <http://semver.org/>`_. We
|
||||||
|
release MINOR version update every month, and usually we ship it
|
||||||
|
around 25th day of every month.
|
||||||
|
|
||||||
We may release PATCH releases between the regular releases, mainly for
|
We may release PATCH releases between the regular releases, mainly for
|
||||||
severe security bug fixes.
|
severe security bug fixes.
|
||||||
|
|||||||
31
SECURITY.md
31
SECURITY.md
@@ -1,31 +0,0 @@
|
|||||||
# Security Process
|
|
||||||
|
|
||||||
If you find a vulnerability in our software, please report it via
|
|
||||||
GitHub "Private vulnerability reporting" feature at
|
|
||||||
https://github.com/nghttp2/nghttp2/security instead of submitting
|
|
||||||
issues on github issue page. It is a standard practice not to
|
|
||||||
disclose vulnerability information publicly until a fixed version is
|
|
||||||
released, or mitigation is worked out.
|
|
||||||
|
|
||||||
If we identify that the reported issue is really a vulnerability, we
|
|
||||||
open a new security advisory draft using [GitHub security
|
|
||||||
feature](https://github.com/nghttp2/nghttp2/security) and discuss the
|
|
||||||
mitigation and bug fixes there. The fixes are committed to the
|
|
||||||
private repository.
|
|
||||||
|
|
||||||
We write the security advisory and get CVE number from GitHub
|
|
||||||
privately. We also discuss the disclosure date to the public.
|
|
||||||
|
|
||||||
We make a new release with the fix at the same time when the
|
|
||||||
vulnerability is disclosed to public.
|
|
||||||
|
|
||||||
At least 7 days before the public disclosure date, we open a new issue
|
|
||||||
on [nghttp2 issue tracker](https://github.com/nghttp2/nghttp2/issues)
|
|
||||||
which notifies that the upcoming release will have a security fix.
|
|
||||||
The `SECURITY` label is attached to this kind of issue. The issue is
|
|
||||||
not opened if a vulnerability is already disclosed, and it is publicly
|
|
||||||
known that nghttp2 is affected by that.
|
|
||||||
|
|
||||||
Before few hours of new release, we merge the fixes to the master
|
|
||||||
branch (and/or a release branch if necessary) and make a new release.
|
|
||||||
Security advisory is disclosed on GitHub.
|
|
||||||
@@ -23,15 +23,25 @@
|
|||||||
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||||
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
|
|
||||||
. ./android-env
|
if [ -z "$ANDROID_HOME" ]; then
|
||||||
|
echo 'No $ANDROID_HOME specified.'
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
PREFIX="$ANDROID_HOME"/usr/local
|
||||||
|
TOOLCHAIN="$ANDROID_HOME"/toolchain
|
||||||
|
PATH="$TOOLCHAIN"/bin:"$PATH"
|
||||||
|
|
||||||
./configure \
|
./configure \
|
||||||
--disable-shared \
|
--disable-shared \
|
||||||
--host=$TARGET \
|
--host=arm-linux-androideabi \
|
||||||
--build=`dpkg-architecture -qDEB_BUILD_GNU_TYPE` \
|
--build=`dpkg-architecture -qDEB_BUILD_GNU_TYPE` \
|
||||||
|
--with-xml-prefix="$PREFIX" \
|
||||||
--without-libxml2 \
|
--without-libxml2 \
|
||||||
|
--disable-python-bindings \
|
||||||
--disable-examples \
|
--disable-examples \
|
||||||
--disable-threads \
|
--disable-threads \
|
||||||
|
CC="$TOOLCHAIN"/bin/arm-linux-androideabi-clang \
|
||||||
|
CXX="$TOOLCHAIN"/bin/arm-linux-androideabi-clang++ \
|
||||||
CPPFLAGS="-fPIE -I$PREFIX/include" \
|
CPPFLAGS="-fPIE -I$PREFIX/include" \
|
||||||
PKG_CONFIG_LIBDIR="$PREFIX/lib/pkgconfig" \
|
PKG_CONFIG_LIBDIR="$PREFIX/lib/pkgconfig" \
|
||||||
LDFLAGS="-fPIE -pie -L$PREFIX/lib"
|
LDFLAGS="-fPIE -pie -L$PREFIX/lib"
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
#
|
#
|
||||||
# nghttp2 - HTTP/2 C Library
|
# nghttp2 - HTTP/2 C Library
|
||||||
#
|
#
|
||||||
# Copyright (c) 2022 nghttp2 contributors
|
# Copyright (c) 2013 Tatsuhiro Tsujikawa
|
||||||
#
|
#
|
||||||
# Permission is hereby granted, free of charge, to any person obtaining
|
# Permission is hereby granted, free of charge, to any person obtaining
|
||||||
# a copy of this software and associated documentation files (the
|
# a copy of this software and associated documentation files (the
|
||||||
@@ -23,18 +23,11 @@
|
|||||||
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||||
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
|
|
||||||
if [ -z "$NDK" ]; then
|
if [ -z "$ANDROID_HOME" ]; then
|
||||||
echo 'No $NDK specified.'
|
echo 'No $ANDROID_HOME specified.'
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
TOOLCHAIN=$ANDROID_HOME/toolchain
|
||||||
|
PATH=$TOOLCHAIN/bin:$PATH
|
||||||
|
|
||||||
export TOOLCHAIN=$NDK/toolchains/llvm/prebuilt/linux-x86_64
|
make "$@"
|
||||||
export TARGET=aarch64-linux-android
|
|
||||||
export API=33
|
|
||||||
export AR=$TOOLCHAIN/bin/llvm-ar
|
|
||||||
export CC=$TOOLCHAIN/bin/$TARGET$API-clang
|
|
||||||
export CXX=$TOOLCHAIN/bin/$TARGET$API-clang++
|
|
||||||
export LD=$TOOLCHAIN/bin/ld
|
|
||||||
export RANDLIB=$TOOLCHAIN/bin/llvm-ranlib
|
|
||||||
export STRIP=$TOOLCHAIN/bin/llvm-strip
|
|
||||||
export PREFIX=$NDK/usr/local
|
|
||||||
53
appveyor.yml
Normal file
53
appveyor.yml
Normal file
@@ -0,0 +1,53 @@
|
|||||||
|
# Notes:
|
||||||
|
# - Minimal appveyor.yml file is an empty file. All sections are optional.
|
||||||
|
# - Indent each level of configuration with 2 spaces. Do not use tabs!
|
||||||
|
# - All section names are case-sensitive.
|
||||||
|
# - Section names should be unique on each level.
|
||||||
|
|
||||||
|
#---------------------------------#
|
||||||
|
# general configuration #
|
||||||
|
#---------------------------------#
|
||||||
|
|
||||||
|
# version format
|
||||||
|
#version: 0.10.{build}
|
||||||
|
|
||||||
|
# branches to build
|
||||||
|
branches:
|
||||||
|
# blacklist
|
||||||
|
except:
|
||||||
|
- gh-pages
|
||||||
|
|
||||||
|
# Do not build on tags (GitHub only)
|
||||||
|
skip_tags: true
|
||||||
|
|
||||||
|
#---------------------------------#
|
||||||
|
# environment configuration #
|
||||||
|
#---------------------------------#
|
||||||
|
|
||||||
|
os: Windows Server 2012
|
||||||
|
|
||||||
|
# scripts that run after cloning repository
|
||||||
|
install:
|
||||||
|
# install Win-Flex-Bison
|
||||||
|
#- cmd: cinst winflexbison -y
|
||||||
|
|
||||||
|
#---------------------------------#
|
||||||
|
# build configuration #
|
||||||
|
#---------------------------------#
|
||||||
|
|
||||||
|
# scripts to run before build
|
||||||
|
before_build:
|
||||||
|
- cmd: cmake .
|
||||||
|
|
||||||
|
# scripts to run *after* solution is built and *before* automatic packaging occurs (web apps, NuGet packages, Azure Cloud Services)
|
||||||
|
# before_package:
|
||||||
|
|
||||||
|
# scripts to run after build
|
||||||
|
# after_build:
|
||||||
|
|
||||||
|
# to run your custom scripts instead of automatic MSBuild
|
||||||
|
build_script:
|
||||||
|
- cmd: cmake --build .
|
||||||
|
|
||||||
|
# to disable automatic builds
|
||||||
|
# build: off
|
||||||
@@ -42,6 +42,11 @@
|
|||||||
License is Public Domain. Commit hash:
|
License is Public Domain. Commit hash:
|
||||||
12e7744b4919e9d55de75b7ab566326a1c8e7a67 */
|
12e7744b4919e9d55de75b7ab566326a1c8e7a67 */
|
||||||
|
|
||||||
|
#define AES_BLOCKLEN \
|
||||||
|
16 /* Block length in bytes - AES is 128b block \
|
||||||
|
only */
|
||||||
|
|
||||||
|
#define AES_KEYLEN 16 /* Key length in bytes */
|
||||||
#define AES_keyExpSize 176
|
#define AES_keyExpSize 176
|
||||||
|
|
||||||
struct AES_ctx {
|
struct AES_ctx {
|
||||||
@@ -52,6 +57,7 @@ struct AES_ctx {
|
|||||||
in AES. Value=4 */
|
in AES. Value=4 */
|
||||||
#define Nb 4
|
#define Nb 4
|
||||||
|
|
||||||
|
#define Nk 4 /* The number of 32 bit words in a key. */
|
||||||
#define Nr 10 /* The number of rounds in AES Cipher. */
|
#define Nr 10 /* The number of rounds in AES Cipher. */
|
||||||
|
|
||||||
/* state - array holding the intermediate results during
|
/* state - array holding the intermediate results during
|
||||||
@@ -62,27 +68,126 @@ typedef __u8 state_t[4][4];
|
|||||||
read-only storage instead of RAM The numbers below can be computed
|
read-only storage instead of RAM The numbers below can be computed
|
||||||
dynamically trading ROM for RAM - This can be useful in (embedded)
|
dynamically trading ROM for RAM - This can be useful in (embedded)
|
||||||
bootloader applications, where ROM is often limited. */
|
bootloader applications, where ROM is often limited. */
|
||||||
|
static const __u8 sbox[256] = {
|
||||||
|
/* 0 1 2 3 4 5 6 7 8 9 A B C D E F */
|
||||||
|
0x63, 0x7c, 0x77, 0x7b, 0xf2, 0x6b, 0x6f, 0xc5, 0x30, 0x01, 0x67, 0x2b,
|
||||||
|
0xfe, 0xd7, 0xab, 0x76, 0xca, 0x82, 0xc9, 0x7d, 0xfa, 0x59, 0x47, 0xf0,
|
||||||
|
0xad, 0xd4, 0xa2, 0xaf, 0x9c, 0xa4, 0x72, 0xc0, 0xb7, 0xfd, 0x93, 0x26,
|
||||||
|
0x36, 0x3f, 0xf7, 0xcc, 0x34, 0xa5, 0xe5, 0xf1, 0x71, 0xd8, 0x31, 0x15,
|
||||||
|
0x04, 0xc7, 0x23, 0xc3, 0x18, 0x96, 0x05, 0x9a, 0x07, 0x12, 0x80, 0xe2,
|
||||||
|
0xeb, 0x27, 0xb2, 0x75, 0x09, 0x83, 0x2c, 0x1a, 0x1b, 0x6e, 0x5a, 0xa0,
|
||||||
|
0x52, 0x3b, 0xd6, 0xb3, 0x29, 0xe3, 0x2f, 0x84, 0x53, 0xd1, 0x00, 0xed,
|
||||||
|
0x20, 0xfc, 0xb1, 0x5b, 0x6a, 0xcb, 0xbe, 0x39, 0x4a, 0x4c, 0x58, 0xcf,
|
||||||
|
0xd0, 0xef, 0xaa, 0xfb, 0x43, 0x4d, 0x33, 0x85, 0x45, 0xf9, 0x02, 0x7f,
|
||||||
|
0x50, 0x3c, 0x9f, 0xa8, 0x51, 0xa3, 0x40, 0x8f, 0x92, 0x9d, 0x38, 0xf5,
|
||||||
|
0xbc, 0xb6, 0xda, 0x21, 0x10, 0xff, 0xf3, 0xd2, 0xcd, 0x0c, 0x13, 0xec,
|
||||||
|
0x5f, 0x97, 0x44, 0x17, 0xc4, 0xa7, 0x7e, 0x3d, 0x64, 0x5d, 0x19, 0x73,
|
||||||
|
0x60, 0x81, 0x4f, 0xdc, 0x22, 0x2a, 0x90, 0x88, 0x46, 0xee, 0xb8, 0x14,
|
||||||
|
0xde, 0x5e, 0x0b, 0xdb, 0xe0, 0x32, 0x3a, 0x0a, 0x49, 0x06, 0x24, 0x5c,
|
||||||
|
0xc2, 0xd3, 0xac, 0x62, 0x91, 0x95, 0xe4, 0x79, 0xe7, 0xc8, 0x37, 0x6d,
|
||||||
|
0x8d, 0xd5, 0x4e, 0xa9, 0x6c, 0x56, 0xf4, 0xea, 0x65, 0x7a, 0xae, 0x08,
|
||||||
|
0xba, 0x78, 0x25, 0x2e, 0x1c, 0xa6, 0xb4, 0xc6, 0xe8, 0xdd, 0x74, 0x1f,
|
||||||
|
0x4b, 0xbd, 0x8b, 0x8a, 0x70, 0x3e, 0xb5, 0x66, 0x48, 0x03, 0xf6, 0x0e,
|
||||||
|
0x61, 0x35, 0x57, 0xb9, 0x86, 0xc1, 0x1d, 0x9e, 0xe1, 0xf8, 0x98, 0x11,
|
||||||
|
0x69, 0xd9, 0x8e, 0x94, 0x9b, 0x1e, 0x87, 0xe9, 0xce, 0x55, 0x28, 0xdf,
|
||||||
|
0x8c, 0xa1, 0x89, 0x0d, 0xbf, 0xe6, 0x42, 0x68, 0x41, 0x99, 0x2d, 0x0f,
|
||||||
|
0xb0, 0x54, 0xbb, 0x16};
|
||||||
|
|
||||||
static const __u8 rsbox[256] = {
|
static const __u8 rsbox[256] = {
|
||||||
0x52, 0x09, 0x6a, 0xd5, 0x30, 0x36, 0xa5, 0x38, 0xbf, 0x40, 0xa3, 0x9e, 0x81,
|
0x52, 0x09, 0x6a, 0xd5, 0x30, 0x36, 0xa5, 0x38, 0xbf, 0x40, 0xa3, 0x9e,
|
||||||
0xf3, 0xd7, 0xfb, 0x7c, 0xe3, 0x39, 0x82, 0x9b, 0x2f, 0xff, 0x87, 0x34, 0x8e,
|
0x81, 0xf3, 0xd7, 0xfb, 0x7c, 0xe3, 0x39, 0x82, 0x9b, 0x2f, 0xff, 0x87,
|
||||||
0x43, 0x44, 0xc4, 0xde, 0xe9, 0xcb, 0x54, 0x7b, 0x94, 0x32, 0xa6, 0xc2, 0x23,
|
0x34, 0x8e, 0x43, 0x44, 0xc4, 0xde, 0xe9, 0xcb, 0x54, 0x7b, 0x94, 0x32,
|
||||||
0x3d, 0xee, 0x4c, 0x95, 0x0b, 0x42, 0xfa, 0xc3, 0x4e, 0x08, 0x2e, 0xa1, 0x66,
|
0xa6, 0xc2, 0x23, 0x3d, 0xee, 0x4c, 0x95, 0x0b, 0x42, 0xfa, 0xc3, 0x4e,
|
||||||
0x28, 0xd9, 0x24, 0xb2, 0x76, 0x5b, 0xa2, 0x49, 0x6d, 0x8b, 0xd1, 0x25, 0x72,
|
0x08, 0x2e, 0xa1, 0x66, 0x28, 0xd9, 0x24, 0xb2, 0x76, 0x5b, 0xa2, 0x49,
|
||||||
0xf8, 0xf6, 0x64, 0x86, 0x68, 0x98, 0x16, 0xd4, 0xa4, 0x5c, 0xcc, 0x5d, 0x65,
|
0x6d, 0x8b, 0xd1, 0x25, 0x72, 0xf8, 0xf6, 0x64, 0x86, 0x68, 0x98, 0x16,
|
||||||
0xb6, 0x92, 0x6c, 0x70, 0x48, 0x50, 0xfd, 0xed, 0xb9, 0xda, 0x5e, 0x15, 0x46,
|
0xd4, 0xa4, 0x5c, 0xcc, 0x5d, 0x65, 0xb6, 0x92, 0x6c, 0x70, 0x48, 0x50,
|
||||||
0x57, 0xa7, 0x8d, 0x9d, 0x84, 0x90, 0xd8, 0xab, 0x00, 0x8c, 0xbc, 0xd3, 0x0a,
|
0xfd, 0xed, 0xb9, 0xda, 0x5e, 0x15, 0x46, 0x57, 0xa7, 0x8d, 0x9d, 0x84,
|
||||||
0xf7, 0xe4, 0x58, 0x05, 0xb8, 0xb3, 0x45, 0x06, 0xd0, 0x2c, 0x1e, 0x8f, 0xca,
|
0x90, 0xd8, 0xab, 0x00, 0x8c, 0xbc, 0xd3, 0x0a, 0xf7, 0xe4, 0x58, 0x05,
|
||||||
0x3f, 0x0f, 0x02, 0xc1, 0xaf, 0xbd, 0x03, 0x01, 0x13, 0x8a, 0x6b, 0x3a, 0x91,
|
0xb8, 0xb3, 0x45, 0x06, 0xd0, 0x2c, 0x1e, 0x8f, 0xca, 0x3f, 0x0f, 0x02,
|
||||||
0x11, 0x41, 0x4f, 0x67, 0xdc, 0xea, 0x97, 0xf2, 0xcf, 0xce, 0xf0, 0xb4, 0xe6,
|
0xc1, 0xaf, 0xbd, 0x03, 0x01, 0x13, 0x8a, 0x6b, 0x3a, 0x91, 0x11, 0x41,
|
||||||
0x73, 0x96, 0xac, 0x74, 0x22, 0xe7, 0xad, 0x35, 0x85, 0xe2, 0xf9, 0x37, 0xe8,
|
0x4f, 0x67, 0xdc, 0xea, 0x97, 0xf2, 0xcf, 0xce, 0xf0, 0xb4, 0xe6, 0x73,
|
||||||
0x1c, 0x75, 0xdf, 0x6e, 0x47, 0xf1, 0x1a, 0x71, 0x1d, 0x29, 0xc5, 0x89, 0x6f,
|
0x96, 0xac, 0x74, 0x22, 0xe7, 0xad, 0x35, 0x85, 0xe2, 0xf9, 0x37, 0xe8,
|
||||||
0xb7, 0x62, 0x0e, 0xaa, 0x18, 0xbe, 0x1b, 0xfc, 0x56, 0x3e, 0x4b, 0xc6, 0xd2,
|
0x1c, 0x75, 0xdf, 0x6e, 0x47, 0xf1, 0x1a, 0x71, 0x1d, 0x29, 0xc5, 0x89,
|
||||||
0x79, 0x20, 0x9a, 0xdb, 0xc0, 0xfe, 0x78, 0xcd, 0x5a, 0xf4, 0x1f, 0xdd, 0xa8,
|
0x6f, 0xb7, 0x62, 0x0e, 0xaa, 0x18, 0xbe, 0x1b, 0xfc, 0x56, 0x3e, 0x4b,
|
||||||
0x33, 0x88, 0x07, 0xc7, 0x31, 0xb1, 0x12, 0x10, 0x59, 0x27, 0x80, 0xec, 0x5f,
|
0xc6, 0xd2, 0x79, 0x20, 0x9a, 0xdb, 0xc0, 0xfe, 0x78, 0xcd, 0x5a, 0xf4,
|
||||||
0x60, 0x51, 0x7f, 0xa9, 0x19, 0xb5, 0x4a, 0x0d, 0x2d, 0xe5, 0x7a, 0x9f, 0x93,
|
0x1f, 0xdd, 0xa8, 0x33, 0x88, 0x07, 0xc7, 0x31, 0xb1, 0x12, 0x10, 0x59,
|
||||||
0xc9, 0x9c, 0xef, 0xa0, 0xe0, 0x3b, 0x4d, 0xae, 0x2a, 0xf5, 0xb0, 0xc8, 0xeb,
|
0x27, 0x80, 0xec, 0x5f, 0x60, 0x51, 0x7f, 0xa9, 0x19, 0xb5, 0x4a, 0x0d,
|
||||||
0xbb, 0x3c, 0x83, 0x53, 0x99, 0x61, 0x17, 0x2b, 0x04, 0x7e, 0xba, 0x77, 0xd6,
|
0x2d, 0xe5, 0x7a, 0x9f, 0x93, 0xc9, 0x9c, 0xef, 0xa0, 0xe0, 0x3b, 0x4d,
|
||||||
0x26, 0xe1, 0x69, 0x14, 0x63, 0x55, 0x21, 0x0c, 0x7d};
|
0xae, 0x2a, 0xf5, 0xb0, 0xc8, 0xeb, 0xbb, 0x3c, 0x83, 0x53, 0x99, 0x61,
|
||||||
|
0x17, 0x2b, 0x04, 0x7e, 0xba, 0x77, 0xd6, 0x26, 0xe1, 0x69, 0x14, 0x63,
|
||||||
|
0x55, 0x21, 0x0c, 0x7d};
|
||||||
|
|
||||||
|
/* The round constant word array, Rcon[i], contains the values given
|
||||||
|
by x to the power (i-1) being powers of x (x is denoted as {02}) in
|
||||||
|
the field GF(2^8) */
|
||||||
|
static const __u8 Rcon[11] = {0x8d, 0x01, 0x02, 0x04, 0x08, 0x10,
|
||||||
|
0x20, 0x40, 0x80, 0x1b, 0x36};
|
||||||
|
|
||||||
|
#define getSBoxValue(num) (sbox[(num)])
|
||||||
|
|
||||||
|
/* This function produces Nb(Nr+1) round keys. The round keys are used
|
||||||
|
in each round to decrypt the states. */
|
||||||
|
static void KeyExpansion(__u8 *RoundKey, const __u8 *Key) {
|
||||||
|
unsigned i, j, k;
|
||||||
|
__u8 tempa[4]; /* Used for the column/row operations */
|
||||||
|
|
||||||
|
/* The first round key is the key itself. */
|
||||||
|
for (i = 0; i < Nk; ++i) {
|
||||||
|
RoundKey[(i * 4) + 0] = Key[(i * 4) + 0];
|
||||||
|
RoundKey[(i * 4) + 1] = Key[(i * 4) + 1];
|
||||||
|
RoundKey[(i * 4) + 2] = Key[(i * 4) + 2];
|
||||||
|
RoundKey[(i * 4) + 3] = Key[(i * 4) + 3];
|
||||||
|
}
|
||||||
|
|
||||||
|
/* All other round keys are found from the previous round keys. */
|
||||||
|
for (i = Nk; i < Nb * (Nr + 1); ++i) {
|
||||||
|
{
|
||||||
|
k = (i - 1) * 4;
|
||||||
|
tempa[0] = RoundKey[k + 0];
|
||||||
|
tempa[1] = RoundKey[k + 1];
|
||||||
|
tempa[2] = RoundKey[k + 2];
|
||||||
|
tempa[3] = RoundKey[k + 3];
|
||||||
|
}
|
||||||
|
|
||||||
|
if (i % Nk == 0) {
|
||||||
|
/* This function shifts the 4 bytes in a word to the left once.
|
||||||
|
[a0,a1,a2,a3] becomes [a1,a2,a3,a0] */
|
||||||
|
|
||||||
|
/* Function RotWord() */
|
||||||
|
{
|
||||||
|
const __u8 u8tmp = tempa[0];
|
||||||
|
tempa[0] = tempa[1];
|
||||||
|
tempa[1] = tempa[2];
|
||||||
|
tempa[2] = tempa[3];
|
||||||
|
tempa[3] = u8tmp;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* SubWord() is a function that takes a four-byte input word and
|
||||||
|
applies the S-box to each of the four bytes to produce an
|
||||||
|
output word. */
|
||||||
|
|
||||||
|
/* Function Subword() */
|
||||||
|
{
|
||||||
|
tempa[0] = getSBoxValue(tempa[0]);
|
||||||
|
tempa[1] = getSBoxValue(tempa[1]);
|
||||||
|
tempa[2] = getSBoxValue(tempa[2]);
|
||||||
|
tempa[3] = getSBoxValue(tempa[3]);
|
||||||
|
}
|
||||||
|
|
||||||
|
tempa[0] = tempa[0] ^ Rcon[i / Nk];
|
||||||
|
}
|
||||||
|
j = i * 4;
|
||||||
|
k = (i - Nk) * 4;
|
||||||
|
RoundKey[j + 0] = RoundKey[k + 0] ^ tempa[0];
|
||||||
|
RoundKey[j + 1] = RoundKey[k + 1] ^ tempa[1];
|
||||||
|
RoundKey[j + 2] = RoundKey[k + 2] ^ tempa[2];
|
||||||
|
RoundKey[j + 3] = RoundKey[k + 3] ^ tempa[3];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void AES_init_ctx(struct AES_ctx *ctx, const __u8 *key) {
|
||||||
|
KeyExpansion(ctx->RoundKey, key);
|
||||||
|
}
|
||||||
|
|
||||||
/* This function adds the round key to state. The round key is added
|
/* This function adds the round key to state. The round key is added
|
||||||
to the state by an XOR function. */
|
to the state by an XOR function. */
|
||||||
@@ -318,33 +423,26 @@ static inline __u32 jhash_2words(__u32 a, __u32 b, __u32 initval) {
|
|||||||
return __jhash_nwords(a, b, 0, initval + JHASH_INITVAL + (2 << 2));
|
return __jhash_nwords(a, b, 0, initval + JHASH_INITVAL + (2 << 2));
|
||||||
}
|
}
|
||||||
|
|
||||||
struct {
|
struct bpf_map_def SEC("maps") cid_prefix_map = {
|
||||||
__uint(type, BPF_MAP_TYPE_HASH);
|
.type = BPF_MAP_TYPE_HASH,
|
||||||
__uint(max_entries, 255);
|
.max_entries = 255,
|
||||||
__type(key, __u64);
|
.key_size = sizeof(__u64),
|
||||||
__type(value, __u32);
|
.value_size = sizeof(__u32),
|
||||||
} worker_id_map SEC(".maps");
|
};
|
||||||
|
|
||||||
struct {
|
struct bpf_map_def SEC("maps") reuseport_array = {
|
||||||
__uint(type, BPF_MAP_TYPE_REUSEPORT_SOCKARRAY);
|
.type = BPF_MAP_TYPE_REUSEPORT_SOCKARRAY,
|
||||||
__uint(max_entries, 255);
|
.max_entries = 255,
|
||||||
__type(key, __u32);
|
.key_size = sizeof(__u32),
|
||||||
__type(value, __u32);
|
.value_size = sizeof(__u32),
|
||||||
} reuseport_array SEC(".maps");
|
};
|
||||||
|
|
||||||
struct {
|
struct bpf_map_def SEC("maps") sk_info = {
|
||||||
__uint(type, BPF_MAP_TYPE_ARRAY);
|
.type = BPF_MAP_TYPE_ARRAY,
|
||||||
__uint(max_entries, 1);
|
.max_entries = 3,
|
||||||
__type(key, __u32);
|
.key_size = sizeof(__u32),
|
||||||
__type(value, __u64);
|
.value_size = sizeof(__u64),
|
||||||
} sk_info SEC(".maps");
|
};
|
||||||
|
|
||||||
struct {
|
|
||||||
__uint(type, BPF_MAP_TYPE_ARRAY);
|
|
||||||
__uint(max_entries, 1);
|
|
||||||
__type(key, __u32);
|
|
||||||
__type(value, struct AES_ctx);
|
|
||||||
} aes_key SEC(".maps");
|
|
||||||
|
|
||||||
typedef struct quic_hd {
|
typedef struct quic_hd {
|
||||||
__u8 *dcid;
|
__u8 *dcid;
|
||||||
@@ -353,11 +451,10 @@ typedef struct quic_hd {
|
|||||||
__u8 type;
|
__u8 type;
|
||||||
} quic_hd;
|
} quic_hd;
|
||||||
|
|
||||||
#define SV_DCIDLEN 17
|
#define SV_DCIDLEN 20
|
||||||
#define MAX_DCIDLEN 20
|
#define MAX_DCIDLEN 20
|
||||||
#define MIN_DCIDLEN 8
|
#define MIN_DCIDLEN 8
|
||||||
#define WORKER_IDLEN 8
|
#define CID_PREFIXLEN 8
|
||||||
#define WORKER_ID_OFFSET 1
|
|
||||||
|
|
||||||
enum {
|
enum {
|
||||||
NGTCP2_PKT_INITIAL = 0x0,
|
NGTCP2_PKT_INITIAL = 0x0,
|
||||||
@@ -475,39 +572,13 @@ static __u32 sk_index_from_dcid(const quic_hd *qhd,
|
|||||||
SEC("sk_reuseport")
|
SEC("sk_reuseport")
|
||||||
int select_reuseport(struct sk_reuseport_md *reuse_md) {
|
int select_reuseport(struct sk_reuseport_md *reuse_md) {
|
||||||
__u32 sk_index, *psk_index;
|
__u32 sk_index, *psk_index;
|
||||||
__u64 *pnum_socks;
|
__u64 *pnum_socks, *pkey;
|
||||||
__u32 zero = 0;
|
__u32 zero = 0, key_high_idx = 1, key_low_idx = 2;
|
||||||
int rv;
|
int rv;
|
||||||
quic_hd qhd;
|
quic_hd qhd;
|
||||||
__u8 qpktbuf[6 + MAX_DCIDLEN];
|
__u8 qpktbuf[6 + MAX_DCIDLEN];
|
||||||
struct AES_ctx *aes_ctx;
|
struct AES_ctx aes_ctx;
|
||||||
__u8 *worker_id;
|
__u8 key[AES_KEYLEN];
|
||||||
__u16 remote_port;
|
|
||||||
__u8 *data = reuse_md->data;
|
|
||||||
|
|
||||||
/* Packets less than 22 bytes never be a valid QUIC packet. */
|
|
||||||
if (reuse_md->len < sizeof(struct udphdr) + 22) {
|
|
||||||
return SK_DROP;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (reuse_md->data + sizeof(struct udphdr) > reuse_md->data_end) {
|
|
||||||
return SK_DROP;
|
|
||||||
}
|
|
||||||
|
|
||||||
remote_port = (data[0] << 8) + data[1];
|
|
||||||
|
|
||||||
switch (remote_port) {
|
|
||||||
case 1900:
|
|
||||||
case 5353:
|
|
||||||
case 11211:
|
|
||||||
case 20800:
|
|
||||||
case 27015:
|
|
||||||
return SK_DROP;
|
|
||||||
default:
|
|
||||||
if (remote_port < 1024) {
|
|
||||||
return SK_DROP;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (bpf_skb_load_bytes(reuse_md, sizeof(struct udphdr), qpktbuf,
|
if (bpf_skb_load_bytes(reuse_md, sizeof(struct udphdr), qpktbuf,
|
||||||
sizeof(qpktbuf)) != 0) {
|
sizeof(qpktbuf)) != 0) {
|
||||||
@@ -519,24 +590,34 @@ int select_reuseport(struct sk_reuseport_md *reuse_md) {
|
|||||||
return SK_DROP;
|
return SK_DROP;
|
||||||
}
|
}
|
||||||
|
|
||||||
aes_ctx = bpf_map_lookup_elem(&aes_key, &zero);
|
pkey = bpf_map_lookup_elem(&sk_info, &key_high_idx);
|
||||||
if (aes_ctx == NULL) {
|
if (pkey == NULL) {
|
||||||
return SK_DROP;
|
return SK_DROP;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
__builtin_memcpy(key, pkey, sizeof(*pkey));
|
||||||
|
|
||||||
|
pkey = bpf_map_lookup_elem(&sk_info, &key_low_idx);
|
||||||
|
if (pkey == NULL) {
|
||||||
|
return SK_DROP;
|
||||||
|
}
|
||||||
|
|
||||||
|
__builtin_memcpy(key + sizeof(*pkey), pkey, sizeof(*pkey));
|
||||||
|
|
||||||
rv = parse_quic(&qhd, qpktbuf, qpktbuf + sizeof(qpktbuf));
|
rv = parse_quic(&qhd, qpktbuf, qpktbuf + sizeof(qpktbuf));
|
||||||
if (rv != 0) {
|
if (rv != 0) {
|
||||||
return SK_DROP;
|
return SK_DROP;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
AES_init_ctx(&aes_ctx, key);
|
||||||
|
|
||||||
switch (qhd.type) {
|
switch (qhd.type) {
|
||||||
case NGTCP2_PKT_INITIAL:
|
case NGTCP2_PKT_INITIAL:
|
||||||
case NGTCP2_PKT_0RTT:
|
case NGTCP2_PKT_0RTT:
|
||||||
if (qhd.dcidlen == SV_DCIDLEN) {
|
if (qhd.dcidlen == SV_DCIDLEN) {
|
||||||
worker_id = qhd.dcid + WORKER_ID_OFFSET;
|
AES_ECB_decrypt(&aes_ctx, qhd.dcid);
|
||||||
AES_ECB_decrypt(aes_ctx, worker_id);
|
|
||||||
|
|
||||||
psk_index = bpf_map_lookup_elem(&worker_id_map, worker_id);
|
psk_index = bpf_map_lookup_elem(&cid_prefix_map, qhd.dcid);
|
||||||
if (psk_index != NULL) {
|
if (psk_index != NULL) {
|
||||||
sk_index = *psk_index;
|
sk_index = *psk_index;
|
||||||
|
|
||||||
@@ -553,10 +634,9 @@ int select_reuseport(struct sk_reuseport_md *reuse_md) {
|
|||||||
return SK_DROP;
|
return SK_DROP;
|
||||||
}
|
}
|
||||||
|
|
||||||
worker_id = qhd.dcid + WORKER_ID_OFFSET;
|
AES_ECB_decrypt(&aes_ctx, qhd.dcid);
|
||||||
AES_ECB_decrypt(aes_ctx, worker_id);
|
|
||||||
|
|
||||||
psk_index = bpf_map_lookup_elem(&worker_id_map, worker_id);
|
psk_index = bpf_map_lookup_elem(&cid_prefix_map, qhd.dcid);
|
||||||
if (psk_index == NULL) {
|
if (psk_index == NULL) {
|
||||||
sk_index = sk_index_from_dcid(&qhd, reuse_md, *pnum_socks);
|
sk_index = sk_index_from_dcid(&qhd, reuse_md, *pnum_socks);
|
||||||
|
|
||||||
|
|||||||
40
cmake/FindCUnit.cmake
Normal file
40
cmake/FindCUnit.cmake
Normal file
@@ -0,0 +1,40 @@
|
|||||||
|
# - Try to find cunit
|
||||||
|
# Once done this will define
|
||||||
|
# CUNIT_FOUND - System has cunit
|
||||||
|
# CUNIT_INCLUDE_DIRS - The cunit include directories
|
||||||
|
# CUNIT_LIBRARIES - The libraries needed to use cunit
|
||||||
|
|
||||||
|
find_package(PkgConfig QUIET)
|
||||||
|
pkg_check_modules(PC_CUNIT QUIET cunit)
|
||||||
|
|
||||||
|
find_path(CUNIT_INCLUDE_DIR
|
||||||
|
NAMES CUnit/CUnit.h
|
||||||
|
HINTS ${PC_CUNIT_INCLUDE_DIRS}
|
||||||
|
)
|
||||||
|
find_library(CUNIT_LIBRARY
|
||||||
|
NAMES cunit
|
||||||
|
HINTS ${PC_CUNIT_LIBRARY_DIRS}
|
||||||
|
)
|
||||||
|
|
||||||
|
if(CUNIT_INCLUDE_DIR)
|
||||||
|
set(_version_regex "^#define[ \t]+CU_VERSION[ \t]+\"([^\"]+)\".*")
|
||||||
|
file(STRINGS "${CUNIT_INCLUDE_DIR}/CUnit/CUnit.h"
|
||||||
|
CUNIT_VERSION REGEX "${_version_regex}")
|
||||||
|
string(REGEX REPLACE "${_version_regex}" "\\1"
|
||||||
|
CUNIT_VERSION "${CUNIT_VERSION}")
|
||||||
|
unset(_version_regex)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
include(FindPackageHandleStandardArgs)
|
||||||
|
# handle the QUIETLY and REQUIRED arguments and set CUNIT_FOUND to TRUE
|
||||||
|
# if all listed variables are TRUE and the requested version matches.
|
||||||
|
find_package_handle_standard_args(CUnit REQUIRED_VARS
|
||||||
|
CUNIT_LIBRARY CUNIT_INCLUDE_DIR
|
||||||
|
VERSION_VAR CUNIT_VERSION)
|
||||||
|
|
||||||
|
if(CUNIT_FOUND)
|
||||||
|
set(CUNIT_LIBRARIES ${CUNIT_LIBRARY})
|
||||||
|
set(CUNIT_INCLUDE_DIRS ${CUNIT_INCLUDE_DIR})
|
||||||
|
endif()
|
||||||
|
|
||||||
|
mark_as_advanced(CUNIT_INCLUDE_DIR CUNIT_LIBRARY)
|
||||||
44
cmake/FindCython.cmake
Normal file
44
cmake/FindCython.cmake
Normal file
@@ -0,0 +1,44 @@
|
|||||||
|
# Find the Cython compiler.
|
||||||
|
#
|
||||||
|
# This code sets the following variables:
|
||||||
|
#
|
||||||
|
# CYTHON_EXECUTABLE
|
||||||
|
#
|
||||||
|
# See also UseCython.cmake
|
||||||
|
|
||||||
|
#=============================================================================
|
||||||
|
# Copyright 2011 Kitware, Inc.
|
||||||
|
#
|
||||||
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
# you may not use this file except in compliance with the License.
|
||||||
|
# You may obtain a copy of the License at
|
||||||
|
#
|
||||||
|
# http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
#
|
||||||
|
# Unless required by applicable law or agreed to in writing, software
|
||||||
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
# See the License for the specific language governing permissions and
|
||||||
|
# limitations under the License.
|
||||||
|
#=============================================================================
|
||||||
|
|
||||||
|
# Use the Cython executable that lives next to the Python executable
|
||||||
|
# if it is a local installation.
|
||||||
|
find_package( PythonInterp )
|
||||||
|
if( PYTHONINTERP_FOUND )
|
||||||
|
get_filename_component( _python_path ${PYTHON_EXECUTABLE} PATH )
|
||||||
|
find_program( CYTHON_EXECUTABLE
|
||||||
|
NAMES cython cython.bat cython3
|
||||||
|
HINTS ${_python_path}
|
||||||
|
)
|
||||||
|
else()
|
||||||
|
find_program( CYTHON_EXECUTABLE
|
||||||
|
NAMES cython cython.bat cython3
|
||||||
|
)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
|
||||||
|
include( FindPackageHandleStandardArgs )
|
||||||
|
FIND_PACKAGE_HANDLE_STANDARD_ARGS( Cython REQUIRED_VARS CYTHON_EXECUTABLE )
|
||||||
|
|
||||||
|
mark_as_advanced( CYTHON_EXECUTABLE )
|
||||||
@@ -1,36 +0,0 @@
|
|||||||
# - Try to find libbrotlidec
|
|
||||||
# Once done this will define
|
|
||||||
# LIBBROTLIDEC_FOUND - System has libbrotlidec
|
|
||||||
# LIBBROTLIDEC_INCLUDE_DIRS - The libbrotlidec include directories
|
|
||||||
# LIBBROTLIDEC_LIBRARIES - The libraries needed to use libbrotlidec
|
|
||||||
|
|
||||||
find_package(PkgConfig QUIET)
|
|
||||||
pkg_check_modules(PC_LIBBROTLIDEC QUIET libbrotlidec)
|
|
||||||
|
|
||||||
find_path(LIBBROTLIDEC_INCLUDE_DIR
|
|
||||||
NAMES brotli/decode.h
|
|
||||||
HINTS ${PC_LIBBROTLIDEC_INCLUDE_DIRS}
|
|
||||||
)
|
|
||||||
find_library(LIBBROTLIDEC_LIBRARY
|
|
||||||
NAMES brotlidec
|
|
||||||
HINTS ${PC_LIBBROTLIDEC_LIBRARY_DIRS}
|
|
||||||
)
|
|
||||||
|
|
||||||
if(PC_LIBBROTLIDEC_FOUND)
|
|
||||||
set(LIBBROTLIDEC_VERSION ${PC_LIBBROTLIDEC_VERSION})
|
|
||||||
endif()
|
|
||||||
|
|
||||||
include(FindPackageHandleStandardArgs)
|
|
||||||
# handle the QUIETLY and REQUIRED arguments and set LIBBROTLIDEC_FOUND
|
|
||||||
# to TRUE if all listed variables are TRUE and the requested version
|
|
||||||
# matches.
|
|
||||||
find_package_handle_standard_args(Libbrotlidec REQUIRED_VARS
|
|
||||||
LIBBROTLIDEC_LIBRARY LIBBROTLIDEC_INCLUDE_DIR
|
|
||||||
VERSION_VAR LIBBROTLIDEC_VERSION)
|
|
||||||
|
|
||||||
if(LIBBROTLIDEC_FOUND)
|
|
||||||
set(LIBBROTLIDEC_LIBRARIES ${LIBBROTLIDEC_LIBRARY})
|
|
||||||
set(LIBBROTLIDEC_INCLUDE_DIRS ${LIBBROTLIDEC_INCLUDE_DIR})
|
|
||||||
endif()
|
|
||||||
|
|
||||||
mark_as_advanced(LIBBROTLIDEC_INCLUDE_DIR LIBBROTLIDEC_LIBRARY)
|
|
||||||
@@ -1,36 +0,0 @@
|
|||||||
# - Try to find libbrotlienc
|
|
||||||
# Once done this will define
|
|
||||||
# LIBBROTLIENC_FOUND - System has libbrotlienc
|
|
||||||
# LIBBROTLIENC_INCLUDE_DIRS - The libbrotlienc include directories
|
|
||||||
# LIBBROTLIENC_LIBRARIES - The libraries needed to use libbrotlienc
|
|
||||||
|
|
||||||
find_package(PkgConfig QUIET)
|
|
||||||
pkg_check_modules(PC_LIBBROTLIENC QUIET libbrotlienc)
|
|
||||||
|
|
||||||
find_path(LIBBROTLIENC_INCLUDE_DIR
|
|
||||||
NAMES brotli/encode.h
|
|
||||||
HINTS ${PC_LIBBROTLIENC_INCLUDE_DIRS}
|
|
||||||
)
|
|
||||||
find_library(LIBBROTLIENC_LIBRARY
|
|
||||||
NAMES brotlienc
|
|
||||||
HINTS ${PC_LIBBROTLIENC_LIBRARY_DIRS}
|
|
||||||
)
|
|
||||||
|
|
||||||
if(PC_LIBBROTLIENC_FOUND)
|
|
||||||
set(LIBBROTLIENC_VERSION ${PC_LIBBROTLIENC_VERSION})
|
|
||||||
endif()
|
|
||||||
|
|
||||||
include(FindPackageHandleStandardArgs)
|
|
||||||
# handle the QUIETLY and REQUIRED arguments and set LIBBROTLIENC_FOUND
|
|
||||||
# to TRUE if all listed variables are TRUE and the requested version
|
|
||||||
# matches.
|
|
||||||
find_package_handle_standard_args(Libbrotlienc REQUIRED_VARS
|
|
||||||
LIBBROTLIENC_LIBRARY LIBBROTLIENC_INCLUDE_DIR
|
|
||||||
VERSION_VAR LIBBROTLIENC_VERSION)
|
|
||||||
|
|
||||||
if(LIBBROTLIENC_FOUND)
|
|
||||||
set(LIBBROTLIENC_LIBRARIES ${LIBBROTLIENC_LIBRARY})
|
|
||||||
set(LIBBROTLIENC_INCLUDE_DIRS ${LIBBROTLIENC_INCLUDE_DIR})
|
|
||||||
endif()
|
|
||||||
|
|
||||||
mark_as_advanced(LIBBROTLIENC_INCLUDE_DIR LIBBROTLIENC_LIBRARY)
|
|
||||||
@@ -17,18 +17,12 @@ find_library(LIBCARES_LIBRARY
|
|||||||
)
|
)
|
||||||
|
|
||||||
if(LIBCARES_INCLUDE_DIR)
|
if(LIBCARES_INCLUDE_DIR)
|
||||||
file(READ "${LIBCARES_INCLUDE_DIR}/ares_version.h" _ares_version_h)
|
set(_version_regex "^#define[ \t]+ARES_VERSION_STR[ \t]+\"([^\"]+)\".*")
|
||||||
string(REGEX REPLACE ".*#define[ \t]+ARES_VERSION_MAJOR[ \t]+([0-9]+).*" "\\1"
|
file(STRINGS "${LIBCARES_INCLUDE_DIR}/ares_version.h"
|
||||||
_ares_version_major ${_ares_version_h})
|
LIBCARES_VERSION REGEX "${_version_regex}")
|
||||||
string(REGEX REPLACE ".*#define[ \t]+ARES_VERSION_MINOR[ \t]+([0-9]+).*" "\\1"
|
string(REGEX REPLACE "${_version_regex}" "\\1"
|
||||||
_ares_version_minor ${_ares_version_h})
|
LIBCARES_VERSION "${LIBCARES_VERSION}")
|
||||||
string(REGEX REPLACE ".*#define[ \t]+ARES_VERSION_PATCH[ \t]+([0-9]+).*" "\\1"
|
unset(_version_regex)
|
||||||
_ares_version_patch ${_ares_version_h})
|
|
||||||
set(LIBCARES_VERSION "${_ares_version_major}.${_ares_version_minor}.${_ares_version_patch}")
|
|
||||||
unset(_ares_version_patch)
|
|
||||||
unset(_ares_version_minor)
|
|
||||||
unset(_ares_version_major)
|
|
||||||
unset(_ares_version_h)
|
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
include(FindPackageHandleStandardArgs)
|
include(FindPackageHandleStandardArgs)
|
||||||
|
|||||||
@@ -1,43 +0,0 @@
|
|||||||
# - Try to find libngtcp2_crypto_libressl
|
|
||||||
# Once done this will define
|
|
||||||
# LIBNGTCP2_CRYPTO_LIBRESSL_FOUND - System has libngtcp2_crypto_libressl
|
|
||||||
# LIBNGTCP2_CRYPTO_LIBRESSL_INCLUDE_DIRS - The libngtcp2_crypto_libressl include directories
|
|
||||||
# LIBNGTCP2_CRYPTO_LIBRESSL_LIBRARIES - The libraries needed to use libngtcp2_crypto_libressl
|
|
||||||
|
|
||||||
find_package(PkgConfig QUIET)
|
|
||||||
pkg_check_modules(PC_LIBNGTCP2_CRYPTO_LIBRESSL QUIET libngtcp2_crypto_libressl)
|
|
||||||
|
|
||||||
find_path(LIBNGTCP2_CRYPTO_LIBRESSL_INCLUDE_DIR
|
|
||||||
NAMES ngtcp2/ngtcp2_crypto_quictls.h
|
|
||||||
HINTS ${PC_LIBNGTCP2_CRYPTO_LIBRESSL_INCLUDE_DIRS}
|
|
||||||
)
|
|
||||||
find_library(LIBNGTCP2_CRYPTO_LIBRESSL_LIBRARY
|
|
||||||
NAMES ngtcp2_crypto_libressl
|
|
||||||
HINTS ${PC_LIBNGTCP2_CRYPTO_LIBRESSL_LIBRARY_DIRS}
|
|
||||||
)
|
|
||||||
|
|
||||||
if(LIBNGTCP2_CRYPTO_LIBRESSL_INCLUDE_DIR)
|
|
||||||
set(_version_regex "^#define[ \t]+NGTCP2_VERSION[ \t]+\"([^\"]+)\".*")
|
|
||||||
file(STRINGS "${LIBNGTCP2_CRYPTO_LIBRESSL_INCLUDE_DIR}/ngtcp2/version.h"
|
|
||||||
LIBNGTCP2_CRYPTO_LIBRESSL_VERSION REGEX "${_version_regex}")
|
|
||||||
string(REGEX REPLACE "${_version_regex}" "\\1"
|
|
||||||
LIBNGTCP2_CRYPTO_LIBRESSL_VERSION "${LIBNGTCP2_CRYPTO_LIBRESSL_VERSION}")
|
|
||||||
unset(_version_regex)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
include(FindPackageHandleStandardArgs)
|
|
||||||
# handle the QUIETLY and REQUIRED arguments and set
|
|
||||||
# LIBNGTCP2_CRYPTO_LIBRESSL_FOUND to TRUE if all listed variables are
|
|
||||||
# TRUE and the requested version matches.
|
|
||||||
find_package_handle_standard_args(Libngtcp2_crypto_libressl REQUIRED_VARS
|
|
||||||
LIBNGTCP2_CRYPTO_LIBRESSL_LIBRARY
|
|
||||||
LIBNGTCP2_CRYPTO_LIBRESSL_INCLUDE_DIR
|
|
||||||
VERSION_VAR LIBNGTCP2_CRYPTO_LIBRESSL_VERSION)
|
|
||||||
|
|
||||||
if(LIBNGTCP2_CRYPTO_LIBRESSL_FOUND)
|
|
||||||
set(LIBNGTCP2_CRYPTO_LIBRESSL_LIBRARIES ${LIBNGTCP2_CRYPTO_LIBRESSL_LIBRARY})
|
|
||||||
set(LIBNGTCP2_CRYPTO_LIBRESSL_INCLUDE_DIRS ${LIBNGTCP2_CRYPTO_LIBRESSL_INCLUDE_DIR})
|
|
||||||
endif()
|
|
||||||
|
|
||||||
mark_as_advanced(LIBNGTCP2_CRYPTO_LIBRESSL_INCLUDE_DIR
|
|
||||||
LIBNGTCP2_CRYPTO_LIBRESSL_LIBRARY)
|
|
||||||
43
cmake/FindLibngtcp2_crypto_openssl.cmake
Normal file
43
cmake/FindLibngtcp2_crypto_openssl.cmake
Normal file
@@ -0,0 +1,43 @@
|
|||||||
|
# - Try to find libngtcp2_crypto_openssl
|
||||||
|
# Once done this will define
|
||||||
|
# LIBNGTCP2_CRYPTO_OPENSSL_FOUND - System has libngtcp2_crypto_openssl
|
||||||
|
# LIBNGTCP2_CRYPTO_OPENSSL_INCLUDE_DIRS - The libngtcp2_crypto_openssl include directories
|
||||||
|
# LIBNGTCP2_CRYPTO_OPENSSL_LIBRARIES - The libraries needed to use libngtcp2_crypto_openssl
|
||||||
|
|
||||||
|
find_package(PkgConfig QUIET)
|
||||||
|
pkg_check_modules(PC_LIBNGTCP2_CRYPTO_OPENSSL QUIET libngtcp2_crypto_openssl)
|
||||||
|
|
||||||
|
find_path(LIBNGTCP2_CRYPTO_OPENSSL_INCLUDE_DIR
|
||||||
|
NAMES ngtcp2/ngtcp2_crypto_openssl.h
|
||||||
|
HINTS ${PC_LIBNGTCP2_CRYPTO_OPENSSL_INCLUDE_DIRS}
|
||||||
|
)
|
||||||
|
find_library(LIBNGTCP2_CRYPTO_OPENSSL_LIBRARY
|
||||||
|
NAMES ngtcp2_crypto_openssl
|
||||||
|
HINTS ${PC_LIBNGTCP2_CRYPTO_OPENSSL_LIBRARY_DIRS}
|
||||||
|
)
|
||||||
|
|
||||||
|
if(LIBNGTCP2_CRYPTO_OPENSSL_INCLUDE_DIR)
|
||||||
|
set(_version_regex "^#define[ \t]+NGTCP2_VERSION[ \t]+\"([^\"]+)\".*")
|
||||||
|
file(STRINGS "${LIBNGTCP2_CRYPTO_OPENSSL_INCLUDE_DIR}/ngtcp2/version.h"
|
||||||
|
LIBNGTCP2_CRYPTO_OPENSSL_VERSION REGEX "${_version_regex}")
|
||||||
|
string(REGEX REPLACE "${_version_regex}" "\\1"
|
||||||
|
LIBNGTCP2_CRYPTO_OPENSSL_VERSION "${LIBNGTCP2_CRYPTO_OPENSSL_VERSION}")
|
||||||
|
unset(_version_regex)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
include(FindPackageHandleStandardArgs)
|
||||||
|
# handle the QUIETLY and REQUIRED arguments and set
|
||||||
|
# LIBNGTCP2_CRYPTO_OPENSSL_FOUND to TRUE if all listed variables are
|
||||||
|
# TRUE and the requested version matches.
|
||||||
|
find_package_handle_standard_args(Libngtcp2_crypto_openssl REQUIRED_VARS
|
||||||
|
LIBNGTCP2_CRYPTO_OPENSSL_LIBRARY
|
||||||
|
LIBNGTCP2_CRYPTO_OPENSSL_INCLUDE_DIR
|
||||||
|
VERSION_VAR LIBNGTCP2_CRYPTO_OPENSSL_VERSION)
|
||||||
|
|
||||||
|
if(LIBNGTCP2_CRYPTO_OPENSSL_FOUND)
|
||||||
|
set(LIBNGTCP2_CRYPTO_OPENSSL_LIBRARIES ${LIBNGTCP2_CRYPTO_OPENSSL_LIBRARY})
|
||||||
|
set(LIBNGTCP2_CRYPTO_OPENSSL_INCLUDE_DIRS ${LIBNGTCP2_CRYPTO_OPENSSL_INCLUDE_DIR})
|
||||||
|
endif()
|
||||||
|
|
||||||
|
mark_as_advanced(LIBNGTCP2_CRYPTO_OPENSSL_INCLUDE_DIR
|
||||||
|
LIBNGTCP2_CRYPTO_OPENSSL_LIBRARY)
|
||||||
@@ -1,43 +0,0 @@
|
|||||||
# - Try to find libngtcp2_crypto_ossl
|
|
||||||
# Once done this will define
|
|
||||||
# LIBNGTCP2_CRYPTO_OSSL_FOUND - System has libngtcp2_crypto_ossl
|
|
||||||
# LIBNGTCP2_CRYPTO_OSSL_INCLUDE_DIRS - The libngtcp2_crypto_ossl include directories
|
|
||||||
# LIBNGTCP2_CRYPTO_OSSL_LIBRARIES - The libraries needed to use libngtcp2_crypto_ossl
|
|
||||||
|
|
||||||
find_package(PkgConfig QUIET)
|
|
||||||
pkg_check_modules(PC_LIBNGTCP2_CRYPTO_OSSL QUIET libngtcp2_crypto_ossl)
|
|
||||||
|
|
||||||
find_path(LIBNGTCP2_CRYPTO_OSSL_INCLUDE_DIR
|
|
||||||
NAMES ngtcp2/ngtcp2_crypto_ossl.h
|
|
||||||
HINTS ${PC_LIBNGTCP2_CRYPTO_OSSL_INCLUDE_DIRS}
|
|
||||||
)
|
|
||||||
find_library(LIBNGTCP2_CRYPTO_OSSL_LIBRARY
|
|
||||||
NAMES ngtcp2_crypto_ossl
|
|
||||||
HINTS ${PC_LIBNGTCP2_CRYPTO_OSSL_LIBRARY_DIRS}
|
|
||||||
)
|
|
||||||
|
|
||||||
if(LIBNGTCP2_CRYPTO_OSSL_INCLUDE_DIR)
|
|
||||||
set(_version_regex "^#define[ \t]+NGTCP2_VERSION[ \t]+\"([^\"]+)\".*")
|
|
||||||
file(STRINGS "${LIBNGTCP2_CRYPTO_OSSL_INCLUDE_DIR}/ngtcp2/version.h"
|
|
||||||
LIBNGTCP2_CRYPTO_OSSL_VERSION REGEX "${_version_regex}")
|
|
||||||
string(REGEX REPLACE "${_version_regex}" "\\1"
|
|
||||||
LIBNGTCP2_CRYPTO_OSSL_VERSION "${LIBNGTCP2_CRYPTO_OSSL_VERSION}")
|
|
||||||
unset(_version_regex)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
include(FindPackageHandleStandardArgs)
|
|
||||||
# handle the QUIETLY and REQUIRED arguments and set
|
|
||||||
# LIBNGTCP2_CRYPTO_OSSL_FOUND to TRUE if all listed variables are
|
|
||||||
# TRUE and the requested version matches.
|
|
||||||
find_package_handle_standard_args(Libngtcp2_crypto_ossl REQUIRED_VARS
|
|
||||||
LIBNGTCP2_CRYPTO_OSSL_LIBRARY
|
|
||||||
LIBNGTCP2_CRYPTO_OSSL_INCLUDE_DIR
|
|
||||||
VERSION_VAR LIBNGTCP2_CRYPTO_OSSL_VERSION)
|
|
||||||
|
|
||||||
if(LIBNGTCP2_CRYPTO_OSSL_FOUND)
|
|
||||||
set(LIBNGTCP2_CRYPTO_OSSL_LIBRARIES ${LIBNGTCP2_CRYPTO_OSSL_LIBRARY})
|
|
||||||
set(LIBNGTCP2_CRYPTO_OSSL_INCLUDE_DIRS ${LIBNGTCP2_CRYPTO_OSSL_INCLUDE_DIR})
|
|
||||||
endif()
|
|
||||||
|
|
||||||
mark_as_advanced(LIBNGTCP2_CRYPTO_OSSL_INCLUDE_DIR
|
|
||||||
LIBNGTCP2_CRYPTO_OSSL_LIBRARY)
|
|
||||||
@@ -1,43 +0,0 @@
|
|||||||
# - Try to find libngtcp2_crypto_quictls
|
|
||||||
# Once done this will define
|
|
||||||
# LIBNGTCP2_CRYPTO_QUICTLS_FOUND - System has libngtcp2_crypto_quictls
|
|
||||||
# LIBNGTCP2_CRYPTO_QUICTLS_INCLUDE_DIRS - The libngtcp2_crypto_quictls include directories
|
|
||||||
# LIBNGTCP2_CRYPTO_QUICTLS_LIBRARIES - The libraries needed to use libngtcp2_crypto_quictls
|
|
||||||
|
|
||||||
find_package(PkgConfig QUIET)
|
|
||||||
pkg_check_modules(PC_LIBNGTCP2_CRYPTO_QUICTLS QUIET libngtcp2_crypto_quictls)
|
|
||||||
|
|
||||||
find_path(LIBNGTCP2_CRYPTO_QUICTLS_INCLUDE_DIR
|
|
||||||
NAMES ngtcp2/ngtcp2_crypto_quictls.h
|
|
||||||
HINTS ${PC_LIBNGTCP2_CRYPTO_QUICTLS_INCLUDE_DIRS}
|
|
||||||
)
|
|
||||||
find_library(LIBNGTCP2_CRYPTO_QUICTLS_LIBRARY
|
|
||||||
NAMES ngtcp2_crypto_quictls
|
|
||||||
HINTS ${PC_LIBNGTCP2_CRYPTO_QUICTLS_LIBRARY_DIRS}
|
|
||||||
)
|
|
||||||
|
|
||||||
if(LIBNGTCP2_CRYPTO_QUICTLS_INCLUDE_DIR)
|
|
||||||
set(_version_regex "^#define[ \t]+NGTCP2_VERSION[ \t]+\"([^\"]+)\".*")
|
|
||||||
file(STRINGS "${LIBNGTCP2_CRYPTO_QUICTLS_INCLUDE_DIR}/ngtcp2/version.h"
|
|
||||||
LIBNGTCP2_CRYPTO_QUICTLS_VERSION REGEX "${_version_regex}")
|
|
||||||
string(REGEX REPLACE "${_version_regex}" "\\1"
|
|
||||||
LIBNGTCP2_CRYPTO_QUICTLS_VERSION "${LIBNGTCP2_CRYPTO_QUICTLS_VERSION}")
|
|
||||||
unset(_version_regex)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
include(FindPackageHandleStandardArgs)
|
|
||||||
# handle the QUIETLY and REQUIRED arguments and set
|
|
||||||
# LIBNGTCP2_CRYPTO_QUICTLS_FOUND to TRUE if all listed variables are
|
|
||||||
# TRUE and the requested version matches.
|
|
||||||
find_package_handle_standard_args(Libngtcp2_crypto_quictls REQUIRED_VARS
|
|
||||||
LIBNGTCP2_CRYPTO_QUICTLS_LIBRARY
|
|
||||||
LIBNGTCP2_CRYPTO_QUICTLS_INCLUDE_DIR
|
|
||||||
VERSION_VAR LIBNGTCP2_CRYPTO_QUICTLS_VERSION)
|
|
||||||
|
|
||||||
if(LIBNGTCP2_CRYPTO_QUICTLS_FOUND)
|
|
||||||
set(LIBNGTCP2_CRYPTO_QUICTLS_LIBRARIES ${LIBNGTCP2_CRYPTO_QUICTLS_LIBRARY})
|
|
||||||
set(LIBNGTCP2_CRYPTO_QUICTLS_INCLUDE_DIRS ${LIBNGTCP2_CRYPTO_QUICTLS_INCLUDE_DIR})
|
|
||||||
endif()
|
|
||||||
|
|
||||||
mark_as_advanced(LIBNGTCP2_CRYPTO_QUICTLS_INCLUDE_DIR
|
|
||||||
LIBNGTCP2_CRYPTO_QUICTLS_LIBRARY)
|
|
||||||
@@ -1,43 +0,0 @@
|
|||||||
# - Try to find libngtcp2_crypto_wolfssl
|
|
||||||
# Once done this will define
|
|
||||||
# LIBNGTCP2_CRYPTO_WOLFSSL_FOUND - System has libngtcp2_crypto_wolfssl
|
|
||||||
# LIBNGTCP2_CRYPTO_WOLFSSL_INCLUDE_DIRS - The libngtcp2_crypto_wolfssl include directories
|
|
||||||
# LIBNGTCP2_CRYPTO_WOLFSSL_LIBRARIES - The libraries needed to use libngtcp2_crypto_wolfssl
|
|
||||||
|
|
||||||
find_package(PkgConfig QUIET)
|
|
||||||
pkg_check_modules(PC_LIBNGTCP2_CRYPTO_WOLFSSL QUIET libngtcp2_crypto_wolfssl)
|
|
||||||
|
|
||||||
find_path(LIBNGTCP2_CRYPTO_WOLFSSL_INCLUDE_DIR
|
|
||||||
NAMES ngtcp2/ngtcp2_crypto_wolfssl.h
|
|
||||||
HINTS ${PC_LIBNGTCP2_CRYPTO_WOLFSSL_INCLUDE_DIRS}
|
|
||||||
)
|
|
||||||
find_library(LIBNGTCP2_CRYPTO_WOLFSSL_LIBRARY
|
|
||||||
NAMES ngtcp2_crypto_wolfssl
|
|
||||||
HINTS ${PC_LIBNGTCP2_CRYPTO_WOLFSSL_LIBRARY_DIRS}
|
|
||||||
)
|
|
||||||
|
|
||||||
if(LIBNGTCP2_CRYPTO_WOLFSSL_INCLUDE_DIR)
|
|
||||||
set(_version_regex "^#define[ \t]+NGTCP2_VERSION[ \t]+\"([^\"]+)\".*")
|
|
||||||
file(STRINGS "${LIBNGTCP2_CRYPTO_WOLFSSL_INCLUDE_DIR}/ngtcp2/version.h"
|
|
||||||
LIBNGTCP2_CRYPTO_WOLFSSL_VERSION REGEX "${_version_regex}")
|
|
||||||
string(REGEX REPLACE "${_version_regex}" "\\1"
|
|
||||||
LIBNGTCP2_CRYPTO_WOLFSSL_VERSION "${LIBNGTCP2_CRYPTO_WOLFSSL_VERSION}")
|
|
||||||
unset(_version_regex)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
include(FindPackageHandleStandardArgs)
|
|
||||||
# handle the QUIETLY and REQUIRED arguments and set
|
|
||||||
# LIBNGTCP2_CRYPTO_WOLFSSL_FOUND to TRUE if all listed variables are
|
|
||||||
# TRUE and the requested version matches.
|
|
||||||
find_package_handle_standard_args(Libngtcp2_crypto_wolfssl REQUIRED_VARS
|
|
||||||
LIBNGTCP2_CRYPTO_WOLFSSL_LIBRARY
|
|
||||||
LIBNGTCP2_CRYPTO_WOLFSSL_INCLUDE_DIR
|
|
||||||
VERSION_VAR LIBNGTCP2_CRYPTO_WOLFSSL_VERSION)
|
|
||||||
|
|
||||||
if(LIBNGTCP2_CRYPTO_WOLFSSL_FOUND)
|
|
||||||
set(LIBNGTCP2_CRYPTO_WOLFSSL_LIBRARIES ${LIBNGTCP2_CRYPTO_WOLFSSL_LIBRARY})
|
|
||||||
set(LIBNGTCP2_CRYPTO_WOLFSSL_INCLUDE_DIRS ${LIBNGTCP2_CRYPTO_WOLFSSL_INCLUDE_DIR})
|
|
||||||
endif()
|
|
||||||
|
|
||||||
mark_as_advanced(LIBNGTCP2_CRYPTO_WOLFSSL_INCLUDE_DIR
|
|
||||||
LIBNGTCP2_CRYPTO_WOLFSSL_LIBRARY)
|
|
||||||
@@ -1,41 +0,0 @@
|
|||||||
# - Try to find wolfssl
|
|
||||||
# Once done this will define
|
|
||||||
# WOLFSSL_FOUND - System has wolfssl
|
|
||||||
# WOLFSSL_INCLUDE_DIRS - The wolfssl include directories
|
|
||||||
# WOLFSSL_LIBRARIES - The libraries needed to use wolfssl
|
|
||||||
|
|
||||||
find_package(PkgConfig QUIET)
|
|
||||||
pkg_check_modules(PC_WOLFSSL QUIET wolfssl)
|
|
||||||
|
|
||||||
find_path(WOLFSSL_INCLUDE_DIR
|
|
||||||
NAMES wolfssl/ssl.h
|
|
||||||
HINTS ${PC_WOLFSSL_INCLUDE_DIRS}
|
|
||||||
)
|
|
||||||
find_library(WOLFSSL_LIBRARY
|
|
||||||
NAMES wolfssl
|
|
||||||
HINTS ${PC_WOLFSSL_LIBRARY_DIRS}
|
|
||||||
)
|
|
||||||
|
|
||||||
if(WOLFSSL_INCLUDE_DIR)
|
|
||||||
set(_version_regex "^#define[ \t]+LIBWOLFSSL_VERSION_STRING[ \t]+\"([^\"]+)\".*")
|
|
||||||
file(STRINGS "${WOLFSSL_INCLUDE_DIR}/wolfssl/version.h"
|
|
||||||
WOLFSSL_VERSION REGEX "${_version_regex}")
|
|
||||||
string(REGEX REPLACE "${_version_regex}" "\\1"
|
|
||||||
WOLFSSL_VERSION "${WOLFSSL_VERSION}")
|
|
||||||
unset(_version_regex)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
include(FindPackageHandleStandardArgs)
|
|
||||||
# handle the QUIETLY and REQUIRED arguments and set WOLFSSL_FOUND
|
|
||||||
# to TRUE if all listed variables are TRUE and the requested version
|
|
||||||
# matches.
|
|
||||||
find_package_handle_standard_args(WolfSSL REQUIRED_VARS
|
|
||||||
WOLFSSL_LIBRARY WOLFSSL_INCLUDE_DIR
|
|
||||||
VERSION_VAR WOLFSSL_VERSION)
|
|
||||||
|
|
||||||
if(WOLFSSL_FOUND)
|
|
||||||
set(WOLFSSL_LIBRARIES ${WOLFSSL_LIBRARY})
|
|
||||||
set(WOLFSSL_INCLUDE_DIRS ${WOLFSSL_INCLUDE_DIR})
|
|
||||||
endif()
|
|
||||||
|
|
||||||
mark_as_advanced(WOLFSSL_INCLUDE_DIR WOLFSSL_LIBRARY)
|
|
||||||
@@ -1,162 +0,0 @@
|
|||||||
# nghttp2
|
|
||||||
#
|
|
||||||
# Copyright (c) 2023 nghttp2 contributors
|
|
||||||
#
|
|
||||||
# Permission is hereby granted, free of charge, to any person obtaining
|
|
||||||
# a copy of this software and associated documentation files (the
|
|
||||||
# "Software"), to deal in the Software without restriction, including
|
|
||||||
# without limitation the rights to use, copy, modify, merge, publish,
|
|
||||||
# distribute, sublicense, and/or sell copies of the Software, and to
|
|
||||||
# permit persons to whom the Software is furnished to do so, subject to
|
|
||||||
# the following conditions:
|
|
||||||
#
|
|
||||||
# The above copyright notice and this permission notice shall be
|
|
||||||
# included in all copies or substantial portions of the Software.
|
|
||||||
#
|
|
||||||
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
|
||||||
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
|
||||||
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
|
||||||
# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
|
||||||
# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
|
||||||
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
|
||||||
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
||||||
|
|
||||||
# C
|
|
||||||
|
|
||||||
include(CheckCCompilerFlag)
|
|
||||||
|
|
||||||
if(CMAKE_COMPILER_IS_GNUCC OR CMAKE_COMPILER_IS_GNUCXX OR CMAKE_C_COMPILER_ID MATCHES "Clang")
|
|
||||||
|
|
||||||
# https://clang.llvm.org/docs/DiagnosticsReference.html
|
|
||||||
# https://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html
|
|
||||||
|
|
||||||
# WPICKY_ENABLE = Options we want to enable as-is.
|
|
||||||
# WPICKY_DETECT = Options we want to test first and enable if available.
|
|
||||||
|
|
||||||
# Prefer the -Wextra alias with clang.
|
|
||||||
if(CMAKE_C_COMPILER_ID MATCHES "Clang")
|
|
||||||
set(WPICKY_ENABLE "-Wextra")
|
|
||||||
else()
|
|
||||||
set(WPICKY_ENABLE "-W")
|
|
||||||
endif()
|
|
||||||
|
|
||||||
list(APPEND WPICKY_ENABLE
|
|
||||||
-Wall
|
|
||||||
)
|
|
||||||
|
|
||||||
# ----------------------------------
|
|
||||||
# Add new options here, if in doubt:
|
|
||||||
# ----------------------------------
|
|
||||||
set(WPICKY_DETECT
|
|
||||||
)
|
|
||||||
|
|
||||||
# Assume these options always exist with both clang and gcc.
|
|
||||||
# Require clang 3.0 / gcc 2.95 or later.
|
|
||||||
list(APPEND WPICKY_ENABLE
|
|
||||||
-Wconversion # clang 3.0 gcc 2.95
|
|
||||||
-Winline # clang 1.0 gcc 1.0
|
|
||||||
-Wmissing-declarations # clang 1.0 gcc 2.7
|
|
||||||
-Wmissing-prototypes # clang 1.0 gcc 1.0
|
|
||||||
-Wnested-externs # clang 1.0 gcc 2.7
|
|
||||||
-Wpointer-arith # clang 1.0 gcc 1.4
|
|
||||||
-Wshadow # clang 1.0 gcc 2.95
|
|
||||||
-Wundef # clang 1.0 gcc 2.95
|
|
||||||
-Wwrite-strings # clang 1.0 gcc 1.4
|
|
||||||
)
|
|
||||||
|
|
||||||
# Always enable with clang, version dependent with gcc
|
|
||||||
set(WPICKY_COMMON_OLD
|
|
||||||
-Waddress # clang 3.0 gcc 4.3
|
|
||||||
-Wattributes # clang 3.0 gcc 4.1
|
|
||||||
-Wcast-align # clang 1.0 gcc 4.2
|
|
||||||
-Wdeclaration-after-statement # clang 1.0 gcc 3.4
|
|
||||||
-Wdiv-by-zero # clang 3.0 gcc 4.1
|
|
||||||
-Wempty-body # clang 3.0 gcc 4.3
|
|
||||||
-Wendif-labels # clang 1.0 gcc 3.3
|
|
||||||
-Wfloat-equal # clang 1.0 gcc 2.96 (3.0)
|
|
||||||
-Wformat-nonliteral # clang 3.0 gcc 4.1
|
|
||||||
-Wformat-security # clang 3.0 gcc 4.1
|
|
||||||
-Wmissing-field-initializers # clang 3.0 gcc 4.1
|
|
||||||
-Wmissing-noreturn # clang 3.0 gcc 4.1
|
|
||||||
-Wno-format-nonliteral # clang 1.0 gcc 2.96 (3.0) # This is required because we pass format string as "const char*"
|
|
||||||
# -Wpadded # clang 3.0 gcc 4.1 # Not used because we cannot change public structs
|
|
||||||
-Wredundant-decls # clang 3.0 gcc 4.1
|
|
||||||
-Wsign-conversion # clang 3.0 gcc 4.3
|
|
||||||
-Wstrict-prototypes # clang 1.0 gcc 3.3
|
|
||||||
# -Wswitch-enum # clang 3.0 gcc 4.1 # Not used because this basically disallows default case
|
|
||||||
-Wunreachable-code # clang 3.0 gcc 4.1
|
|
||||||
-Wunused-parameter # clang 3.0 gcc 4.1
|
|
||||||
-Wvla # clang 2.8 gcc 4.3
|
|
||||||
)
|
|
||||||
|
|
||||||
set(WPICKY_COMMON
|
|
||||||
-Wpragmas # clang 3.5 gcc 4.1 appleclang 6.0
|
|
||||||
)
|
|
||||||
|
|
||||||
if(CMAKE_C_COMPILER_ID MATCHES "Clang")
|
|
||||||
list(APPEND WPICKY_ENABLE
|
|
||||||
${WPICKY_COMMON_OLD}
|
|
||||||
-Wshorten-64-to-32 # clang 1.0
|
|
||||||
-Wlanguage-extension-token # clang 3.0
|
|
||||||
)
|
|
||||||
# Enable based on compiler version
|
|
||||||
if((CMAKE_C_COMPILER_ID STREQUAL "Clang" AND NOT CMAKE_C_COMPILER_VERSION VERSION_LESS 3.6) OR
|
|
||||||
(CMAKE_C_COMPILER_ID STREQUAL "AppleClang" AND NOT CMAKE_C_COMPILER_VERSION VERSION_LESS 6.3))
|
|
||||||
list(APPEND WPICKY_ENABLE
|
|
||||||
${WPICKY_COMMON}
|
|
||||||
-Wunreachable-code-break # clang 3.5 appleclang 6.0
|
|
||||||
-Wheader-guard # clang 3.4 appleclang 5.1
|
|
||||||
)
|
|
||||||
endif()
|
|
||||||
if((CMAKE_C_COMPILER_ID STREQUAL "Clang" AND NOT CMAKE_C_COMPILER_VERSION VERSION_LESS 3.9) OR
|
|
||||||
(CMAKE_C_COMPILER_ID STREQUAL "AppleClang" AND NOT CMAKE_C_COMPILER_VERSION VERSION_LESS 8.3))
|
|
||||||
list(APPEND WPICKY_ENABLE
|
|
||||||
-Wmissing-variable-declarations # clang 3.2 appleclang 4.6
|
|
||||||
)
|
|
||||||
endif()
|
|
||||||
if((CMAKE_C_COMPILER_ID STREQUAL "Clang" AND NOT CMAKE_C_COMPILER_VERSION VERSION_LESS 5.0) OR
|
|
||||||
(CMAKE_C_COMPILER_ID STREQUAL "AppleClang" AND NOT CMAKE_C_COMPILER_VERSION VERSION_LESS 9.4))
|
|
||||||
list(APPEND WPICKY_ENABLE
|
|
||||||
)
|
|
||||||
endif()
|
|
||||||
if((CMAKE_C_COMPILER_ID STREQUAL "Clang" AND NOT CMAKE_C_COMPILER_VERSION VERSION_LESS 7.0) OR
|
|
||||||
(CMAKE_C_COMPILER_ID STREQUAL "AppleClang" AND NOT CMAKE_C_COMPILER_VERSION VERSION_LESS 10.3))
|
|
||||||
list(APPEND WPICKY_ENABLE
|
|
||||||
)
|
|
||||||
endif()
|
|
||||||
else() # gcc
|
|
||||||
list(APPEND WPICKY_DETECT
|
|
||||||
${WPICKY_COMMON}
|
|
||||||
)
|
|
||||||
# Enable based on compiler version
|
|
||||||
if(NOT CMAKE_C_COMPILER_VERSION VERSION_LESS 4.3)
|
|
||||||
list(APPEND WPICKY_ENABLE
|
|
||||||
${WPICKY_COMMON_OLD}
|
|
||||||
-Wclobbered # gcc 4.3
|
|
||||||
)
|
|
||||||
endif()
|
|
||||||
endif()
|
|
||||||
|
|
||||||
#
|
|
||||||
|
|
||||||
unset(_wpicky)
|
|
||||||
|
|
||||||
foreach(_CCOPT IN LISTS WPICKY_ENABLE)
|
|
||||||
set(_wpicky "${_wpicky} ${_CCOPT}")
|
|
||||||
endforeach()
|
|
||||||
|
|
||||||
foreach(_CCOPT IN LISTS WPICKY_DETECT)
|
|
||||||
# surprisingly, CHECK_C_COMPILER_FLAG needs a new variable to store each new
|
|
||||||
# test result in.
|
|
||||||
string(MAKE_C_IDENTIFIER "OPT${_CCOPT}" _optvarname)
|
|
||||||
# GCC only warns about unknown -Wno- options if there are also other diagnostic messages,
|
|
||||||
# so test for the positive form instead
|
|
||||||
string(REPLACE "-Wno-" "-W" _CCOPT_ON "${_CCOPT}")
|
|
||||||
check_c_compiler_flag(${_CCOPT_ON} ${_optvarname})
|
|
||||||
if(${_optvarname})
|
|
||||||
set(_wpicky "${_wpicky} ${_CCOPT}")
|
|
||||||
endif()
|
|
||||||
endforeach()
|
|
||||||
|
|
||||||
set(WARNCFLAGS "${WARNCFLAGS} ${_wpicky}")
|
|
||||||
endif()
|
|
||||||
@@ -1,121 +0,0 @@
|
|||||||
# nghttp2
|
|
||||||
#
|
|
||||||
# Copyright (c) 2023 nghttp2 contributors
|
|
||||||
#
|
|
||||||
# Permission is hereby granted, free of charge, to any person obtaining
|
|
||||||
# a copy of this software and associated documentation files (the
|
|
||||||
# "Software"), to deal in the Software without restriction, including
|
|
||||||
# without limitation the rights to use, copy, modify, merge, publish,
|
|
||||||
# distribute, sublicense, and/or sell copies of the Software, and to
|
|
||||||
# permit persons to whom the Software is furnished to do so, subject to
|
|
||||||
# the following conditions:
|
|
||||||
#
|
|
||||||
# The above copyright notice and this permission notice shall be
|
|
||||||
# included in all copies or substantial portions of the Software.
|
|
||||||
#
|
|
||||||
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
|
||||||
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
|
||||||
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
|
||||||
# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
|
||||||
# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
|
||||||
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
|
||||||
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
||||||
|
|
||||||
# C++
|
|
||||||
|
|
||||||
include(CheckCXXCompilerFlag)
|
|
||||||
|
|
||||||
if(CMAKE_COMPILER_IS_GNUCC OR CMAKE_COMPILER_IS_GNUCXX OR CMAKE_CXX_COMPILER_ID MATCHES "Clang")
|
|
||||||
|
|
||||||
# https://clang.llvm.org/docs/DiagnosticsReference.html
|
|
||||||
# https://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html
|
|
||||||
|
|
||||||
# WPICKY_ENABLE = Options we want to enable as-is.
|
|
||||||
# WPICKY_DETECT = Options we want to test first and enable if available.
|
|
||||||
|
|
||||||
set(WPICKY_ENABLE "-Wall")
|
|
||||||
|
|
||||||
# ----------------------------------
|
|
||||||
# Add new options here, if in doubt:
|
|
||||||
# ----------------------------------
|
|
||||||
set(WPICKY_DETECT
|
|
||||||
)
|
|
||||||
|
|
||||||
# Assume these options always exist with both clang and gcc.
|
|
||||||
# Require clang 3.0 / gcc 2.95 or later.
|
|
||||||
list(APPEND WPICKY_ENABLE
|
|
||||||
)
|
|
||||||
|
|
||||||
# Always enable with clang, version dependent with gcc
|
|
||||||
set(WPICKY_COMMON_OLD
|
|
||||||
-Wformat-security # clang 3.0 gcc 4.1
|
|
||||||
)
|
|
||||||
|
|
||||||
set(WPICKY_COMMON
|
|
||||||
)
|
|
||||||
|
|
||||||
if(CMAKE_CXX_COMPILER_ID MATCHES "Clang")
|
|
||||||
list(APPEND WPICKY_ENABLE
|
|
||||||
${WPICKY_COMMON_OLD}
|
|
||||||
)
|
|
||||||
list(APPEND WPICKY_ENABLE
|
|
||||||
# clang++-18 warns this when building with wolfSSL >= v5.7.6-stable.
|
|
||||||
-Wno-extern-c-compat
|
|
||||||
)
|
|
||||||
# Enable based on compiler version
|
|
||||||
if((CMAKE_CXX_COMPILER_ID STREQUAL "Clang" AND NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 3.6) OR
|
|
||||||
(CMAKE_CXX_COMPILER_ID STREQUAL "AppleClang" AND NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 6.3))
|
|
||||||
list(APPEND WPICKY_ENABLE
|
|
||||||
${WPICKY_COMMON}
|
|
||||||
)
|
|
||||||
endif()
|
|
||||||
if((CMAKE_CXX_COMPILER_ID STREQUAL "Clang" AND NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 3.9) OR
|
|
||||||
(CMAKE_CXX_COMPILER_ID STREQUAL "AppleClang" AND NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 8.3))
|
|
||||||
list(APPEND WPICKY_ENABLE
|
|
||||||
)
|
|
||||||
endif()
|
|
||||||
if((CMAKE_CXX_COMPILER_ID STREQUAL "Clang" AND NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 5.0) OR
|
|
||||||
(CMAKE_CXX_COMPILER_ID STREQUAL "AppleClang" AND NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 9.4))
|
|
||||||
list(APPEND WPICKY_ENABLE
|
|
||||||
)
|
|
||||||
endif()
|
|
||||||
if((CMAKE_CXX_COMPILER_ID STREQUAL "Clang" AND NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 7.0) OR
|
|
||||||
(CMAKE_CXX_COMPILER_ID STREQUAL "AppleClang" AND NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 10.3))
|
|
||||||
list(APPEND WPICKY_ENABLE
|
|
||||||
)
|
|
||||||
endif()
|
|
||||||
else() # gcc
|
|
||||||
list(APPEND WPICKY_DETECT
|
|
||||||
${WPICKY_COMMON}
|
|
||||||
)
|
|
||||||
# Enable based on compiler version
|
|
||||||
if(NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 4.3)
|
|
||||||
list(APPEND WPICKY_ENABLE
|
|
||||||
${WPICKY_COMMON_OLD}
|
|
||||||
)
|
|
||||||
endif()
|
|
||||||
endif()
|
|
||||||
|
|
||||||
#
|
|
||||||
|
|
||||||
unset(_wpicky)
|
|
||||||
|
|
||||||
foreach(_CCOPT IN LISTS WPICKY_ENABLE)
|
|
||||||
set(_wpicky "${_wpicky} ${_CCOPT}")
|
|
||||||
endforeach()
|
|
||||||
|
|
||||||
foreach(_CCOPT IN LISTS WPICKY_DETECT)
|
|
||||||
# surprisingly, CHECK_CXX_COMPILER_FLAG needs a new variable to store each new
|
|
||||||
# test result in.
|
|
||||||
string(MAKE_C_IDENTIFIER "OPT${_CCOPT}" _optvarname)
|
|
||||||
# GCC only warns about unknown -Wno- options if there are also other diagnostic messages,
|
|
||||||
# so test for the positive form instead
|
|
||||||
string(REPLACE "-Wno-" "-W" _CCOPT_ON "${_CCOPT}")
|
|
||||||
check_cxx_compiler_flag(${_CCOPT_ON} ${_optvarname})
|
|
||||||
if(${_optvarname})
|
|
||||||
set(_wpicky "${_wpicky} ${_CCOPT}")
|
|
||||||
endif()
|
|
||||||
endforeach()
|
|
||||||
|
|
||||||
set(WARNCXXFLAGS "${WARNCXXFLAGS} ${_wpicky}")
|
|
||||||
endif()
|
|
||||||
@@ -4,8 +4,8 @@
|
|||||||
/* Define to `int' if <sys/types.h> does not define. */
|
/* Define to `int' if <sys/types.h> does not define. */
|
||||||
#cmakedefine ssize_t @ssize_t@
|
#cmakedefine ssize_t @ssize_t@
|
||||||
|
|
||||||
/* Define to 1 if you have the `std::chrono::time_zone`. */
|
/* Define to 1 if you have the `std::map::emplace`. */
|
||||||
#cmakedefine HAVE_STD_CHRONO_TIME_ZONE 1
|
#cmakedefine HAVE_STD_MAP_EMPLACE 1
|
||||||
|
|
||||||
/* Define to 1 if you have `libjansson` library. */
|
/* Define to 1 if you have `libjansson` library. */
|
||||||
#cmakedefine HAVE_JANSSON 1
|
#cmakedefine HAVE_JANSSON 1
|
||||||
@@ -19,30 +19,24 @@
|
|||||||
/* Define to 1 if you have `neverbleed` library. */
|
/* Define to 1 if you have `neverbleed` library. */
|
||||||
#cmakedefine HAVE_NEVERBLEED 1
|
#cmakedefine HAVE_NEVERBLEED 1
|
||||||
|
|
||||||
|
/* sizeof(int *) */
|
||||||
|
#cmakedefine SIZEOF_INT_P @SIZEOF_INT_P@
|
||||||
|
|
||||||
|
/* sizeof(time_t) */
|
||||||
|
#cmakedefine SIZEOF_TIME_T @SIZEOF_TIME_T@
|
||||||
|
|
||||||
/* Define to 1 if you have the `_Exit` function. */
|
/* Define to 1 if you have the `_Exit` function. */
|
||||||
#cmakedefine HAVE__EXIT 1
|
#cmakedefine HAVE__EXIT 1
|
||||||
|
|
||||||
/* Define to 1 if you have the `accept4` function. */
|
/* Define to 1 if you have the `accept4` function. */
|
||||||
#cmakedefine HAVE_ACCEPT4 1
|
#cmakedefine HAVE_ACCEPT4 1
|
||||||
|
|
||||||
/* Define to 1 if you have the `clock_gettime` function. */
|
|
||||||
#cmakedefine HAVE_CLOCK_GETTIME 1
|
|
||||||
|
|
||||||
/* Define to 1 if you have the `mkostemp` function. */
|
/* Define to 1 if you have the `mkostemp` function. */
|
||||||
#cmakedefine HAVE_MKOSTEMP 1
|
#cmakedefine HAVE_MKOSTEMP 1
|
||||||
|
|
||||||
/* Define to 1 if you have the `pipe2` function. */
|
|
||||||
#cmakedefine HAVE_PIPE2 1
|
|
||||||
|
|
||||||
/* Define to 1 if you have the `GetTickCount64` function. */
|
|
||||||
#cmakedefine HAVE_GETTICKCOUNT64 1
|
|
||||||
|
|
||||||
/* Define to 1 if you have the `initgroups` function. */
|
/* Define to 1 if you have the `initgroups` function. */
|
||||||
#cmakedefine01 HAVE_DECL_INITGROUPS
|
#cmakedefine01 HAVE_DECL_INITGROUPS
|
||||||
|
|
||||||
/* Define to 1 if you have the `CLOCK_MONOTONIC` defined. */
|
|
||||||
#cmakedefine01 HAVE_DECL_CLOCK_MONOTONIC
|
|
||||||
|
|
||||||
/* Define to 1 to enable debug output. */
|
/* Define to 1 to enable debug output. */
|
||||||
#cmakedefine DEBUGBUILD 1
|
#cmakedefine DEBUGBUILD 1
|
||||||
|
|
||||||
@@ -67,9 +61,6 @@
|
|||||||
/* Define to 1 if you have the <netinet/in.h> header file. */
|
/* Define to 1 if you have the <netinet/in.h> header file. */
|
||||||
#cmakedefine HAVE_NETINET_IN_H 1
|
#cmakedefine HAVE_NETINET_IN_H 1
|
||||||
|
|
||||||
/* Define to 1 if you have the <netinet/ip.h> header file. */
|
|
||||||
#cmakedefine HAVE_NETINET_IP_H 1
|
|
||||||
|
|
||||||
/* Define to 1 if you have the <pwd.h> header file. */
|
/* Define to 1 if you have the <pwd.h> header file. */
|
||||||
#cmakedefine HAVE_PWD_H 1
|
#cmakedefine HAVE_PWD_H 1
|
||||||
|
|
||||||
@@ -82,12 +73,12 @@
|
|||||||
/* Define to 1 if you have the <syslog.h> header file. */
|
/* Define to 1 if you have the <syslog.h> header file. */
|
||||||
#cmakedefine HAVE_SYSLOG_H 1
|
#cmakedefine HAVE_SYSLOG_H 1
|
||||||
|
|
||||||
|
/* Define to 1 if you have the <time.h> header file. */
|
||||||
|
#cmakedefine HAVE_TIME_H 1
|
||||||
|
|
||||||
/* Define to 1 if you have the <unistd.h> header file. */
|
/* Define to 1 if you have the <unistd.h> header file. */
|
||||||
#cmakedefine HAVE_UNISTD_H 1
|
#cmakedefine HAVE_UNISTD_H 1
|
||||||
|
|
||||||
/* Define to 1 if you have the <windows.h> header file. */
|
|
||||||
#cmakedefine HAVE_WINDOWS_H 1
|
|
||||||
|
|
||||||
/* Define to 1 if HTTP/3 is enabled. */
|
/* Define to 1 if HTTP/3 is enabled. */
|
||||||
#cmakedefine ENABLE_HTTP3 1
|
#cmakedefine ENABLE_HTTP3 1
|
||||||
|
|
||||||
@@ -96,21 +87,3 @@
|
|||||||
|
|
||||||
/* Define to 1 if you have enum bpf_stats_type in linux/bpf.h. */
|
/* Define to 1 if you have enum bpf_stats_type in linux/bpf.h. */
|
||||||
#cmakedefine HAVE_BPF_STATS_TYPE 1
|
#cmakedefine HAVE_BPF_STATS_TYPE 1
|
||||||
|
|
||||||
/* Define to 1 if you have `libngtcp2_crypto_quictls` library. */
|
|
||||||
#cmakedefine HAVE_LIBNGTCP2_CRYPTO_QUICTLS
|
|
||||||
|
|
||||||
/* Define to 1 if you have `libngtcp2_crypto_libressl` library. */
|
|
||||||
#cmakedefine HAVE_LIBNGTCP2_CRYPTO_LIBRESSL
|
|
||||||
|
|
||||||
/* Define to 1 if you have `libngtcp2_crypto_wolfssl` library. */
|
|
||||||
#cmakedefine HAVE_LIBNGTCP2_CRYPTO_WOLFSSL 1
|
|
||||||
|
|
||||||
/* Define to 1 if you have `libev` library. */
|
|
||||||
#cmakedefine HAVE_LIBEV 1
|
|
||||||
|
|
||||||
/* Define to 1 if you have `libbrotlienc` and `libbrotlidec` libraries. */
|
|
||||||
#cmakedefine HAVE_LIBBROTLI 1
|
|
||||||
|
|
||||||
/* Define to 1 if you have `wolfssl` library. */
|
|
||||||
#cmakedefine HAVE_WOLFSSL 1
|
|
||||||
|
|||||||
600
configure.ac
600
configure.ac
@@ -22,10 +22,10 @@ dnl OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
|||||||
dnl WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
dnl WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
|
|
||||||
dnl Do not change user variables!
|
dnl Do not change user variables!
|
||||||
dnl https://www.gnu.org/software/automake/manual/html_node/Flag-Variables-Ordering.html
|
dnl http://www.gnu.org/software/automake/manual/html_node/Flag-Variables-Ordering.html
|
||||||
|
|
||||||
AC_PREREQ(2.61)
|
AC_PREREQ(2.61)
|
||||||
AC_INIT([nghttp2], [1.69.0-DEV], [t-tujikawa@users.sourceforge.net])
|
AC_INIT([nghttp2], [1.45.1], [t-tujikawa@users.sourceforge.net])
|
||||||
AC_CONFIG_AUX_DIR([.])
|
AC_CONFIG_AUX_DIR([.])
|
||||||
AC_CONFIG_MACRO_DIR([m4])
|
AC_CONFIG_MACRO_DIR([m4])
|
||||||
AC_CONFIG_HEADERS([config.h])
|
AC_CONFIG_HEADERS([config.h])
|
||||||
@@ -38,15 +38,15 @@ AC_CANONICAL_BUILD
|
|||||||
AC_CANONICAL_HOST
|
AC_CANONICAL_HOST
|
||||||
AC_CANONICAL_TARGET
|
AC_CANONICAL_TARGET
|
||||||
|
|
||||||
AM_INIT_AUTOMAKE([subdir-objects tar-pax])
|
AM_INIT_AUTOMAKE([subdir-objects])
|
||||||
|
|
||||||
m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])
|
m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])
|
||||||
|
|
||||||
dnl See versioning rule:
|
dnl See versioning rule:
|
||||||
dnl https://www.gnu.org/software/libtool/manual/html_node/Updating-version-info.html
|
dnl https://www.gnu.org/software/libtool/manual/html_node/Updating-version-info.html
|
||||||
AC_SUBST(LT_CURRENT, 43)
|
AC_SUBST(LT_CURRENT, 35)
|
||||||
AC_SUBST(LT_REVISION, 2)
|
AC_SUBST(LT_REVISION, 0)
|
||||||
AC_SUBST(LT_AGE, 29)
|
AC_SUBST(LT_AGE, 21)
|
||||||
|
|
||||||
major=`echo $PACKAGE_VERSION |cut -d. -f1 | sed -e "s/[^0-9]//g"`
|
major=`echo $PACKAGE_VERSION |cut -d. -f1 | sed -e "s/[^0-9]//g"`
|
||||||
minor=`echo $PACKAGE_VERSION |cut -d. -f2 | sed -e "s/[^0-9]//g"`
|
minor=`echo $PACKAGE_VERSION |cut -d. -f2 | sed -e "s/[^0-9]//g"`
|
||||||
@@ -82,11 +82,21 @@ AC_ARG_ENABLE([hpack-tools],
|
|||||||
[Build HPACK tools [default=check]])],
|
[Build HPACK tools [default=check]])],
|
||||||
[request_hpack_tools=$enableval], [request_hpack_tools=check])
|
[request_hpack_tools=$enableval], [request_hpack_tools=check])
|
||||||
|
|
||||||
|
AC_ARG_ENABLE([asio-lib],
|
||||||
|
[AS_HELP_STRING([--enable-asio-lib],
|
||||||
|
[Build C++ libnghttp2_asio library [default=no]])],
|
||||||
|
[request_asio_lib=$enableval], [request_asio_lib=no])
|
||||||
|
|
||||||
AC_ARG_ENABLE([examples],
|
AC_ARG_ENABLE([examples],
|
||||||
[AS_HELP_STRING([--enable-examples],
|
[AS_HELP_STRING([--enable-examples],
|
||||||
[Build examples [default=check]])],
|
[Build examples [default=check]])],
|
||||||
[request_examples=$enableval], [request_examples=check])
|
[request_examples=$enableval], [request_examples=check])
|
||||||
|
|
||||||
|
AC_ARG_ENABLE([python-bindings],
|
||||||
|
[AS_HELP_STRING([--enable-python-bindings],
|
||||||
|
[Build Python bindings [default=check]])],
|
||||||
|
[request_python_bindings=$enableval], [request_python_bindings=check])
|
||||||
|
|
||||||
AC_ARG_ENABLE([failmalloc],
|
AC_ARG_ENABLE([failmalloc],
|
||||||
[AS_HELP_STRING([--disable-failmalloc],
|
[AS_HELP_STRING([--disable-failmalloc],
|
||||||
[Do not build failmalloc test program])],
|
[Do not build failmalloc test program])],
|
||||||
@@ -94,7 +104,7 @@ AC_ARG_ENABLE([failmalloc],
|
|||||||
|
|
||||||
AC_ARG_ENABLE([lib-only],
|
AC_ARG_ENABLE([lib-only],
|
||||||
[AS_HELP_STRING([--enable-lib-only],
|
[AS_HELP_STRING([--enable-lib-only],
|
||||||
[Build libnghttp2 only. This is a short hand for --disable-app --disable-examples --disable-hpack-tools])],
|
[Build libnghttp2 only. This is a short hand for --disable-app --disable-examples --disable-hpack-tools --disable-python-bindings])],
|
||||||
[request_lib_only=$enableval], [request_lib_only=no])
|
[request_lib_only=$enableval], [request_lib_only=no])
|
||||||
|
|
||||||
AC_ARG_ENABLE([http3],
|
AC_ARG_ENABLE([http3],
|
||||||
@@ -127,11 +137,6 @@ AC_ARG_WITH([libcares],
|
|||||||
[Use libc-ares [default=check]])],
|
[Use libc-ares [default=check]])],
|
||||||
[request_libcares=$withval], [request_libcares=check])
|
[request_libcares=$withval], [request_libcares=check])
|
||||||
|
|
||||||
AC_ARG_WITH([wolfssl],
|
|
||||||
[AS_HELP_STRING([--with-wolfssl],
|
|
||||||
[Use wolfSSL [default=check]])],
|
|
||||||
[request_wolfssl=$withval], [request_wolfssl=check])
|
|
||||||
|
|
||||||
AC_ARG_WITH([openssl],
|
AC_ARG_WITH([openssl],
|
||||||
[AS_HELP_STRING([--with-openssl],
|
[AS_HELP_STRING([--with-openssl],
|
||||||
[Use openssl [default=check]])],
|
[Use openssl [default=check]])],
|
||||||
@@ -142,6 +147,11 @@ AC_ARG_WITH([libev],
|
|||||||
[Use libev [default=check]])],
|
[Use libev [default=check]])],
|
||||||
[request_libev=$withval], [request_libev=check])
|
[request_libev=$withval], [request_libev=check])
|
||||||
|
|
||||||
|
AC_ARG_WITH([cunit],
|
||||||
|
[AS_HELP_STRING([--with-cunit],
|
||||||
|
[Use cunit [default=check]])],
|
||||||
|
[request_cunit=$withval], [request_cunit=check])
|
||||||
|
|
||||||
AC_ARG_WITH([jemalloc],
|
AC_ARG_WITH([jemalloc],
|
||||||
[AS_HELP_STRING([--with-jemalloc],
|
[AS_HELP_STRING([--with-jemalloc],
|
||||||
[Use jemalloc [default=check]])],
|
[Use jemalloc [default=check]])],
|
||||||
@@ -162,6 +172,11 @@ AC_ARG_WITH([neverbleed],
|
|||||||
[Use neverbleed [default=no]])],
|
[Use neverbleed [default=no]])],
|
||||||
[request_neverbleed=$withval], [request_neverbleed=no])
|
[request_neverbleed=$withval], [request_neverbleed=no])
|
||||||
|
|
||||||
|
AC_ARG_WITH([cython],
|
||||||
|
[AS_HELP_STRING([--with-cython=PATH],
|
||||||
|
[Use cython in given PATH])],
|
||||||
|
[cython_path=$withval], [])
|
||||||
|
|
||||||
AC_ARG_WITH([libngtcp2],
|
AC_ARG_WITH([libngtcp2],
|
||||||
[AS_HELP_STRING([--with-libngtcp2],
|
[AS_HELP_STRING([--with-libngtcp2],
|
||||||
[Use libngtcp2 [default=check]])],
|
[Use libngtcp2 [default=check]])],
|
||||||
@@ -177,17 +192,9 @@ AC_ARG_WITH([libbpf],
|
|||||||
[Use libbpf [default=no]])],
|
[Use libbpf [default=no]])],
|
||||||
[request_libbpf=$withval], [request_libbpf=no])
|
[request_libbpf=$withval], [request_libbpf=no])
|
||||||
|
|
||||||
AC_ARG_WITH([libbrotlienc],
|
|
||||||
[AS_HELP_STRING([--with-libbrotlienc],
|
|
||||||
[Use libbrotlienc [default=no]])],
|
|
||||||
[request_libbrotlienc=$withval], [request_libbrotlienc=no])
|
|
||||||
|
|
||||||
AC_ARG_WITH([libbrotlidec],
|
|
||||||
[AS_HELP_STRING([--with-libbrotlidec],
|
|
||||||
[Use libbrotlidec [default=no]])],
|
|
||||||
[request_libbrotlidec=$withval], [request_libbrotlidec=no])
|
|
||||||
|
|
||||||
dnl Define variables
|
dnl Define variables
|
||||||
|
AC_ARG_VAR([CYTHON], [the Cython executable])
|
||||||
|
|
||||||
AC_ARG_VAR([LIBEV_CFLAGS], [C compiler flags for libev, skipping any checks])
|
AC_ARG_VAR([LIBEV_CFLAGS], [C compiler flags for libev, skipping any checks])
|
||||||
AC_ARG_VAR([LIBEV_LIBS], [linker flags for libev, skipping any checks])
|
AC_ARG_VAR([LIBEV_LIBS], [linker flags for libev, skipping any checks])
|
||||||
|
|
||||||
@@ -217,21 +224,18 @@ if [test "x$request_lib_only" = "xyes"]; then
|
|||||||
request_app=no
|
request_app=no
|
||||||
request_hpack_tools=no
|
request_hpack_tools=no
|
||||||
request_examples=no
|
request_examples=no
|
||||||
request_http3=no
|
request_python_bindings=no
|
||||||
request_libxml2=no
|
fi
|
||||||
request_jansson=no
|
|
||||||
request_zlib=no
|
if [test "x$request_python_bindings" != "xno"]; then
|
||||||
request_libevent_openssl=no
|
AX_PYTHON_DEVEL([>= '3.8'])
|
||||||
request_libcares=no
|
fi
|
||||||
request_openssl=no
|
|
||||||
request_libev=no
|
if test "x${cython_path}" = "x"; then
|
||||||
request_jemalloc=no
|
AC_CHECK_PROGS([CYTHON], [cython.py cython])
|
||||||
request_systemd=no
|
else
|
||||||
request_mruby=no
|
CYTHON=${cython_path}
|
||||||
request_neverbleed=no
|
AC_SUBST([CYTHON])
|
||||||
request_libngtcp2=no
|
|
||||||
request_libnghttp3=no
|
|
||||||
request_libbpf=no
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if test "x$GCC" = "xyes" -o "x$CC" = "xclang" ; then
|
if test "x$GCC" = "xyes" -o "x$CC" = "xclang" ; then
|
||||||
@@ -243,7 +247,7 @@ fi
|
|||||||
save_CXXFLAGS="$CXXFLAGS"
|
save_CXXFLAGS="$CXXFLAGS"
|
||||||
CXXFLAGS=
|
CXXFLAGS=
|
||||||
|
|
||||||
AX_CXX_COMPILE_STDCXX([20], [], [optional])
|
AX_CXX_COMPILE_STDCXX([14], [noext], [optional])
|
||||||
|
|
||||||
CXX1XCXXFLAGS="$CXXFLAGS"
|
CXX1XCXXFLAGS="$CXXFLAGS"
|
||||||
CXXFLAGS="$save_CXXFLAGS"
|
CXXFLAGS="$save_CXXFLAGS"
|
||||||
@@ -272,40 +276,55 @@ std::vector<std::future<int>> v;
|
|||||||
[have_std_future=no
|
[have_std_future=no
|
||||||
AC_MSG_RESULT([no])])
|
AC_MSG_RESULT([no])])
|
||||||
|
|
||||||
# Check that std::atomic<std::shared_ptr<T>> is supported.
|
# Check that std::map::emplace is available for g++-4.7.
|
||||||
AC_MSG_CHECKING([whether std::atomic<std::shared_ptr<T>> is supported])
|
AC_MSG_CHECKING([whether std::map::emplace is available])
|
||||||
|
AC_COMPILE_IFELSE([AC_LANG_PROGRAM(
|
||||||
|
[[
|
||||||
|
#include <map>
|
||||||
|
]],
|
||||||
|
[[
|
||||||
|
std::map<int, int>().emplace(1, 2);
|
||||||
|
]])],
|
||||||
|
[AC_DEFINE([HAVE_STD_MAP_EMPLACE], [1],
|
||||||
|
[Define to 1 if you have the `std::map::emplace`.])
|
||||||
|
have_std_map_emplace=yes
|
||||||
|
AC_MSG_RESULT([yes])],
|
||||||
|
[have_std_map_emplace=no
|
||||||
|
AC_MSG_RESULT([no])])
|
||||||
|
|
||||||
|
# Check that std::atomic_* overloads for std::shared_ptr are
|
||||||
|
# available.
|
||||||
|
AC_MSG_CHECKING([whether std::atomic_* overloads for std::shared_ptr are available])
|
||||||
AC_COMPILE_IFELSE([AC_LANG_PROGRAM(
|
AC_COMPILE_IFELSE([AC_LANG_PROGRAM(
|
||||||
[[
|
[[
|
||||||
#include <memory>
|
#include <memory>
|
||||||
]],
|
]],
|
||||||
[[
|
[[
|
||||||
auto a = std::atomic<std::shared_ptr<int>>(std::make_shared<int>(1000000007));
|
auto a = std::make_shared<int>(1000000007);
|
||||||
auto p = a.load();
|
auto p = std::atomic_load(&a);
|
||||||
++*p;
|
++*p;
|
||||||
a.store(p);
|
std::atomic_store(&a, p);
|
||||||
]])],
|
]])],
|
||||||
[AC_DEFINE([HAVE_ATOMIC_STD_SHARED_PTR], [1],
|
[AC_DEFINE([HAVE_ATOMIC_STD_SHARED_PTR], [1],
|
||||||
[Define to 1 if you have the std::atomic<std::shared_ptr<T>> is supported.])
|
[Define to 1 if you have the std::atomic_* overloads for std::shared_ptr.])
|
||||||
have_atomic_std_shared_ptr=yes
|
have_atomic_std_shared_ptr=yes
|
||||||
AC_MSG_RESULT([yes])],
|
AC_MSG_RESULT([yes])],
|
||||||
[have_atomic_std_shared_ptr=no
|
[have_atomic_std_shared_ptr=no
|
||||||
AC_MSG_RESULT([no])])
|
AC_MSG_RESULT([no])])
|
||||||
|
|
||||||
# Check that std::chrono::time_zone is available.
|
# Check that thread_local storage specifier is available
|
||||||
AC_MSG_CHECKING([whether std::chrono::time_zone is available])
|
AC_MSG_CHECKING([whether thread_local storage class specifier is available.])
|
||||||
AC_COMPILE_IFELSE([AC_LANG_PROGRAM(
|
AC_COMPILE_IFELSE([AC_LANG_PROGRAM(
|
||||||
|
,
|
||||||
[[
|
[[
|
||||||
#include <chrono>
|
thread_local int a = 0;
|
||||||
]],
|
(void)a;
|
||||||
[[
|
|
||||||
auto tz = std::chrono::current_zone();
|
|
||||||
(void)tz;
|
|
||||||
]])],
|
]])],
|
||||||
[AC_DEFINE([HAVE_STD_CHRONO_TIME_ZONE], [1],
|
[AC_DEFINE([HAVE_THREAD_LOCAL], [1],
|
||||||
[Define to 1 if you have the `std::chrono::time_zone`.])
|
[Define to 1 if you have thread_local storage specifier.])
|
||||||
have_std_chrono_time_zone=yes
|
have_thread_local=yes
|
||||||
AC_MSG_RESULT([yes])],
|
AC_MSG_RESULT([yes])],
|
||||||
[have_std_chrono_time_zone=no
|
[have_Thread_local=no
|
||||||
AC_MSG_RESULT([no])])
|
AC_MSG_RESULT([no])])
|
||||||
|
|
||||||
CXXFLAGS=$save_CXXFLAGS
|
CXXFLAGS=$save_CXXFLAGS
|
||||||
@@ -323,8 +342,8 @@ APPLDFLAGS=
|
|||||||
case "$host_os" in
|
case "$host_os" in
|
||||||
*android*)
|
*android*)
|
||||||
android_build=yes
|
android_build=yes
|
||||||
# android does not need -pthread, but needs following 2 libs for C++
|
# android does not need -pthread, but needs followng 3 libs for C++
|
||||||
APPLDFLAGS="$APPLDFLAGS -latomic"
|
APPLDFLAGS="$APPLDFLAGS -lstdc++ -latomic -lsupc++"
|
||||||
;;
|
;;
|
||||||
*)
|
*)
|
||||||
PTHREAD_LDFLAGS="-pthread"
|
PTHREAD_LDFLAGS="-pthread"
|
||||||
@@ -372,6 +391,43 @@ case "${host_os}" in
|
|||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
|
|
||||||
|
# cunit
|
||||||
|
have_cunit=no
|
||||||
|
if test "x${request_cunit}" != "xno"; then
|
||||||
|
PKG_CHECK_MODULES([CUNIT], [cunit >= 2.1], [have_cunit=yes], [have_cunit=no])
|
||||||
|
# If pkg-config does not find cunit, check it using AC_CHECK_LIB. We
|
||||||
|
# do this because Debian (Ubuntu) lacks pkg-config file for cunit.
|
||||||
|
if test "x${have_cunit}" = "xno"; then
|
||||||
|
AC_MSG_WARN([${CUNIT_PKG_ERRORS}])
|
||||||
|
AC_CHECK_LIB([cunit], [CU_initialize_registry],
|
||||||
|
[have_cunit=yes], [have_cunit=no])
|
||||||
|
if test "x${have_cunit}" = "xyes"; then
|
||||||
|
CUNIT_LIBS="-lcunit"
|
||||||
|
CUNIT_CFLAGS=""
|
||||||
|
AC_SUBST([CUNIT_LIBS])
|
||||||
|
AC_SUBST([CUNIT_CFLAGS])
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
if test "x${have_cunit}" = "xyes"; then
|
||||||
|
# cunit in Mac OS X requires ncurses. Note that in Mac OS X, test
|
||||||
|
# program can be built without -lncurses, but it emits runtime
|
||||||
|
# error.
|
||||||
|
case "${build}" in
|
||||||
|
*-apple-darwin*)
|
||||||
|
CUNIT_LIBS="$CUNIT_LIBS -lncurses"
|
||||||
|
AC_SUBST([CUNIT_LIBS])
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
if test "x${request_cunit}" = "xyes" &&
|
||||||
|
test "x${have_cunit}" != "xyes"; then
|
||||||
|
AC_MSG_ERROR([cunit was requested (--with-cunit) but not found])
|
||||||
|
fi
|
||||||
|
|
||||||
|
AM_CONDITIONAL([HAVE_CUNIT], [ test "x${have_cunit}" = "xyes" ])
|
||||||
|
|
||||||
# libev (for src)
|
# libev (for src)
|
||||||
have_libev=no
|
have_libev=no
|
||||||
if test "x${request_libev}" != "xno"; then
|
if test "x${request_libev}" != "xno"; then
|
||||||
@@ -391,10 +447,6 @@ if test "x${request_libev}" != "xno"; then
|
|||||||
else
|
else
|
||||||
have_libev=yes
|
have_libev=yes
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if test "x${have_libev}" = "xyes"; then
|
|
||||||
AC_DEFINE([HAVE_LIBEV], [1], [Define to 1 if you have `libev` library.])
|
|
||||||
fi
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if test "x${request_libev}" = "xyes" &&
|
if test "x${request_libev}" = "xyes" &&
|
||||||
@@ -402,71 +454,32 @@ if test "x${request_libev}" = "xyes" &&
|
|||||||
AC_MSG_ERROR([libev was requested (--with-libev) but not found])
|
AC_MSG_ERROR([libev was requested (--with-libev) but not found])
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if test "x${request_openssl}" = "xyes" &&
|
|
||||||
test "x${request_wolfssl}" = "xyes"; then
|
|
||||||
AC_MSG_ERROR([Requesting both OpenSSL and wolfSSL is not allowed])
|
|
||||||
fi
|
|
||||||
|
|
||||||
# openssl (for src)
|
# openssl (for src)
|
||||||
have_openssl=no
|
have_openssl=no
|
||||||
if test "x${request_openssl}" != "xno" &&
|
if test "x${request_openssl}" != "xno"; then
|
||||||
test "x${request_wolfssl}" != "xyes"; then
|
PKG_CHECK_MODULES([OPENSSL], [openssl >= 1.0.1],
|
||||||
PKG_CHECK_MODULES([OPENSSL], [openssl >= 1.1.1],
|
|
||||||
[have_openssl=yes], [have_openssl=no])
|
[have_openssl=yes], [have_openssl=no])
|
||||||
if test "x${have_openssl}" = "xno"; then
|
if test "x${have_openssl}" = "xno"; then
|
||||||
AC_MSG_NOTICE($OPENSSL_PKG_ERRORS)
|
AC_MSG_NOTICE($OPENSSL_PKG_ERRORS)
|
||||||
else
|
else
|
||||||
# Use C++ compiler because boringssl needs C++ runtime.
|
save_CFLAGS="$CFLAGS"
|
||||||
AC_LANG_PUSH(C++)
|
|
||||||
|
|
||||||
save_CXXFLAGS="$CXXFLAGS"
|
|
||||||
save_LIBS="$LIBS"
|
save_LIBS="$LIBS"
|
||||||
CXXFLAGS="$OPENSSL_CFLAGS $CXXFLAGS"
|
CFLAGS="$OPENSSL_CFLAGS $CFLAGS"
|
||||||
LIBS="$OPENSSL_LIBS $LIBS"
|
LIBS="$OPENSSL_LIBS $LIBS"
|
||||||
|
|
||||||
# quictls/openssl has SSL_provide_quic_data. boringssl also has
|
have_ssl_is_quic=no
|
||||||
# it. We will deal with it later.
|
AC_MSG_CHECKING([for SSL_is_quic])
|
||||||
have_ssl_provide_quic_data=no
|
|
||||||
AC_MSG_CHECKING([for SSL_provide_quic_data])
|
|
||||||
AC_LINK_IFELSE([AC_LANG_PROGRAM([[
|
|
||||||
#include <openssl/ssl.h>
|
|
||||||
]], [[
|
|
||||||
SSL_provide_quic_data(NULL, (ssl_encryption_level_t)0, NULL, 0);
|
|
||||||
]])],
|
|
||||||
[AC_MSG_RESULT([yes]); have_ssl_provide_quic_data=yes],
|
|
||||||
[AC_MSG_RESULT([no]); have_ssl_provide_quic_data=no])
|
|
||||||
|
|
||||||
# Check whether this is libressl or not
|
|
||||||
AC_CHECK_DECLS([LIBRESSL_VERSION_NUMBER],
|
|
||||||
[have_libressl=yes], [have_libressl=no],
|
|
||||||
[[
|
|
||||||
#include <openssl/opensslv.h>
|
|
||||||
]])
|
|
||||||
|
|
||||||
AC_MSG_CHECKING([for SSL_set_quic_tls_cbs])
|
|
||||||
AC_LINK_IFELSE([AC_LANG_PROGRAM([[
|
|
||||||
#include <openssl/ssl.h>
|
|
||||||
]], [[
|
|
||||||
SSL_set_quic_tls_cbs(NULL, NULL, NULL);
|
|
||||||
]])],
|
|
||||||
[AC_MSG_RESULT([yes]); have_ossl_quic=yes],
|
|
||||||
[AC_MSG_RESULT([no]); have_ossl_quic=no])
|
|
||||||
|
|
||||||
# boringssl has SSL_set_quic_early_data_context.
|
|
||||||
AC_MSG_CHECKING([for SSL_set_quic_early_data_context])
|
|
||||||
AC_LINK_IFELSE([AC_LANG_PROGRAM([[
|
AC_LINK_IFELSE([AC_LANG_PROGRAM([[
|
||||||
#include <openssl/ssl.h>
|
#include <openssl/ssl.h>
|
||||||
]], [[
|
]], [[
|
||||||
SSL *ssl = NULL;
|
SSL *ssl = NULL;
|
||||||
SSL_set_quic_early_data_context(ssl, NULL, 0);
|
SSL_is_quic(ssl);
|
||||||
]])],
|
]])],
|
||||||
[AC_MSG_RESULT([yes]); have_boringssl_quic=yes],
|
[AC_MSG_RESULT([yes]); have_ssl_is_quic=yes],
|
||||||
[AC_MSG_RESULT([no]); have_boringssl_quic=no])
|
[AC_MSG_RESULT([no]); have_ssl_is_quic=no])
|
||||||
|
|
||||||
CXXFLAGS="$save_CXXFLAGS"
|
CFLAGS="$save_CFLAGS"
|
||||||
LIBS="$save_LIBS"
|
LIBS="$save_LIBS"
|
||||||
|
|
||||||
AC_LANG_POP()
|
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
@@ -475,49 +488,10 @@ if test "x${request_openssl}" = "xyes" &&
|
|||||||
AC_MSG_ERROR([openssl was requested (--with-openssl) but not found])
|
AC_MSG_ERROR([openssl was requested (--with-openssl) but not found])
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# wolfSSL (for src)
|
|
||||||
have_wolfssl=no
|
|
||||||
if test "x${request_wolfssl}" != "xno" &&
|
|
||||||
test "x${request_openssl}" != "xyes" &&
|
|
||||||
test "x${have_openssl}" != "xyes"; then
|
|
||||||
PKG_CHECK_MODULES([WOLFSSL], [wolfssl >= 5.7.0],
|
|
||||||
[have_wolfssl=yes], [have_wolfssl=no])
|
|
||||||
if test "x${have_wolfssl}" = "xno"; then
|
|
||||||
AC_MSG_NOTICE($WOLFSSL_PKG_ERRORS)
|
|
||||||
else
|
|
||||||
AC_DEFINE([HAVE_WOLFSSL], [1],
|
|
||||||
[Define to 1 if you have 'wolfssl' library.])
|
|
||||||
|
|
||||||
save_CFLAGS="$CFLAGS"
|
|
||||||
save_LIBS="$LIBS"
|
|
||||||
CFLAGS="$WOLFSSL_CFLAGS $CFLAGS"
|
|
||||||
LIBS="$WOLFSSL_LIBS $LIBS"
|
|
||||||
|
|
||||||
have_wolfssl_quic=no
|
|
||||||
AC_MSG_CHECKING([for wolfSSL QUIC])
|
|
||||||
AC_LINK_IFELSE([AC_LANG_PROGRAM([[
|
|
||||||
#include <wolfssl/options.h>
|
|
||||||
#include <wolfssl/openssl/ssl.h>
|
|
||||||
]], [[
|
|
||||||
SSL_provide_quic_data(NULL, 0, NULL, 0);
|
|
||||||
]])],
|
|
||||||
[AC_MSG_RESULT([yes]); have_wolfssl_quic=yes],
|
|
||||||
[AC_MSG_RESULT([no]); have_wolfssl_quic=no])
|
|
||||||
|
|
||||||
CFLAGS="$save_CFLAGS"
|
|
||||||
LIBS="$save_LIBS"
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
if test "x${request_wolfssl}" = "xyes" &&
|
|
||||||
test "x${have_wolfssl}" != "xyes"; then
|
|
||||||
AC_MSG_ERROR([wolfSSL was requested (--with-wolfssl) but not found])
|
|
||||||
fi
|
|
||||||
|
|
||||||
# c-ares (for src)
|
# c-ares (for src)
|
||||||
have_libcares=no
|
have_libcares=no
|
||||||
if test "x${request_libcares}" != "xno"; then
|
if test "x${request_libcares}" != "xno"; then
|
||||||
PKG_CHECK_MODULES([LIBCARES], [libcares >= 1.16.0], [have_libcares=yes],
|
PKG_CHECK_MODULES([LIBCARES], [libcares >= 1.7.5], [have_libcares=yes],
|
||||||
[have_libcares=no])
|
[have_libcares=no])
|
||||||
if test "x${have_libcares}" = "xno"; then
|
if test "x${have_libcares}" = "xno"; then
|
||||||
AC_MSG_NOTICE($LIBCARES_PKG_ERRORS)
|
AC_MSG_NOTICE($LIBCARES_PKG_ERRORS)
|
||||||
@@ -532,7 +506,7 @@ fi
|
|||||||
# ngtcp2 (for src)
|
# ngtcp2 (for src)
|
||||||
have_libngtcp2=no
|
have_libngtcp2=no
|
||||||
if test "x${request_libngtcp2}" != "xno"; then
|
if test "x${request_libngtcp2}" != "xno"; then
|
||||||
PKG_CHECK_MODULES([LIBNGTCP2], [libngtcp2 >= 1.16.0], [have_libngtcp2=yes],
|
PKG_CHECK_MODULES([LIBNGTCP2], [libngtcp2 >= 0.0.0], [have_libngtcp2=yes],
|
||||||
[have_libngtcp2=no])
|
[have_libngtcp2=no])
|
||||||
if test "x${have_libngtcp2}" = "xno"; then
|
if test "x${have_libngtcp2}" = "xno"; then
|
||||||
AC_MSG_NOTICE($LIBNGTCP2_PKG_ERRORS)
|
AC_MSG_NOTICE($LIBNGTCP2_PKG_ERRORS)
|
||||||
@@ -544,126 +518,27 @@ if test "x${request_libngtcp2}" = "xyes" &&
|
|||||||
AC_MSG_ERROR([libngtcp2 was requested (--with-libngtcp2) but not found])
|
AC_MSG_ERROR([libngtcp2 was requested (--with-libngtcp2) but not found])
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# ngtcp2_crypto_wolfssl (for src)
|
# ngtcp2_crypto_openssl (for src)
|
||||||
have_libngtcp2_crypto_wolfssl=no
|
have_libngtcp2_crypto_openssl=no
|
||||||
if test "x${have_wolfssl_quic}" = "xyes" &&
|
if test "x${request_libngtcp2}" != "xno"; then
|
||||||
test "x${request_libngtcp2}" != "xno"; then
|
PKG_CHECK_MODULES([LIBNGTCP2_CRYPTO_OPENSSL],
|
||||||
PKG_CHECK_MODULES([LIBNGTCP2_CRYPTO_WOLFSSL],
|
[libngtcp2_crypto_openssl >= 0.0.0],
|
||||||
[libngtcp2_crypto_wolfssl >= 1.16.0],
|
[have_libngtcp2_crypto_openssl=yes],
|
||||||
[have_libngtcp2_crypto_wolfssl=yes],
|
[have_libngtcp2_crypto_openssl=no])
|
||||||
[have_libngtcp2_crypto_wolfssl=no])
|
if test "x${have_libngtcp2_crypto_openssl}" = "xno"; then
|
||||||
if test "x${have_libngtcp2_crypto_wolfssl}" = "xno"; then
|
AC_MSG_NOTICE($LIBNGTCP2_CRYPTO_OPENSSL_PKG_ERRORS)
|
||||||
AC_MSG_NOTICE($LIBNGTCP2_CRYPTO_WOLFSSL_PKG_ERRORS)
|
|
||||||
else
|
|
||||||
AC_DEFINE([HAVE_LIBNGTCP2_CRYPTO_WOLFSSL], [1],
|
|
||||||
[Define to 1 if you have `libngtcp2_crypto_wolfssl` library.])
|
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if test "x${have_wolfssl_quic}" = "xyes" &&
|
if test "x${request_libngtcp2}" = "xyes" &&
|
||||||
test "x${request_libngtcp2}" = "xyes" &&
|
test "x${have_libngtcp2_crypto_openssl}" != "xyes"; then
|
||||||
test "x${have_libngtcp2_crypto_wolfssl}" != "xyes"; then
|
AC_MSG_ERROR([libngtcp2_crypto_openssl was requested (--with-libngtcp2) but not found])
|
||||||
AC_MSG_ERROR([libngtcp2_crypto_wolfssl was requested (--with-libngtcp2) but not found])
|
|
||||||
fi
|
|
||||||
|
|
||||||
# ngtcp2_crypto_quictls (for src)
|
|
||||||
have_libngtcp2_crypto_quictls=no
|
|
||||||
if test "x${have_ssl_provide_quic_data}" = "xyes" &&
|
|
||||||
test "x${have_libressl}" != "xyes" &&
|
|
||||||
test "x${have_boringssl_quic}" != "xyes" &&
|
|
||||||
test "x${request_libngtcp2}" != "xno"; then
|
|
||||||
PKG_CHECK_MODULES([LIBNGTCP2_CRYPTO_QUICTLS],
|
|
||||||
[libngtcp2_crypto_quictls >= 1.16.0],
|
|
||||||
[have_libngtcp2_crypto_quictls=yes],
|
|
||||||
[have_libngtcp2_crypto_quictls=no])
|
|
||||||
if test "x${have_libngtcp2_crypto_quictls}" = "xno"; then
|
|
||||||
AC_MSG_NOTICE($LIBNGTCP2_CRYPTO_QUICTLS_PKG_ERRORS)
|
|
||||||
else
|
|
||||||
AC_DEFINE([HAVE_LIBNGTCP2_CRYPTO_QUICTLS], [1],
|
|
||||||
[Define to 1 if you have `libngtcp2_crypto_quictls` library.])
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
if test "x${have_ssl_provide_quic_data}" = "xyes" &&
|
|
||||||
test "x${have_libressl}" != "xyes" &&
|
|
||||||
test "x${have_boringssl_quic}" != "xyes" &&
|
|
||||||
test "x${request_libngtcp2}" = "xyes" &&
|
|
||||||
test "x${have_libngtcp2_crypto_quictls}" != "xyes"; then
|
|
||||||
AC_MSG_ERROR([libngtcp2_crypto_quictls was requested (--with-libngtcp2) but not found])
|
|
||||||
fi
|
|
||||||
|
|
||||||
# ngtcp2_crypto_libressl (for src)
|
|
||||||
have_libngtcp2_crypto_libressl=no
|
|
||||||
if test "x${have_ssl_provide_quic_data}" = "xyes" &&
|
|
||||||
test "x${have_libressl}" = "xyes" &&
|
|
||||||
test "x${request_libngtcp2}" != "xno"; then
|
|
||||||
PKG_CHECK_MODULES([LIBNGTCP2_CRYPTO_LIBRESSL],
|
|
||||||
[libngtcp2_crypto_libressl >= 1.16.0],
|
|
||||||
[have_libngtcp2_crypto_libressl=yes],
|
|
||||||
[have_libngtcp2_crypto_libressl=no])
|
|
||||||
if test "x${have_libngtcp2_crypto_libressl}" = "xno"; then
|
|
||||||
AC_MSG_NOTICE($LIBNGTCP2_CRYPTO_LIBRESSL_PKG_ERRORS)
|
|
||||||
else
|
|
||||||
AC_DEFINE([HAVE_LIBNGTCP2_CRYPTO_LIBRESSL], [1],
|
|
||||||
[Define to 1 if you have `libngtcp2_crypto_libressl` library.])
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
if test "x${have_ssl_provide_quic_data}" = "xyes" &&
|
|
||||||
test "x${have_libressl}" = "xyes" &&
|
|
||||||
test "x${request_libngtcp2}" = "xyes" &&
|
|
||||||
test "x${have_libngtcp2_crypto_libressl}" != "xyes"; then
|
|
||||||
AC_MSG_ERROR([libngtcp2_crypto_libressl was requested (--with-libngtcp2) but not found])
|
|
||||||
fi
|
|
||||||
|
|
||||||
# ngtcp2_crypto_boringssl (for src)
|
|
||||||
have_libngtcp2_crypto_boringssl=no
|
|
||||||
if test "x${have_boringssl_quic}" = "xyes" &&
|
|
||||||
test "x${request_libngtcp2}" != "xno"; then
|
|
||||||
PKG_CHECK_MODULES([LIBNGTCP2_CRYPTO_BORINGSSL],
|
|
||||||
[libngtcp2_crypto_boringssl >= 0.0.0],
|
|
||||||
[have_libngtcp2_crypto_boringssl=yes],
|
|
||||||
[have_libngtcp2_crypto_boringssl=no])
|
|
||||||
if test "x${have_libngtcp2_crypto_boringssl}" = "xno"; then
|
|
||||||
AC_MSG_NOTICE($LIBNGTCP2_CRYPTO_BORINGSSL_PKG_ERRORS)
|
|
||||||
else
|
|
||||||
AC_DEFINE([HAVE_LIBNGTCP2_CRYPTO_BORINGSSL], [1],
|
|
||||||
[Define to 1 if you have `libngtcp2_crypto_boringssl` library.])
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
if test "x${have_boringssl_quic}" = "xyes" &&
|
|
||||||
test "x${request_libngtcp2}" = "xyes" &&
|
|
||||||
test "x${have_libngtcp2_crypto_boringssl}" != "xyes"; then
|
|
||||||
AC_MSG_ERROR([libngtcp2_crypto_boringssl was requested (--with-libngtcp2) but not found])
|
|
||||||
fi
|
|
||||||
|
|
||||||
# ngtcp2_crypto_ossl (for src)
|
|
||||||
have_libngtcp2_crypto_ossl=no
|
|
||||||
if test "x${have_ossl_quic}" = "xyes" &&
|
|
||||||
test "x${request_libngtcp2}" != "xno"; then
|
|
||||||
PKG_CHECK_MODULES([LIBNGTCP2_CRYPTO_OSSL],
|
|
||||||
[libngtcp2_crypto_ossl >= 1.16.0],
|
|
||||||
[have_libngtcp2_crypto_ossl=yes],
|
|
||||||
[have_libngtcp2_crypto_ossl=no])
|
|
||||||
if test "x${have_libngtcp2_crypto_ossl}" = "xno"; then
|
|
||||||
AC_MSG_NOTICE($LIBNGTCP2_CRYPTO_OSSL_PKG_ERRORS)
|
|
||||||
else
|
|
||||||
AC_DEFINE([HAVE_LIBNGTCP2_CRYPTO_OSSL], [1],
|
|
||||||
[Define to 1 if you have `libngtcp2_crypto_ossl` library.])
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
if test "x${have_ossl_quic}" = "xyes" &&
|
|
||||||
test "x${request_libngtcp2}" = "xyes" &&
|
|
||||||
test "x${have_libngtcp2_crypto_ossl}" != "xyes"; then
|
|
||||||
AC_MSG_ERROR([libngtcp2_crypto_ossl was requested (--with-libngtcp2) but not found])
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# nghttp3 (for src)
|
# nghttp3 (for src)
|
||||||
have_libnghttp3=no
|
have_libnghttp3=no
|
||||||
if test "x${request_libnghttp3}" != "xno"; then
|
if test "x${request_libnghttp3}" != "xno"; then
|
||||||
PKG_CHECK_MODULES([LIBNGHTTP3], [libnghttp3 >= 1.12.0], [have_libnghttp3=yes],
|
PKG_CHECK_MODULES([LIBNGHTTP3], [libnghttp3 >= 0.0.0], [have_libnghttp3=yes],
|
||||||
[have_libnghttp3=no])
|
[have_libnghttp3=no])
|
||||||
if test "x${have_libnghttp3}" = "xno"; then
|
if test "x${have_libnghttp3}" = "xno"; then
|
||||||
AC_MSG_NOTICE($LIBNGHTTP3_PKG_ERRORS)
|
AC_MSG_NOTICE($LIBNGHTTP3_PKG_ERRORS)
|
||||||
@@ -678,7 +553,7 @@ fi
|
|||||||
# libbpf (for src)
|
# libbpf (for src)
|
||||||
have_libbpf=no
|
have_libbpf=no
|
||||||
if test "x${request_libbpf}" != "xno"; then
|
if test "x${request_libbpf}" != "xno"; then
|
||||||
PKG_CHECK_MODULES([LIBBPF], [libbpf >= 0.7.0], [have_libbpf=yes],
|
PKG_CHECK_MODULES([LIBBPF], [libbpf >= 0.4.0], [have_libbpf=yes],
|
||||||
[have_libbpf=no])
|
[have_libbpf=no])
|
||||||
if test "x${have_libbpf}" = "xyes"; then
|
if test "x${have_libbpf}" = "xyes"; then
|
||||||
AC_DEFINE([HAVE_LIBBPF], [1], [Define to 1 if you have `libbpf` library.])
|
AC_DEFINE([HAVE_LIBBPF], [1], [Define to 1 if you have `libbpf` library.])
|
||||||
@@ -720,47 +595,6 @@ fi
|
|||||||
|
|
||||||
AM_CONDITIONAL([HAVE_LIBBPF], [ test "x${have_libbpf}" = "xyes" ])
|
AM_CONDITIONAL([HAVE_LIBBPF], [ test "x${have_libbpf}" = "xyes" ])
|
||||||
|
|
||||||
# libbrotlienc (for src)
|
|
||||||
have_libbrotlienc=no
|
|
||||||
if test "x${request_libbrotlienc}" != "xno"; then
|
|
||||||
PKG_CHECK_MODULES([LIBBROTLIENC], [libbrotlienc >= 1.0.9],
|
|
||||||
[have_libbrotlienc=yes],
|
|
||||||
[have_libbrotlienc=no])
|
|
||||||
if test "x${have_libbrotlienc}" = "xno"; then
|
|
||||||
AC_MSG_NOTICE($LIBBROTLIENC_PKG_ERRORS)
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
if test "x${request_libbrotlienc}" = "xyes" &&
|
|
||||||
test "x${have_libbrotlienc}" != "xyes"; then
|
|
||||||
AC_MSG_ERROR([libbrotlienc was requested (--with-libbrotlienc) but not found])
|
|
||||||
fi
|
|
||||||
|
|
||||||
# libbrotlidec (for src)
|
|
||||||
have_libbrotlidec=no
|
|
||||||
if test "x${request_libbrotlidec}" != "xno"; then
|
|
||||||
PKG_CHECK_MODULES([LIBBROTLIDEC], [libbrotlidec >= 1.0.9],
|
|
||||||
[have_libbrotlidec=yes],
|
|
||||||
[have_libbrotlidec=no])
|
|
||||||
if test "x${have_libbrotlidec}" = "xno"; then
|
|
||||||
AC_MSG_NOTICE($LIBBROTLIDEC_PKG_ERRORS)
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
if test "x${request_libbrotlidec}" = "xyes" &&
|
|
||||||
test "x${have_libbrotlidec}" != "xyes"; then
|
|
||||||
AC_MSG_ERROR([libbrotlidec was requested (--with-libbrotlidec) but not found])
|
|
||||||
fi
|
|
||||||
|
|
||||||
have_libbrotli=no
|
|
||||||
if test "x${have_libbrotlienc}" = "xyes" &&
|
|
||||||
test "x${have_libbrotlidec}" = "xyes"; then
|
|
||||||
have_libbrotli=yes
|
|
||||||
|
|
||||||
AC_DEFINE([HAVE_LIBBROTLI], [1],
|
|
||||||
[Define to 1 if you have `libbrotlienc` and `libbrotlidec` libraries.])
|
|
||||||
fi
|
|
||||||
|
|
||||||
# libevent_openssl (for examples)
|
# libevent_openssl (for examples)
|
||||||
# 2.0.8 is required because we use evconnlistener_set_error_cb()
|
# 2.0.8 is required because we use evconnlistener_set_error_cb()
|
||||||
have_libevent_openssl=no
|
have_libevent_openssl=no
|
||||||
@@ -868,12 +702,31 @@ if test "x${request_jemalloc}" = "xyes" &&
|
|||||||
AC_MSG_ERROR([jemalloc was requested (--with-jemalloc) but not found])
|
AC_MSG_ERROR([jemalloc was requested (--with-jemalloc) but not found])
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
# Check Boost Asio library
|
||||||
|
have_asio_lib=no
|
||||||
|
|
||||||
|
if test "x${request_asio_lib}" = "xyes"; then
|
||||||
|
AX_BOOST_BASE([1.54.0], [have_boost_base=yes], [have_boost_base=no])
|
||||||
|
|
||||||
|
if test "x${have_boost_base}" = "xyes"; then
|
||||||
|
AX_BOOST_ASIO()
|
||||||
|
AX_BOOST_SYSTEM()
|
||||||
|
AX_BOOST_THREAD()
|
||||||
|
|
||||||
|
if test "x${ax_cv_boost_asio}" = "xyes" &&
|
||||||
|
test "x${ax_cv_boost_system}" = "xyes" &&
|
||||||
|
test "x${ax_cv_boost_thread}" = "xyes"; then
|
||||||
|
have_asio_lib=yes
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
# The nghttp, nghttpd and nghttpx under src depend on zlib, OpenSSL,
|
# The nghttp, nghttpd and nghttpx under src depend on zlib, OpenSSL,
|
||||||
# libev, and libc-ares.
|
# libev, and libc-ares.
|
||||||
enable_app=no
|
enable_app=no
|
||||||
if test "x${request_app}" != "xno" &&
|
if test "x${request_app}" != "xno" &&
|
||||||
test "x${have_zlib}" = "xyes" &&
|
test "x${have_zlib}" = "xyes" &&
|
||||||
(test "x${have_openssl}" = "xyes" || test "x${have_wolfssl}" = "xyes") &&
|
test "x${have_openssl}" = "xyes" &&
|
||||||
test "x${have_libev}" = "xyes" &&
|
test "x${have_libev}" = "xyes" &&
|
||||||
test "x${have_libcares}" = "xyes"; then
|
test "x${have_libcares}" = "xyes"; then
|
||||||
enable_app=yes
|
enable_app=yes
|
||||||
@@ -889,12 +742,9 @@ AM_CONDITIONAL([ENABLE_APP], [ test "x${enable_app}" = "xyes" ])
|
|||||||
# Check HTTP/3 support
|
# Check HTTP/3 support
|
||||||
enable_http3=no
|
enable_http3=no
|
||||||
if test "x${request_http3}" != "xno" &&
|
if test "x${request_http3}" != "xno" &&
|
||||||
|
test "x${have_ssl_is_quic}" = "xyes" &&
|
||||||
test "x${have_libngtcp2}" = "xyes" &&
|
test "x${have_libngtcp2}" = "xyes" &&
|
||||||
(test "x${have_libngtcp2_crypto_wolfssl}" = "xyes" ||
|
test "x${have_libngtcp2_crypto_openssl}" = "xyes" &&
|
||||||
test "x${have_libngtcp2_crypto_quictls}" = "xyes" ||
|
|
||||||
test "x${have_libngtcp2_crypto_libressl}" = "xyes" ||
|
|
||||||
test "x${have_libngtcp2_crypto_boringssl}" = "xyes" ||
|
|
||||||
test "x${have_libngtcp2_crypto_ossl}" = "xyes") &&
|
|
||||||
test "x${have_libnghttp3}" = "xyes"; then
|
test "x${have_libnghttp3}" = "xyes"; then
|
||||||
enable_http3=yes
|
enable_http3=yes
|
||||||
AC_DEFINE([ENABLE_HTTP3], [1], [Define to 1 if HTTP/3 is enabled.])
|
AC_DEFINE([ENABLE_HTTP3], [1], [Define to 1 if HTTP/3 is enabled.])
|
||||||
@@ -921,6 +771,16 @@ fi
|
|||||||
|
|
||||||
AM_CONDITIONAL([ENABLE_HPACK_TOOLS], [ test "x${enable_hpack_tools}" = "xyes" ])
|
AM_CONDITIONAL([ENABLE_HPACK_TOOLS], [ test "x${enable_hpack_tools}" = "xyes" ])
|
||||||
|
|
||||||
|
# C++ library libnghttp2_asio
|
||||||
|
|
||||||
|
enable_asio_lib=no
|
||||||
|
if test "x${request_asio_lib}" != "xno" &&
|
||||||
|
test "x${have_asio_lib}" = "xyes"; then
|
||||||
|
enable_asio_lib=yes
|
||||||
|
fi
|
||||||
|
|
||||||
|
AM_CONDITIONAL([ENABLE_ASIO_LIB], [ test "x${enable_asio_lib}" = "xyes" ])
|
||||||
|
|
||||||
# The example programs depend on OpenSSL and libevent_openssl
|
# The example programs depend on OpenSSL and libevent_openssl
|
||||||
enable_examples=no
|
enable_examples=no
|
||||||
if test "x${request_examples}" != "xno" &&
|
if test "x${request_examples}" != "xno" &&
|
||||||
@@ -943,7 +803,8 @@ have_mruby=no
|
|||||||
have_neverbleed=no
|
have_neverbleed=no
|
||||||
if test "x${enable_examples}" = "xyes" ||
|
if test "x${enable_examples}" = "xyes" ||
|
||||||
test "x${enable_app}" = "xyes" ||
|
test "x${enable_app}" = "xyes" ||
|
||||||
test "x${enable_hpack_tools}" = "xyes"; then
|
test "x${enable_hpack_tools}" = "xyes" ||
|
||||||
|
test "x${enable_asio_lib}" = "xyes"; then
|
||||||
enable_third_party=yes
|
enable_third_party=yes
|
||||||
|
|
||||||
# mruby (for src/nghttpx)
|
# mruby (for src/nghttpx)
|
||||||
@@ -968,6 +829,27 @@ AM_CONDITIONAL([ENABLE_THIRD_PARTY], [ test "x${enable_third_party}" = "xyes" ])
|
|||||||
AM_CONDITIONAL([HAVE_MRUBY], [test "x${have_mruby}" = "xyes"])
|
AM_CONDITIONAL([HAVE_MRUBY], [test "x${have_mruby}" = "xyes"])
|
||||||
AM_CONDITIONAL([HAVE_NEVERBLEED], [test "x${have_neverbleed}" = "xyes"])
|
AM_CONDITIONAL([HAVE_NEVERBLEED], [test "x${have_neverbleed}" = "xyes"])
|
||||||
|
|
||||||
|
# Python bindings
|
||||||
|
enable_python_bindings=no
|
||||||
|
if test "x${request_python_bindings}" != "xno" &&
|
||||||
|
test "x${CYTHON}" != "x" &&
|
||||||
|
test "x${PYTHON}" != "x:" &&
|
||||||
|
test "x${PYTHON_VERSION}" != "x"; then
|
||||||
|
enable_python_bindings=yes
|
||||||
|
fi
|
||||||
|
|
||||||
|
if test "x${request_python_bindings}" = "xyes" &&
|
||||||
|
test "x${enable_python_bindings}" != "xyes"; then
|
||||||
|
AC_MSG_ERROR([python bindings were requested (--enable-python-bindings) but dependencies are not met.])
|
||||||
|
fi
|
||||||
|
|
||||||
|
AM_CONDITIONAL([ENABLE_PYTHON_BINDINGS],
|
||||||
|
[test "x${enable_python_bindings}" = "xyes"])
|
||||||
|
|
||||||
|
# Produce cython conditional, so that we can distribute generated C
|
||||||
|
# source
|
||||||
|
AM_CONDITIONAL([HAVE_CYTHON], [test "x${CYTHON}" != "x"])
|
||||||
|
|
||||||
# failmalloc tests
|
# failmalloc tests
|
||||||
enable_failmalloc=no
|
enable_failmalloc=no
|
||||||
if test "x${request_failmalloc}" = "xyes"; then
|
if test "x${request_failmalloc}" = "xyes"; then
|
||||||
@@ -985,7 +867,6 @@ AC_CHECK_HEADERS([ \
|
|||||||
limits.h \
|
limits.h \
|
||||||
netdb.h \
|
netdb.h \
|
||||||
netinet/in.h \
|
netinet/in.h \
|
||||||
netinet/ip.h \
|
|
||||||
pwd.h \
|
pwd.h \
|
||||||
stddef.h \
|
stddef.h \
|
||||||
stdint.h \
|
stdint.h \
|
||||||
@@ -994,8 +875,8 @@ AC_CHECK_HEADERS([ \
|
|||||||
sys/socket.h \
|
sys/socket.h \
|
||||||
sys/time.h \
|
sys/time.h \
|
||||||
syslog.h \
|
syslog.h \
|
||||||
|
time.h \
|
||||||
unistd.h \
|
unistd.h \
|
||||||
windows.h \
|
|
||||||
])
|
])
|
||||||
|
|
||||||
# Checks for typedefs, structures, and compiler characteristics.
|
# Checks for typedefs, structures, and compiler characteristics.
|
||||||
@@ -1045,6 +926,12 @@ if test "x$have_struct_tm_tm_gmtoff" = "xyes"; then
|
|||||||
[Define to 1 if you have `struct tm.tm_gmtoff` member.])
|
[Define to 1 if you have `struct tm.tm_gmtoff` member.])
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
# Check size of pointer to decide we need 8 bytes alignment
|
||||||
|
# adjustment.
|
||||||
|
AC_CHECK_SIZEOF([int *])
|
||||||
|
|
||||||
|
AC_CHECK_SIZEOF([time_t])
|
||||||
|
|
||||||
# Checks for library functions.
|
# Checks for library functions.
|
||||||
|
|
||||||
# Don't check malloc, since it does not play nicely with C++ stdlib
|
# Don't check malloc, since it does not play nicely with C++ stdlib
|
||||||
@@ -1061,7 +948,6 @@ AC_FUNC_STRNLEN
|
|||||||
AC_CHECK_FUNCS([ \
|
AC_CHECK_FUNCS([ \
|
||||||
_Exit \
|
_Exit \
|
||||||
accept4 \
|
accept4 \
|
||||||
clock_gettime \
|
|
||||||
dup2 \
|
dup2 \
|
||||||
getcwd \
|
getcwd \
|
||||||
getpwnam \
|
getpwnam \
|
||||||
@@ -1070,7 +956,6 @@ AC_CHECK_FUNCS([ \
|
|||||||
memmove \
|
memmove \
|
||||||
memset \
|
memset \
|
||||||
mkostemp \
|
mkostemp \
|
||||||
pipe2 \
|
|
||||||
socket \
|
socket \
|
||||||
sqrt \
|
sqrt \
|
||||||
strchr \
|
strchr \
|
||||||
@@ -1088,25 +973,6 @@ AC_CHECK_FUNCS([ \
|
|||||||
AC_CHECK_FUNC([timerfd_create],
|
AC_CHECK_FUNC([timerfd_create],
|
||||||
[have_timerfd_create=yes], [have_timerfd_create=no])
|
[have_timerfd_create=yes], [have_timerfd_create=no])
|
||||||
|
|
||||||
AC_MSG_CHECKING([checking for GetTickCount64])
|
|
||||||
AC_LINK_IFELSE([AC_LANG_PROGRAM(
|
|
||||||
[[
|
|
||||||
#include <windows.h>
|
|
||||||
]],
|
|
||||||
[[
|
|
||||||
GetTickCount64();
|
|
||||||
]])],
|
|
||||||
[have_gettickcount64=yes],
|
|
||||||
[have_gettickcount64=no])
|
|
||||||
|
|
||||||
if test "x${have_gettickcount64}" = "xyes"; then
|
|
||||||
AC_MSG_RESULT([yes])
|
|
||||||
AC_DEFINE([HAVE_GETTICKCOUNT64], [1],
|
|
||||||
[Define to 1 if you have `GetTickCount64` function.])
|
|
||||||
else
|
|
||||||
AC_MSG_RESULT([no])
|
|
||||||
fi
|
|
||||||
|
|
||||||
# For cygwin: we can link initgroups, so AC_CHECK_FUNCS succeeds, but
|
# For cygwin: we can link initgroups, so AC_CHECK_FUNCS succeeds, but
|
||||||
# cygwin disables initgroups due to feature test macro magic with our
|
# cygwin disables initgroups due to feature test macro magic with our
|
||||||
# configuration. FreeBSD declares initgroups() in unistd.h.
|
# configuration. FreeBSD declares initgroups() in unistd.h.
|
||||||
@@ -1117,10 +983,34 @@ AC_CHECK_DECLS([initgroups], [], [], [[
|
|||||||
#include <grp.h>
|
#include <grp.h>
|
||||||
]])
|
]])
|
||||||
|
|
||||||
AC_CHECK_DECLS([CLOCK_MONOTONIC], [], [], [[
|
have_netinet_udp_h_udp_segment=no
|
||||||
#include <time.h>
|
AC_CHECK_DECL([UDP_SEGMENT], [have_netinet_udp_h_udp_segment=yes],
|
||||||
|
[have_netinet_udp_h_udp_segment=no], [[
|
||||||
|
#include <netinet/udp.h>
|
||||||
]])
|
]])
|
||||||
|
|
||||||
|
if test "x$have_netinet_udp_h_udp_segment" = "xno"; then
|
||||||
|
have_linux_udp_h_udp_segment=no
|
||||||
|
AC_MSG_CHECKING([whether UDP_SEGMENT is defined as 103 in linux/udp.h])
|
||||||
|
AC_RUN_IFELSE([AC_LANG_PROGRAM(
|
||||||
|
[[
|
||||||
|
#include <linux/udp.h>
|
||||||
|
]],
|
||||||
|
[[
|
||||||
|
#if UDP_SEGMENT != 103
|
||||||
|
exit(1)
|
||||||
|
#endif
|
||||||
|
]])],
|
||||||
|
[have_linux_udp_h_udp_segment=yes
|
||||||
|
AC_MSG_RESULT([yes])],
|
||||||
|
[have_linux_udp_h_udp_segment=no
|
||||||
|
AC_MSG_RESULT([no])])
|
||||||
|
|
||||||
|
if test "x$have_linux_udp_h_udp_segment" = "xyes"; then
|
||||||
|
EXTRA_DEFS="$EXTRA_DEFS -DUDP_SEGMENT=103"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
save_CFLAGS=$CFLAGS
|
save_CFLAGS=$CFLAGS
|
||||||
save_CXXFLAGS=$CXXFLAGS
|
save_CXXFLAGS=$CXXFLAGS
|
||||||
|
|
||||||
@@ -1175,7 +1065,6 @@ if test "x$werror" != "xno"; then
|
|||||||
# Only work with Clang for the moment
|
# Only work with Clang for the moment
|
||||||
AX_CHECK_COMPILE_FLAG([-Wheader-guard], [CFLAGS="$CFLAGS -Wheader-guard"])
|
AX_CHECK_COMPILE_FLAG([-Wheader-guard], [CFLAGS="$CFLAGS -Wheader-guard"])
|
||||||
AX_CHECK_COMPILE_FLAG([-Wsometimes-uninitialized], [CFLAGS="$CFLAGS -Wsometimes-uninitialized"])
|
AX_CHECK_COMPILE_FLAG([-Wsometimes-uninitialized], [CFLAGS="$CFLAGS -Wsometimes-uninitialized"])
|
||||||
AX_CHECK_COMPILE_FLAG([-Wextra-semi], [CFLAGS="$CFLAGS -Wextra-semi"])
|
|
||||||
|
|
||||||
# This is required because we pass format string as "const char*.
|
# This is required because we pass format string as "const char*.
|
||||||
AX_CHECK_COMPILE_FLAG([-Wno-format-nonliteral], [CFLAGS="$CFLAGS -Wno-format-nonliteral"])
|
AX_CHECK_COMPILE_FLAG([-Wno-format-nonliteral], [CFLAGS="$CFLAGS -Wno-format-nonliteral"])
|
||||||
@@ -1186,13 +1075,9 @@ if test "x$werror" != "xno"; then
|
|||||||
AX_CHECK_COMPILE_FLAG([-Werror], [CXXFLAGS="$CXXFLAGS -Werror"])
|
AX_CHECK_COMPILE_FLAG([-Werror], [CXXFLAGS="$CXXFLAGS -Werror"])
|
||||||
AX_CHECK_COMPILE_FLAG([-Wformat-security], [CXXFLAGS="$CXXFLAGS -Wformat-security"])
|
AX_CHECK_COMPILE_FLAG([-Wformat-security], [CXXFLAGS="$CXXFLAGS -Wformat-security"])
|
||||||
AX_CHECK_COMPILE_FLAG([-Wsometimes-uninitialized], [CXXFLAGS="$CXXFLAGS -Wsometimes-uninitialized"])
|
AX_CHECK_COMPILE_FLAG([-Wsometimes-uninitialized], [CXXFLAGS="$CXXFLAGS -Wsometimes-uninitialized"])
|
||||||
AX_CHECK_COMPILE_FLAG([-Wextra-semi], [CXXFLAGS="$CXXFLAGS -Wextra-semi"])
|
|
||||||
AX_CHECK_COMPILE_FLAG([-Wconversion], [CXXFLAGS="$CXXFLAGS -Wconversion"])
|
|
||||||
# Disable noexcept-type warning of g++-7. This is not harmful as
|
# Disable noexcept-type warning of g++-7. This is not harmful as
|
||||||
# long as all source files are compiled with the same compiler.
|
# long as all source files are compiled with the same compiler.
|
||||||
AX_CHECK_COMPILE_FLAG([-Wno-noexcept-type], [CXXFLAGS="$CXXFLAGS -Wno-noexcept-type"])
|
AX_CHECK_COMPILE_FLAG([-Wno-noexcept-type], [CXXFLAGS="$CXXFLAGS -Wno-noexcept-type"])
|
||||||
# clang++-18 warns this when building with wolfSSL >= v5.7.6-stable.
|
|
||||||
AX_CHECK_COMPILE_FLAG([-Wno-extern-c-compat], [CXXFLAGS="$CXXFLAGS -Wno-extern-c-compat"])
|
|
||||||
AC_LANG_POP()
|
AC_LANG_POP()
|
||||||
fi
|
fi
|
||||||
|
|
||||||
@@ -1239,9 +1124,12 @@ AC_CONFIG_FILES([
|
|||||||
tests/testdata/Makefile
|
tests/testdata/Makefile
|
||||||
third-party/Makefile
|
third-party/Makefile
|
||||||
src/Makefile
|
src/Makefile
|
||||||
src/testdata/Makefile
|
src/includes/Makefile
|
||||||
|
src/libnghttp2_asio.pc
|
||||||
bpf/Makefile
|
bpf/Makefile
|
||||||
examples/Makefile
|
examples/Makefile
|
||||||
|
python/Makefile
|
||||||
|
python/setup.py
|
||||||
integration-tests/Makefile
|
integration-tests/Makefile
|
||||||
integration-tests/config.go
|
integration-tests/config.go
|
||||||
integration-tests/setenv
|
integration-tests/setenv
|
||||||
@@ -1254,11 +1142,17 @@ AC_CONFIG_FILES([
|
|||||||
doc/tutorial-hpack.rst
|
doc/tutorial-hpack.rst
|
||||||
doc/nghttpx-howto.rst
|
doc/nghttpx-howto.rst
|
||||||
doc/h2load-howto.rst
|
doc/h2load-howto.rst
|
||||||
|
doc/libnghttp2_asio.rst
|
||||||
|
doc/python-apiref.rst
|
||||||
doc/building-android-binary.rst
|
doc/building-android-binary.rst
|
||||||
doc/nghttp2.h.rst
|
doc/nghttp2.h.rst
|
||||||
doc/nghttp2ver.h.rst
|
doc/nghttp2ver.h.rst
|
||||||
|
doc/asio_http2.h.rst
|
||||||
|
doc/asio_http2_server.h.rst
|
||||||
|
doc/asio_http2_client.h.rst
|
||||||
doc/contribute.rst
|
doc/contribute.rst
|
||||||
contrib/Makefile
|
contrib/Makefile
|
||||||
|
script/Makefile
|
||||||
])
|
])
|
||||||
AC_OUTPUT
|
AC_OUTPUT
|
||||||
|
|
||||||
@@ -1297,19 +1191,20 @@ AC_MSG_NOTICE([summary of build options:
|
|||||||
Python:
|
Python:
|
||||||
Python: ${PYTHON}
|
Python: ${PYTHON}
|
||||||
PYTHON_VERSION: ${PYTHON_VERSION}
|
PYTHON_VERSION: ${PYTHON_VERSION}
|
||||||
|
pyexecdir: ${pyexecdir}
|
||||||
|
PYTHON_CPPFLAGS:${PYTHON_CPPFLAGS}
|
||||||
|
PYTHON_LIBS: ${PYTHON_LIBS}
|
||||||
|
Cython: ${CYTHON}
|
||||||
Test:
|
Test:
|
||||||
|
CUnit: ${have_cunit} (CFLAGS='${CUNIT_CFLAGS}' LIBS='${CUNIT_LIBS}')
|
||||||
Failmalloc: ${enable_failmalloc}
|
Failmalloc: ${enable_failmalloc}
|
||||||
Libs:
|
Libs:
|
||||||
wolfSSL: ${have_wolfssl} (CFLAGS='${WOLFSSL_CFLAGS}' LIBS='${WOLFSSL_LIBS}')
|
|
||||||
OpenSSL: ${have_openssl} (CFLAGS='${OPENSSL_CFLAGS}' LIBS='${OPENSSL_LIBS}')
|
OpenSSL: ${have_openssl} (CFLAGS='${OPENSSL_CFLAGS}' LIBS='${OPENSSL_LIBS}')
|
||||||
Libxml2: ${have_libxml2} (CFLAGS='${LIBXML2_CFLAGS}' LIBS='${LIBXML2_LIBS}')
|
Libxml2: ${have_libxml2} (CFLAGS='${LIBXML2_CFLAGS}' LIBS='${LIBXML2_LIBS}')
|
||||||
Libev: ${have_libev} (CFLAGS='${LIBEV_CFLAGS}' LIBS='${LIBEV_LIBS}')
|
Libev: ${have_libev} (CFLAGS='${LIBEV_CFLAGS}' LIBS='${LIBEV_LIBS}')
|
||||||
Libc-ares: ${have_libcares} (CFLAGS='${LIBCARES_CFLAGS}' LIBS='${LIBCARES_LIBS}')
|
Libc-ares: ${have_libcares} (CFLAGS='${LIBCARES_CFLAGS}' LIBS='${LIBCARES_LIBS}')
|
||||||
libngtcp2: ${have_libngtcp2} (CFLAGS='${LIBNGTCP2_CFLAGS}' LIBS='${LIBNGTCP2_LIBS}')
|
libngtcp2: ${have_libngtcp2} (CFLAGS='${LIBNGTCP2_CFLAGS}' LIBS='${LIBNGTCP2_LIBS}')
|
||||||
libngtcp2_crypto_quictls: ${have_libngtcp2_crypto_quictls} (CFLAGS='${LIBNGTCP2_CRYPTO_QUICTLS_CFLAGS}' LIBS='${LIBNGTCP2_CRYPTO_QUICTLS_LIBS}')
|
libngtcp2_crypto_openssl: ${have_libngtcp2_crypto_openssl} (CFLAGS='${LIBNGTCP2_CRYPTO_OPENSSL_CFLAGS}' LIBS='${LIBNGTCP2_CRYPTO_OPENSSL_LIBS}')
|
||||||
libngtcp2_crypto_libressl: ${have_libngtcp2_crypto_libressl} (CFLAGS='${LIBNGTCP2_CRYPTO_LIBRESSL_CFLAGS}' LIBS='${LIBNGTCP2_CRYPTO_LIBRESSL_LIBS}')
|
|
||||||
libngtcp2_crypto_boringssl: ${have_libngtcp2_crypto_boringssl} (CFLAGS='${LIBNGTCP2_CRYPTO_BORINGSSL_CFLAGS}' LIBS='${LIBNGTCP2_CRYPTO_BORINGSSL_LIBS}')
|
|
||||||
libngtcp2_crypto_ossl: ${have_libngtcp2_crypto_ossl} (CFLAGS='${LIBNGTCP2_CRYPTO_OSSL_CFLAGS}' LIBS='${LIBNGTCP2_CRYPTO_OSSL_LIBS}')
|
|
||||||
libnghttp3: ${have_libnghttp3} (CFLAGS='${LIBNGHTTP3_CFLAGS}' LIBS='${LIBNGHTTP3_LIBS}')
|
libnghttp3: ${have_libnghttp3} (CFLAGS='${LIBNGHTTP3_CFLAGS}' LIBS='${LIBNGHTTP3_LIBS}')
|
||||||
libbpf: ${have_libbpf} (CFLAGS='${LIBBPF_CFLAGS}' LIBS='${LIBBPF_LIBS}')
|
libbpf: ${have_libbpf} (CFLAGS='${LIBBPF_CFLAGS}' LIBS='${LIBBPF_LIBS}')
|
||||||
Libevent(SSL): ${have_libevent_openssl} (CFLAGS='${LIBEVENT_OPENSSL_CFLAGS}' LIBS='${LIBEVENT_OPENSSL_LIBS}')
|
Libevent(SSL): ${have_libevent_openssl} (CFLAGS='${LIBEVENT_OPENSSL_CFLAGS}' LIBS='${LIBEVENT_OPENSSL_LIBS}')
|
||||||
@@ -1317,8 +1212,11 @@ AC_MSG_NOTICE([summary of build options:
|
|||||||
Jemalloc: ${have_jemalloc} (CFLAGS='${JEMALLOC_CFLAGS}' LIBS='${JEMALLOC_LIBS}')
|
Jemalloc: ${have_jemalloc} (CFLAGS='${JEMALLOC_CFLAGS}' LIBS='${JEMALLOC_LIBS}')
|
||||||
Zlib: ${have_zlib} (CFLAGS='${ZLIB_CFLAGS}' LIBS='${ZLIB_LIBS}')
|
Zlib: ${have_zlib} (CFLAGS='${ZLIB_CFLAGS}' LIBS='${ZLIB_LIBS}')
|
||||||
Systemd: ${have_libsystemd} (CFLAGS='${SYSTEMD_CFLAGS}' LIBS='${SYSTEMD_LIBS}')
|
Systemd: ${have_libsystemd} (CFLAGS='${SYSTEMD_CFLAGS}' LIBS='${SYSTEMD_LIBS}')
|
||||||
Libbrotlienc: ${have_libbrotlienc} (CFLAGS="${LIBBROTLIENC_CFLAGS}' LIBS='${LIBBROTLIENC_LIBS}')
|
Boost CPPFLAGS: ${BOOST_CPPFLAGS}
|
||||||
Libbrotlidec: ${have_libbrotlidec} (CFLAGS="${LIBBROTLIDEC_CFLAGS}' LIBS='${LIBBROTLIDEC_LIBS}')
|
Boost LDFLAGS: ${BOOST_LDFLAGS}
|
||||||
|
Boost::ASIO: ${BOOST_ASIO_LIB}
|
||||||
|
Boost::System: ${BOOST_SYSTEM_LIB}
|
||||||
|
Boost::Thread: ${BOOST_THREAD_LIB}
|
||||||
Third-party:
|
Third-party:
|
||||||
http-parser: ${enable_third_party}
|
http-parser: ${enable_third_party}
|
||||||
MRuby: ${have_mruby} (CFLAGS='${LIBMRUBY_CFLAGS}' LIBS='${LIBMRUBY_LIBS}')
|
MRuby: ${have_mruby} (CFLAGS='${LIBMRUBY_CFLAGS}' LIBS='${LIBMRUBY_LIBS}')
|
||||||
@@ -1326,7 +1224,9 @@ AC_MSG_NOTICE([summary of build options:
|
|||||||
Features:
|
Features:
|
||||||
Applications: ${enable_app}
|
Applications: ${enable_app}
|
||||||
HPACK tools: ${enable_hpack_tools}
|
HPACK tools: ${enable_hpack_tools}
|
||||||
|
Libnghttp2_asio:${enable_asio_lib}
|
||||||
Examples: ${enable_examples}
|
Examples: ${enable_examples}
|
||||||
|
Python bindings:${enable_python_bindings}
|
||||||
Threading: ${enable_threads}
|
Threading: ${enable_threads}
|
||||||
HTTP/3 (EXPERIMENTAL): ${enable_http3}
|
HTTP/3 (EXPERIMENTAL): ${enable_http3}
|
||||||
])
|
])
|
||||||
|
|||||||
@@ -30,10 +30,9 @@ import (
|
|||||||
"encoding/binary"
|
"encoding/binary"
|
||||||
"flag"
|
"flag"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"github.com/bradfitz/gomemcache/memcache"
|
||||||
"log"
|
"log"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/bradfitz/gomemcache/memcache"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
func makeKey(len int) []byte {
|
func makeKey(len int) []byte {
|
||||||
@@ -90,7 +89,9 @@ func main() {
|
|||||||
Expiration: int32((*interval) + 300),
|
Expiration: int32((*interval) + 300),
|
||||||
})
|
})
|
||||||
|
|
||||||
<-time.After(time.Duration(*interval) * time.Second)
|
select {
|
||||||
|
case <-time.After(time.Duration(*interval) * time.Second):
|
||||||
|
}
|
||||||
|
|
||||||
// rotate keys. the last key is now encryption key.
|
// rotate keys. the last key is now encryption key.
|
||||||
// generate new key and append it to the last, so that
|
// generate new key and append it to the last, so that
|
||||||
|
|||||||
5
doc/.gitignore
vendored
5
doc/.gitignore
vendored
@@ -1,11 +1,15 @@
|
|||||||
# generated files
|
# generated files
|
||||||
apiref.rst
|
apiref.rst
|
||||||
|
asio_http2.h.rst
|
||||||
|
asio_http2_client.h.rst
|
||||||
|
asio_http2_server.h.rst
|
||||||
building-android-binary.rst
|
building-android-binary.rst
|
||||||
conf.py
|
conf.py
|
||||||
contribute.rst
|
contribute.rst
|
||||||
enums.rst
|
enums.rst
|
||||||
h2load-howto.rst
|
h2load-howto.rst
|
||||||
index.rst
|
index.rst
|
||||||
|
libnghttp2_asio.rst
|
||||||
macros.rst
|
macros.rst
|
||||||
manual/
|
manual/
|
||||||
nghttp2.h.rst
|
nghttp2.h.rst
|
||||||
@@ -13,6 +17,7 @@ nghttp2_*.rst
|
|||||||
nghttp2ver.h.rst
|
nghttp2ver.h.rst
|
||||||
nghttpx-howto.rst
|
nghttpx-howto.rst
|
||||||
package_README.rst
|
package_README.rst
|
||||||
|
python-apiref.rst
|
||||||
tutorial-client.rst
|
tutorial-client.rst
|
||||||
tutorial-hpack.rst
|
tutorial-hpack.rst
|
||||||
tutorial-server.rst
|
tutorial-server.rst
|
||||||
|
|||||||
@@ -180,6 +180,8 @@ set(EXTRA_DIST
|
|||||||
sources/tutorial-hpack.rst
|
sources/tutorial-hpack.rst
|
||||||
sources/nghttpx-howto.rst
|
sources/nghttpx-howto.rst
|
||||||
sources/h2load-howto.rst
|
sources/h2load-howto.rst
|
||||||
|
sources/libnghttp2_asio.rst
|
||||||
|
sources/python-apiref.rst
|
||||||
sources/building-android-binary.rst
|
sources/building-android-binary.rst
|
||||||
sources/contribute.rst
|
sources/contribute.rst
|
||||||
_exts/rubydomain/LICENSE.rubydomain
|
_exts/rubydomain/LICENSE.rubydomain
|
||||||
@@ -267,7 +269,7 @@ add_custom_command(
|
|||||||
apiref.rst
|
apiref.rst
|
||||||
${APIDOCS}
|
${APIDOCS}
|
||||||
COMMAND
|
COMMAND
|
||||||
"${Python3_EXECUTABLE}" "${CMAKE_CURRENT_SOURCE_DIR}/mkapiref.py"
|
"${PYTHON_EXECUTABLE}" "${CMAKE_CURRENT_SOURCE_DIR}/mkapiref.py"
|
||||||
apiref.rst macros.rst enums.rst types.rst .
|
apiref.rst macros.rst enums.rst types.rst .
|
||||||
${apiref_SOURCES}
|
${apiref_SOURCES}
|
||||||
DEPENDS
|
DEPENDS
|
||||||
|
|||||||
@@ -30,10 +30,8 @@ APIDOCS= \
|
|||||||
nghttp2_check_authority.rst \
|
nghttp2_check_authority.rst \
|
||||||
nghttp2_check_header_name.rst \
|
nghttp2_check_header_name.rst \
|
||||||
nghttp2_check_header_value.rst \
|
nghttp2_check_header_value.rst \
|
||||||
nghttp2_check_header_value_rfc9113.rst \
|
|
||||||
nghttp2_check_method.rst \
|
nghttp2_check_method.rst \
|
||||||
nghttp2_check_path.rst \
|
nghttp2_check_path.rst \
|
||||||
nghttp2_extpri_parse_priority.rst \
|
|
||||||
nghttp2_hd_deflate_bound.rst \
|
nghttp2_hd_deflate_bound.rst \
|
||||||
nghttp2_hd_deflate_change_table_size.rst \
|
nghttp2_hd_deflate_change_table_size.rst \
|
||||||
nghttp2_hd_deflate_del.rst \
|
nghttp2_hd_deflate_del.rst \
|
||||||
@@ -42,9 +40,7 @@ APIDOCS= \
|
|||||||
nghttp2_hd_deflate_get_num_table_entries.rst \
|
nghttp2_hd_deflate_get_num_table_entries.rst \
|
||||||
nghttp2_hd_deflate_get_table_entry.rst \
|
nghttp2_hd_deflate_get_table_entry.rst \
|
||||||
nghttp2_hd_deflate_hd.rst \
|
nghttp2_hd_deflate_hd.rst \
|
||||||
nghttp2_hd_deflate_hd2.rst \
|
|
||||||
nghttp2_hd_deflate_hd_vec.rst \
|
nghttp2_hd_deflate_hd_vec.rst \
|
||||||
nghttp2_hd_deflate_hd_vec2.rst \
|
|
||||||
nghttp2_hd_deflate_new.rst \
|
nghttp2_hd_deflate_new.rst \
|
||||||
nghttp2_hd_deflate_new2.rst \
|
nghttp2_hd_deflate_new2.rst \
|
||||||
nghttp2_hd_inflate_change_table_size.rst \
|
nghttp2_hd_inflate_change_table_size.rst \
|
||||||
@@ -56,7 +52,6 @@ APIDOCS= \
|
|||||||
nghttp2_hd_inflate_get_table_entry.rst \
|
nghttp2_hd_inflate_get_table_entry.rst \
|
||||||
nghttp2_hd_inflate_hd.rst \
|
nghttp2_hd_inflate_hd.rst \
|
||||||
nghttp2_hd_inflate_hd2.rst \
|
nghttp2_hd_inflate_hd2.rst \
|
||||||
nghttp2_hd_inflate_hd3.rst \
|
|
||||||
nghttp2_hd_inflate_new.rst \
|
nghttp2_hd_inflate_new.rst \
|
||||||
nghttp2_hd_inflate_new2.rst \
|
nghttp2_hd_inflate_new2.rst \
|
||||||
nghttp2_http2_strerror.rst \
|
nghttp2_http2_strerror.rst \
|
||||||
@@ -73,17 +68,11 @@ APIDOCS= \
|
|||||||
nghttp2_option_set_no_closed_streams.rst \
|
nghttp2_option_set_no_closed_streams.rst \
|
||||||
nghttp2_option_set_no_http_messaging.rst \
|
nghttp2_option_set_no_http_messaging.rst \
|
||||||
nghttp2_option_set_no_recv_client_magic.rst \
|
nghttp2_option_set_no_recv_client_magic.rst \
|
||||||
nghttp2_option_set_no_rfc9113_leading_and_trailing_ws_validation.rst \
|
|
||||||
nghttp2_option_set_peer_max_concurrent_streams.rst \
|
nghttp2_option_set_peer_max_concurrent_streams.rst \
|
||||||
nghttp2_option_set_server_fallback_rfc7540_priorities.rst \
|
|
||||||
nghttp2_option_set_user_recv_extension_type.rst \
|
nghttp2_option_set_user_recv_extension_type.rst \
|
||||||
nghttp2_option_set_max_continuations.rst \
|
|
||||||
nghttp2_option_set_max_outbound_ack.rst \
|
nghttp2_option_set_max_outbound_ack.rst \
|
||||||
nghttp2_option_set_max_settings.rst \
|
nghttp2_option_set_max_settings.rst \
|
||||||
nghttp2_option_set_stream_reset_rate_limit.rst \
|
|
||||||
nghttp2_option_set_glitch_rate_limit.rst \
|
|
||||||
nghttp2_pack_settings_payload.rst \
|
nghttp2_pack_settings_payload.rst \
|
||||||
nghttp2_pack_settings_payload2.rst \
|
|
||||||
nghttp2_priority_spec_check_default.rst \
|
nghttp2_priority_spec_check_default.rst \
|
||||||
nghttp2_priority_spec_default_init.rst \
|
nghttp2_priority_spec_default_init.rst \
|
||||||
nghttp2_priority_spec_init.rst \
|
nghttp2_priority_spec_init.rst \
|
||||||
@@ -92,12 +81,10 @@ APIDOCS= \
|
|||||||
nghttp2_rcbuf_incref.rst \
|
nghttp2_rcbuf_incref.rst \
|
||||||
nghttp2_rcbuf_is_static.rst \
|
nghttp2_rcbuf_is_static.rst \
|
||||||
nghttp2_select_next_protocol.rst \
|
nghttp2_select_next_protocol.rst \
|
||||||
nghttp2_select_alpn.rst \
|
|
||||||
nghttp2_session_callbacks_del.rst \
|
nghttp2_session_callbacks_del.rst \
|
||||||
nghttp2_session_callbacks_new.rst \
|
nghttp2_session_callbacks_new.rst \
|
||||||
nghttp2_session_callbacks_set_before_frame_send_callback.rst \
|
nghttp2_session_callbacks_set_before_frame_send_callback.rst \
|
||||||
nghttp2_session_callbacks_set_data_source_read_length_callback.rst \
|
nghttp2_session_callbacks_set_data_source_read_length_callback.rst \
|
||||||
nghttp2_session_callbacks_set_data_source_read_length_callback2.rst \
|
|
||||||
nghttp2_session_callbacks_set_error_callback.rst \
|
nghttp2_session_callbacks_set_error_callback.rst \
|
||||||
nghttp2_session_callbacks_set_error_callback2.rst \
|
nghttp2_session_callbacks_set_error_callback2.rst \
|
||||||
nghttp2_session_callbacks_set_on_begin_frame_callback.rst \
|
nghttp2_session_callbacks_set_on_begin_frame_callback.rst \
|
||||||
@@ -114,17 +101,11 @@ APIDOCS= \
|
|||||||
nghttp2_session_callbacks_set_on_invalid_header_callback2.rst \
|
nghttp2_session_callbacks_set_on_invalid_header_callback2.rst \
|
||||||
nghttp2_session_callbacks_set_on_stream_close_callback.rst \
|
nghttp2_session_callbacks_set_on_stream_close_callback.rst \
|
||||||
nghttp2_session_callbacks_set_pack_extension_callback.rst \
|
nghttp2_session_callbacks_set_pack_extension_callback.rst \
|
||||||
nghttp2_session_callbacks_set_pack_extension_callback2.rst \
|
|
||||||
nghttp2_session_callbacks_set_rand_callback.rst \
|
|
||||||
nghttp2_session_callbacks_set_recv_callback.rst \
|
nghttp2_session_callbacks_set_recv_callback.rst \
|
||||||
nghttp2_session_callbacks_set_recv_callback2.rst \
|
|
||||||
nghttp2_session_callbacks_set_select_padding_callback.rst \
|
nghttp2_session_callbacks_set_select_padding_callback.rst \
|
||||||
nghttp2_session_callbacks_set_select_padding_callback2.rst \
|
|
||||||
nghttp2_session_callbacks_set_send_callback.rst \
|
nghttp2_session_callbacks_set_send_callback.rst \
|
||||||
nghttp2_session_callbacks_set_send_callback2.rst \
|
|
||||||
nghttp2_session_callbacks_set_send_data_callback.rst \
|
nghttp2_session_callbacks_set_send_data_callback.rst \
|
||||||
nghttp2_session_callbacks_set_unpack_extension_callback.rst \
|
nghttp2_session_callbacks_set_unpack_extension_callback.rst \
|
||||||
nghttp2_session_change_extpri_stream_priority.rst \
|
|
||||||
nghttp2_session_change_stream_priority.rst \
|
nghttp2_session_change_stream_priority.rst \
|
||||||
nghttp2_session_check_request_allowed.rst \
|
nghttp2_session_check_request_allowed.rst \
|
||||||
nghttp2_session_check_server_session.rst \
|
nghttp2_session_check_server_session.rst \
|
||||||
@@ -139,7 +120,6 @@ APIDOCS= \
|
|||||||
nghttp2_session_find_stream.rst \
|
nghttp2_session_find_stream.rst \
|
||||||
nghttp2_session_get_effective_local_window_size.rst \
|
nghttp2_session_get_effective_local_window_size.rst \
|
||||||
nghttp2_session_get_effective_recv_data_length.rst \
|
nghttp2_session_get_effective_recv_data_length.rst \
|
||||||
nghttp2_session_get_extpri_stream_priority.rst \
|
|
||||||
nghttp2_session_get_hd_deflate_dynamic_table_size.rst \
|
nghttp2_session_get_hd_deflate_dynamic_table_size.rst \
|
||||||
nghttp2_session_get_hd_inflate_dynamic_table_size.rst \
|
nghttp2_session_get_hd_inflate_dynamic_table_size.rst \
|
||||||
nghttp2_session_get_last_proc_stream_id.rst \
|
nghttp2_session_get_last_proc_stream_id.rst \
|
||||||
@@ -158,9 +138,7 @@ APIDOCS= \
|
|||||||
nghttp2_session_get_stream_remote_window_size.rst \
|
nghttp2_session_get_stream_remote_window_size.rst \
|
||||||
nghttp2_session_get_stream_user_data.rst \
|
nghttp2_session_get_stream_user_data.rst \
|
||||||
nghttp2_session_mem_recv.rst \
|
nghttp2_session_mem_recv.rst \
|
||||||
nghttp2_session_mem_recv2.rst \
|
|
||||||
nghttp2_session_mem_send.rst \
|
nghttp2_session_mem_send.rst \
|
||||||
nghttp2_session_mem_send2.rst \
|
|
||||||
nghttp2_session_recv.rst \
|
nghttp2_session_recv.rst \
|
||||||
nghttp2_session_resume_data.rst \
|
nghttp2_session_resume_data.rst \
|
||||||
nghttp2_session_send.rst \
|
nghttp2_session_send.rst \
|
||||||
@@ -188,19 +166,15 @@ APIDOCS= \
|
|||||||
nghttp2_strerror.rst \
|
nghttp2_strerror.rst \
|
||||||
nghttp2_submit_altsvc.rst \
|
nghttp2_submit_altsvc.rst \
|
||||||
nghttp2_submit_data.rst \
|
nghttp2_submit_data.rst \
|
||||||
nghttp2_submit_data2.rst \
|
|
||||||
nghttp2_submit_extension.rst \
|
nghttp2_submit_extension.rst \
|
||||||
nghttp2_submit_goaway.rst \
|
nghttp2_submit_goaway.rst \
|
||||||
nghttp2_submit_headers.rst \
|
nghttp2_submit_headers.rst \
|
||||||
nghttp2_submit_origin.rst \
|
nghttp2_submit_origin.rst \
|
||||||
nghttp2_submit_ping.rst \
|
nghttp2_submit_ping.rst \
|
||||||
nghttp2_submit_priority.rst \
|
nghttp2_submit_priority.rst \
|
||||||
nghttp2_submit_priority_update.rst \
|
|
||||||
nghttp2_submit_push_promise.rst \
|
nghttp2_submit_push_promise.rst \
|
||||||
nghttp2_submit_request.rst \
|
nghttp2_submit_request.rst \
|
||||||
nghttp2_submit_request2.rst \
|
|
||||||
nghttp2_submit_response.rst \
|
nghttp2_submit_response.rst \
|
||||||
nghttp2_submit_response2.rst \
|
|
||||||
nghttp2_submit_rst_stream.rst \
|
nghttp2_submit_rst_stream.rst \
|
||||||
nghttp2_submit_settings.rst \
|
nghttp2_submit_settings.rst \
|
||||||
nghttp2_submit_shutdown_notice.rst \
|
nghttp2_submit_shutdown_notice.rst \
|
||||||
@@ -227,11 +201,66 @@ EXTRA_DIST = \
|
|||||||
sources/tutorial-hpack.rst \
|
sources/tutorial-hpack.rst \
|
||||||
sources/nghttpx-howto.rst \
|
sources/nghttpx-howto.rst \
|
||||||
sources/h2load-howto.rst \
|
sources/h2load-howto.rst \
|
||||||
|
sources/libnghttp2_asio.rst \
|
||||||
|
sources/python-apiref.rst \
|
||||||
sources/building-android-binary.rst \
|
sources/building-android-binary.rst \
|
||||||
sources/contribute.rst \
|
sources/contribute.rst \
|
||||||
|
sources/security.rst \
|
||||||
_exts/rubydomain/LICENSE.rubydomain \
|
_exts/rubydomain/LICENSE.rubydomain \
|
||||||
_exts/rubydomain/__init__.py \
|
_exts/rubydomain/__init__.py \
|
||||||
_exts/rubydomain/rubydomain.py \
|
_exts/rubydomain/rubydomain.py \
|
||||||
|
_themes/sphinx_rtd_theme/__init__.py \
|
||||||
|
_themes/sphinx_rtd_theme/breadcrumbs.html \
|
||||||
|
_themes/sphinx_rtd_theme/footer.html \
|
||||||
|
_themes/sphinx_rtd_theme/layout.html \
|
||||||
|
_themes/sphinx_rtd_theme/locale/de/LC_MESSAGES/sphinx.mo \
|
||||||
|
_themes/sphinx_rtd_theme/locale/de/LC_MESSAGES/sphinx.po \
|
||||||
|
_themes/sphinx_rtd_theme/locale/en/LC_MESSAGES/sphinx.mo \
|
||||||
|
_themes/sphinx_rtd_theme/locale/en/LC_MESSAGES/sphinx.po \
|
||||||
|
_themes/sphinx_rtd_theme/locale/es/LC_MESSAGES/sphinx.mo \
|
||||||
|
_themes/sphinx_rtd_theme/locale/es/LC_MESSAGES/sphinx.po \
|
||||||
|
_themes/sphinx_rtd_theme/locale/et/LC_MESSAGES/sphinx.mo \
|
||||||
|
_themes/sphinx_rtd_theme/locale/et/LC_MESSAGES/sphinx.po \
|
||||||
|
_themes/sphinx_rtd_theme/locale/fr/LC_MESSAGES/sphinx.mo \
|
||||||
|
_themes/sphinx_rtd_theme/locale/fr/LC_MESSAGES/sphinx.po \
|
||||||
|
_themes/sphinx_rtd_theme/locale/nl/LC_MESSAGES/sphinx.mo \
|
||||||
|
_themes/sphinx_rtd_theme/locale/nl/LC_MESSAGES/sphinx.po \
|
||||||
|
_themes/sphinx_rtd_theme/locale/pt_BR/LC_MESSAGES/sphinx.mo \
|
||||||
|
_themes/sphinx_rtd_theme/locale/pt_BR/LC_MESSAGES/sphinx.po \
|
||||||
|
_themes/sphinx_rtd_theme/locale/ru/LC_MESSAGES/sphinx.mo \
|
||||||
|
_themes/sphinx_rtd_theme/locale/ru/LC_MESSAGES/sphinx.po \
|
||||||
|
_themes/sphinx_rtd_theme/locale/sphinx.pot \
|
||||||
|
_themes/sphinx_rtd_theme/locale/sv/LC_MESSAGES/sphinx.mo \
|
||||||
|
_themes/sphinx_rtd_theme/locale/sv/LC_MESSAGES/sphinx.po \
|
||||||
|
_themes/sphinx_rtd_theme/locale/tr/LC_MESSAGES/sphinx.mo \
|
||||||
|
_themes/sphinx_rtd_theme/locale/tr/LC_MESSAGES/sphinx.po \
|
||||||
|
_themes/sphinx_rtd_theme/locale/zh_CN/LC_MESSAGES/sphinx.mo \
|
||||||
|
_themes/sphinx_rtd_theme/locale/zh_CN/LC_MESSAGES/sphinx.po \
|
||||||
|
_themes/sphinx_rtd_theme/search.html \
|
||||||
|
_themes/sphinx_rtd_theme/searchbox.html \
|
||||||
|
_themes/sphinx_rtd_theme/static/css/badge_only.css \
|
||||||
|
_themes/sphinx_rtd_theme/static/css/fonts/Roboto-Slab-Bold.woff \
|
||||||
|
_themes/sphinx_rtd_theme/static/css/fonts/Roboto-Slab-Bold.woff2 \
|
||||||
|
_themes/sphinx_rtd_theme/static/css/fonts/Roboto-Slab-Regular.woff \
|
||||||
|
_themes/sphinx_rtd_theme/static/css/fonts/Roboto-Slab-Regular.woff2 \
|
||||||
|
_themes/sphinx_rtd_theme/static/css/fonts/fontawesome-webfont.eot \
|
||||||
|
_themes/sphinx_rtd_theme/static/css/fonts/fontawesome-webfont.svg \
|
||||||
|
_themes/sphinx_rtd_theme/static/css/fonts/fontawesome-webfont.ttf \
|
||||||
|
_themes/sphinx_rtd_theme/static/css/fonts/fontawesome-webfont.woff \
|
||||||
|
_themes/sphinx_rtd_theme/static/css/fonts/fontawesome-webfont.woff2 \
|
||||||
|
_themes/sphinx_rtd_theme/static/css/fonts/lato-bold-italic.woff \
|
||||||
|
_themes/sphinx_rtd_theme/static/css/fonts/lato-bold-italic.woff2 \
|
||||||
|
_themes/sphinx_rtd_theme/static/css/fonts/lato-bold.woff \
|
||||||
|
_themes/sphinx_rtd_theme/static/css/fonts/lato-bold.woff2 \
|
||||||
|
_themes/sphinx_rtd_theme/static/css/fonts/lato-normal-italic.woff \
|
||||||
|
_themes/sphinx_rtd_theme/static/css/fonts/lato-normal-italic.woff2 \
|
||||||
|
_themes/sphinx_rtd_theme/static/css/fonts/lato-normal.woff \
|
||||||
|
_themes/sphinx_rtd_theme/static/css/fonts/lato-normal.woff2 \
|
||||||
|
_themes/sphinx_rtd_theme/static/css/theme.css \
|
||||||
|
_themes/sphinx_rtd_theme/static/js/badge_only.js \
|
||||||
|
_themes/sphinx_rtd_theme/static/js/theme.js \
|
||||||
|
_themes/sphinx_rtd_theme/theme.conf \
|
||||||
|
_themes/sphinx_rtd_theme/versions.html \
|
||||||
$(man_MANS) \
|
$(man_MANS) \
|
||||||
bash_completion/nghttp \
|
bash_completion/nghttp \
|
||||||
bash_completion/nghttpd \
|
bash_completion/nghttpd \
|
||||||
|
|||||||
@@ -68,7 +68,7 @@ The example follows::
|
|||||||
* Callback function invoked when |session| wants to send data to
|
* Callback function invoked when |session| wants to send data to
|
||||||
* remote peer.
|
* remote peer.
|
||||||
*/
|
*/
|
||||||
typedef nghttp2_ssize (*nghttp2_send_callback2)
|
typedef ssize_t (*nghttp2_send_callback)
|
||||||
(nghttp2_session *session,
|
(nghttp2_session *session,
|
||||||
const uint8_t *data, size_t length, int flags, void *user_data);
|
const uint8_t *data, size_t length, int flags, void *user_data);
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,14 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
"""
|
||||||
|
sphinxcontrib
|
||||||
|
~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
This package is a namespace package that contains all extensions
|
||||||
|
distributed in the ``sphinx-contrib`` distribution.
|
||||||
|
|
||||||
|
:copyright: Copyright 2007-2009 by the Sphinx team, see AUTHORS.
|
||||||
|
:license: BSD, see LICENSE for details.
|
||||||
|
"""
|
||||||
|
|
||||||
|
__import__('pkg_resources').declare_namespace(__name__)
|
||||||
|
|
||||||
|
|||||||
@@ -493,7 +493,7 @@ class RubyModuleIndex(Index):
|
|||||||
# list of all modules, sorted by module name
|
# list of all modules, sorted by module name
|
||||||
modules = sorted(_iteritems(self.domain.data['modules']),
|
modules = sorted(_iteritems(self.domain.data['modules']),
|
||||||
key=lambda x: x[0].lower())
|
key=lambda x: x[0].lower())
|
||||||
# sort out collapsible modules
|
# sort out collapsable modules
|
||||||
prev_modname = ''
|
prev_modname = ''
|
||||||
num_toplevels = 0
|
num_toplevels = 0
|
||||||
for modname, (docname, synopsis, platforms, deprecated) in modules:
|
for modname, (docname, synopsis, platforms, deprecated) in modules:
|
||||||
|
|||||||
34
doc/_themes/sphinx_rtd_theme/__init__.py
vendored
Normal file
34
doc/_themes/sphinx_rtd_theme/__init__.py
vendored
Normal file
@@ -0,0 +1,34 @@
|
|||||||
|
"""
|
||||||
|
Sphinx Read the Docs theme.
|
||||||
|
|
||||||
|
From https://github.com/ryan-roemer/sphinx-bootstrap-theme.
|
||||||
|
"""
|
||||||
|
|
||||||
|
from os import path
|
||||||
|
|
||||||
|
import sphinx
|
||||||
|
|
||||||
|
|
||||||
|
__version__ = '0.5.0'
|
||||||
|
__version_full__ = __version__
|
||||||
|
|
||||||
|
|
||||||
|
def get_html_theme_path():
|
||||||
|
"""Return list of HTML theme paths."""
|
||||||
|
cur_dir = path.abspath(path.dirname(path.dirname(__file__)))
|
||||||
|
return cur_dir
|
||||||
|
|
||||||
|
|
||||||
|
# See http://www.sphinx-doc.org/en/stable/theming.html#distribute-your-theme-as-a-python-package
|
||||||
|
def setup(app):
|
||||||
|
if sphinx.version_info >= (1, 6, 0):
|
||||||
|
# Register the theme that can be referenced without adding a theme path
|
||||||
|
app.add_html_theme('sphinx_rtd_theme', path.abspath(path.dirname(__file__)))
|
||||||
|
|
||||||
|
if sphinx.version_info >= (1, 8, 0):
|
||||||
|
# Add Sphinx message catalog for newer versions of Sphinx
|
||||||
|
# See http://www.sphinx-doc.org/en/master/extdev/appapi.html#sphinx.application.Sphinx.add_message_catalog
|
||||||
|
rtd_locale_path = path.join(path.abspath(path.dirname(__file__)), 'locale')
|
||||||
|
app.add_message_catalog('sphinx', rtd_locale_path)
|
||||||
|
|
||||||
|
return {'parallel_read_safe': True, 'parallel_write_safe': True}
|
||||||
84
doc/_themes/sphinx_rtd_theme/breadcrumbs.html
vendored
Normal file
84
doc/_themes/sphinx_rtd_theme/breadcrumbs.html
vendored
Normal file
@@ -0,0 +1,84 @@
|
|||||||
|
{# Support for Sphinx 1.3+ page_source_suffix, but don't break old builds. #}
|
||||||
|
|
||||||
|
{% if page_source_suffix %}
|
||||||
|
{% set suffix = page_source_suffix %}
|
||||||
|
{% else %}
|
||||||
|
{% set suffix = source_suffix %}
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
{% if meta is defined and meta is not none %}
|
||||||
|
{% set check_meta = True %}
|
||||||
|
{% else %}
|
||||||
|
{% set check_meta = False %}
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
{% if check_meta and 'github_url' in meta %}
|
||||||
|
{% set display_github = True %}
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
{% if check_meta and 'bitbucket_url' in meta %}
|
||||||
|
{% set display_bitbucket = True %}
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
{% if check_meta and 'gitlab_url' in meta %}
|
||||||
|
{% set display_gitlab = True %}
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
{% set display_vcs_links = display_vcs_links if display_vcs_links is defined else True %}
|
||||||
|
|
||||||
|
<div role="navigation" aria-label="breadcrumbs navigation">
|
||||||
|
|
||||||
|
<ul class="wy-breadcrumbs">
|
||||||
|
{% block breadcrumbs %}
|
||||||
|
<li><a href="{{ pathto(master_doc) }}" class="icon icon-home"></a> »</li>
|
||||||
|
{% for doc in parents %}
|
||||||
|
<li><a href="{{ doc.link|e }}">{{ doc.title }}</a> »</li>
|
||||||
|
{% endfor %}
|
||||||
|
<li>{{ title }}</li>
|
||||||
|
{% endblock %}
|
||||||
|
{% block breadcrumbs_aside %}
|
||||||
|
<li class="wy-breadcrumbs-aside">
|
||||||
|
{% if hasdoc(pagename) and display_vcs_links %}
|
||||||
|
{% if display_github %}
|
||||||
|
{% if check_meta and 'github_url' in meta %}
|
||||||
|
<!-- User defined GitHub URL -->
|
||||||
|
<a href="{{ meta['github_url'] }}" class="fa fa-github"> {{ _('Edit on GitHub') }}</a>
|
||||||
|
{% else %}
|
||||||
|
<a href="https://{{ github_host|default("github.com") }}/{{ github_user }}/{{ github_repo }}/{{ theme_vcs_pageview_mode|default("blob") }}/{{ github_version }}{{ conf_py_path }}{{ pagename }}{{ suffix }}" class="fa fa-github"> {{ _('Edit on GitHub') }}</a>
|
||||||
|
{% endif %}
|
||||||
|
{% elif display_bitbucket %}
|
||||||
|
{% if check_meta and 'bitbucket_url' in meta %}
|
||||||
|
<!-- User defined Bitbucket URL -->
|
||||||
|
<a href="{{ meta['bitbucket_url'] }}" class="fa fa-bitbucket"> {{ _('Edit on Bitbucket') }}</a>
|
||||||
|
{% else %}
|
||||||
|
<a href="https://bitbucket.org/{{ bitbucket_user }}/{{ bitbucket_repo }}/src/{{ bitbucket_version}}{{ conf_py_path }}{{ pagename }}{{ suffix }}?mode={{ theme_vcs_pageview_mode|default("view") }}" class="fa fa-bitbucket"> {{ _('Edit on Bitbucket') }}</a>
|
||||||
|
{% endif %}
|
||||||
|
{% elif display_gitlab %}
|
||||||
|
{% if check_meta and 'gitlab_url' in meta %}
|
||||||
|
<!-- User defined GitLab URL -->
|
||||||
|
<a href="{{ meta['gitlab_url'] }}" class="fa fa-gitlab"> {{ _('Edit on GitLab') }}</a>
|
||||||
|
{% else %}
|
||||||
|
<a href="https://{{ gitlab_host|default("gitlab.com") }}/{{ gitlab_user }}/{{ gitlab_repo }}/{{ theme_vcs_pageview_mode|default("blob") }}/{{ gitlab_version }}{{ conf_py_path }}{{ pagename }}{{ suffix }}" class="fa fa-gitlab"> {{ _('Edit on GitLab') }}</a>
|
||||||
|
{% endif %}
|
||||||
|
{% elif show_source and source_url_prefix %}
|
||||||
|
<a href="{{ source_url_prefix }}{{ pagename }}{{ suffix }}">{{ _('View page source') }}</a>
|
||||||
|
{% elif show_source and has_source and sourcename %}
|
||||||
|
<a href="{{ pathto('_sources/' + sourcename, true)|e }}" rel="nofollow"> {{ _('View page source') }}</a>
|
||||||
|
{% endif %}
|
||||||
|
{% endif %}
|
||||||
|
</li>
|
||||||
|
{% endblock %}
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
{% if (theme_prev_next_buttons_location == 'top' or theme_prev_next_buttons_location == 'both') and (next or prev) %}
|
||||||
|
<div class="rst-breadcrumbs-buttons" role="navigation" aria-label="breadcrumb navigation">
|
||||||
|
{% if next %}
|
||||||
|
<a href="{{ next.link|e }}" class="btn btn-neutral float-right" title="{{ next.title|striptags|e }}" accesskey="n">{{ _('Next') }} <span class="fa fa-arrow-circle-right"></span></a>
|
||||||
|
{% endif %}
|
||||||
|
{% if prev %}
|
||||||
|
<a href="{{ prev.link|e }}" class="btn btn-neutral float-left" title="{{ prev.title|striptags|e }}" accesskey="p"><span class="fa fa-arrow-circle-left"></span> {{ _('Previous') }}</a>
|
||||||
|
{% endif %}
|
||||||
|
</div>
|
||||||
|
{% endif %}
|
||||||
|
<hr/>
|
||||||
|
</div>
|
||||||
63
doc/_themes/sphinx_rtd_theme/footer.html
vendored
Normal file
63
doc/_themes/sphinx_rtd_theme/footer.html
vendored
Normal file
@@ -0,0 +1,63 @@
|
|||||||
|
<footer>
|
||||||
|
{% if (theme_prev_next_buttons_location == 'bottom' or theme_prev_next_buttons_location == 'both') and (next or prev) %}
|
||||||
|
<div class="rst-footer-buttons" role="navigation" aria-label="footer navigation">
|
||||||
|
{% if next %}
|
||||||
|
<a href="{{ next.link|e }}" class="btn btn-neutral float-right" title="{{ next.title|striptags|e }}" accesskey="n" rel="next">{{ _('Next') }} <span class="fa fa-arrow-circle-right"></span></a>
|
||||||
|
{% endif %}
|
||||||
|
{% if prev %}
|
||||||
|
<a href="{{ prev.link|e }}" class="btn btn-neutral float-left" title="{{ prev.title|striptags|e }}" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left"></span> {{ _('Previous') }}</a>
|
||||||
|
{% endif %}
|
||||||
|
</div>
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
<hr/>
|
||||||
|
|
||||||
|
<div role="contentinfo">
|
||||||
|
<p>
|
||||||
|
{%- if show_copyright %}
|
||||||
|
{%- if hasdoc('copyright') %}
|
||||||
|
{% set path = pathto('copyright') %}
|
||||||
|
{% set copyright = copyright|e %}
|
||||||
|
© <a href="{{ path }}">{% trans %}Copyright{% endtrans %}</a> {{ copyright }}
|
||||||
|
{%- else %}
|
||||||
|
{% set copyright = copyright|e %}
|
||||||
|
© {% trans %}Copyright{% endtrans %} {{ copyright }}
|
||||||
|
{%- endif %}
|
||||||
|
{%- endif %}
|
||||||
|
|
||||||
|
{%- if build_id and build_url %}
|
||||||
|
<span class="build">
|
||||||
|
{# Translators: Build is a noun, not a verb #}
|
||||||
|
{% trans %}Build{% endtrans %}
|
||||||
|
<a href="{{ build_url }}">{{ build_id }}</a>.
|
||||||
|
</span>
|
||||||
|
{%- elif commit %}
|
||||||
|
<span class="commit">
|
||||||
|
{# Translators: the phrase "revision" comes from Git, referring to a commit #}
|
||||||
|
{% trans %}Revision{% endtrans %} <code>{{ commit }}</code>.
|
||||||
|
</span>
|
||||||
|
{%- endif %}
|
||||||
|
{%- if last_updated %}
|
||||||
|
<span class="lastupdated">
|
||||||
|
{% trans last_updated=last_updated|e %}Last updated on {{ last_updated }}.{% endtrans %}
|
||||||
|
</span>
|
||||||
|
{%- endif %}
|
||||||
|
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
{%- if show_sphinx %}
|
||||||
|
{% set sphinx_web = '<a href="https://www.sphinx-doc.org/">Sphinx</a>' %}
|
||||||
|
{% set readthedocs_web = '<a href="https://readthedocs.org">Read the Docs</a>' %}
|
||||||
|
{# Translators: the variable "sphinx_web" is a link to the Sphinx project documentation with the text "Sphinx" #}
|
||||||
|
{% trans sphinx_web=sphinx_web, readthedocs_web=readthedocs_web %}Built with {{ sphinx_web }} using a{% endtrans %}
|
||||||
|
{# Translators: "theme" refers to a theme for Sphinx, which alters the appearance of the generated documenation #}
|
||||||
|
<a href="https://github.com/readthedocs/sphinx_rtd_theme">{% trans %}theme{% endtrans %}</a>
|
||||||
|
{# Translators: this is always used as "provided by Read the Docs", and should not imply Read the Docs is an author of the generated documentation. #}
|
||||||
|
{% trans %}provided by {{ readthedocs_web }}{% endtrans %}.
|
||||||
|
{%- endif %}
|
||||||
|
|
||||||
|
{%- block extrafooter %} {% endblock %}
|
||||||
|
|
||||||
|
</footer>
|
||||||
|
|
||||||
241
doc/_themes/sphinx_rtd_theme/layout.html
vendored
Normal file
241
doc/_themes/sphinx_rtd_theme/layout.html
vendored
Normal file
@@ -0,0 +1,241 @@
|
|||||||
|
{# TEMPLATE VAR SETTINGS #}
|
||||||
|
{%- set url_root = pathto('', 1) %}
|
||||||
|
{%- if url_root == '#' %}{% set url_root = '' %}{% endif %}
|
||||||
|
{%- if not embedded and docstitle %}
|
||||||
|
{%- set titlesuffix = " — "|safe + docstitle|e %}
|
||||||
|
{%- else %}
|
||||||
|
{%- set titlesuffix = "" %}
|
||||||
|
{%- endif %}
|
||||||
|
{%- set lang_attr = 'en' if language == None else (language | replace('_', '-')) %}
|
||||||
|
{%- set sphinx_writer = 'writer-html5' if html5_doctype else 'writer-html4' %}
|
||||||
|
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html class="{{ sphinx_writer }}" lang="{{ lang_attr }}" >
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
{{ metatags }}
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
|
{% block htmltitle %}
|
||||||
|
<title>{{ title|striptags|e }}{{ titlesuffix }}</title>
|
||||||
|
{% endblock %}
|
||||||
|
|
||||||
|
{# CSS #}
|
||||||
|
<link rel="stylesheet" href="{{ pathto('_static/' + style, 1) }}" type="text/css" />
|
||||||
|
<link rel="stylesheet" href="{{ pathto('_static/pygments.css', 1) }}" type="text/css" />
|
||||||
|
{%- for css in css_files %}
|
||||||
|
{%- if css|attr("rel") %}
|
||||||
|
<link rel="{{ css.rel }}" href="{{ pathto(css.filename, 1) }}" type="text/css"{% if css.title is not none %} title="{{ css.title }}"{% endif %} />
|
||||||
|
{%- else %}
|
||||||
|
<link rel="stylesheet" href="{{ pathto(css, 1) }}" type="text/css" />
|
||||||
|
{%- endif %}
|
||||||
|
{%- endfor %}
|
||||||
|
|
||||||
|
{%- for cssfile in extra_css_files %}
|
||||||
|
<link rel="stylesheet" href="{{ pathto(cssfile, 1) }}" type="text/css" />
|
||||||
|
{%- endfor %}
|
||||||
|
|
||||||
|
{# FAVICON #}
|
||||||
|
{% if favicon %}
|
||||||
|
<link rel="shortcut icon" href="{{ pathto('_static/' + favicon, 1) }}"/>
|
||||||
|
{% endif %}
|
||||||
|
{# CANONICAL URL #}
|
||||||
|
{% if theme_canonical_url %}
|
||||||
|
<link rel="canonical" href="{{ theme_canonical_url }}{{ pagename }}.html"/>
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
{# JAVASCRIPTS #}
|
||||||
|
{%- block scripts %}
|
||||||
|
<!--[if lt IE 9]>
|
||||||
|
<script src="{{ pathto('_static/js/html5shiv.min.js', 1) }}"></script>
|
||||||
|
<![endif]-->
|
||||||
|
{%- if not embedded %}
|
||||||
|
{# XXX Sphinx 1.8.0 made this an external js-file, quick fix until we refactor the template to inherert more blocks directly from sphinx #}
|
||||||
|
{% if sphinx_version >= "1.8.0" %}
|
||||||
|
<script type="text/javascript" id="documentation_options" data-url_root="{{ pathto('', 1) }}" src="{{ pathto('_static/documentation_options.js', 1) }}"></script>
|
||||||
|
{%- for scriptfile in script_files %}
|
||||||
|
{{ js_tag(scriptfile) }}
|
||||||
|
{%- endfor %}
|
||||||
|
{% else %}
|
||||||
|
<script type="text/javascript">
|
||||||
|
var DOCUMENTATION_OPTIONS = {
|
||||||
|
URL_ROOT:'{{ url_root }}',
|
||||||
|
VERSION:'{{ release|e }}',
|
||||||
|
LANGUAGE:'{{ language }}',
|
||||||
|
COLLAPSE_INDEX:false,
|
||||||
|
FILE_SUFFIX:'{{ '' if no_search_suffix else file_suffix }}',
|
||||||
|
HAS_SOURCE: {{ has_source|lower }},
|
||||||
|
SOURCELINK_SUFFIX: '{{ sourcelink_suffix }}'
|
||||||
|
};
|
||||||
|
</script>
|
||||||
|
{%- for scriptfile in script_files %}
|
||||||
|
<script type="text/javascript" src="{{ pathto(scriptfile, 1) }}"></script>
|
||||||
|
{%- endfor %}
|
||||||
|
{% endif %}
|
||||||
|
<script type="text/javascript" src="{{ pathto('_static/js/theme.js', 1) }}"></script>
|
||||||
|
|
||||||
|
{# OPENSEARCH #}
|
||||||
|
{%- if use_opensearch %}
|
||||||
|
<link rel="search" type="application/opensearchdescription+xml"
|
||||||
|
title="{% trans docstitle=docstitle|e %}Search within {{ docstitle }}{% endtrans %}"
|
||||||
|
href="{{ pathto('_static/opensearch.xml', 1) }}"/>
|
||||||
|
{%- endif %}
|
||||||
|
{%- endif %}
|
||||||
|
{%- endblock %}
|
||||||
|
|
||||||
|
{%- block linktags %}
|
||||||
|
{%- if hasdoc('about') %}
|
||||||
|
<link rel="author" title="{{ _('About these documents') }}" href="{{ pathto('about') }}" />
|
||||||
|
{%- endif %}
|
||||||
|
{%- if hasdoc('genindex') %}
|
||||||
|
<link rel="index" title="{{ _('Index') }}" href="{{ pathto('genindex') }}" />
|
||||||
|
{%- endif %}
|
||||||
|
{%- if hasdoc('search') %}
|
||||||
|
<link rel="search" title="{{ _('Search') }}" href="{{ pathto('search') }}" />
|
||||||
|
{%- endif %}
|
||||||
|
{%- if hasdoc('copyright') %}
|
||||||
|
<link rel="copyright" title="{{ _('Copyright') }}" href="{{ pathto('copyright') }}" />
|
||||||
|
{%- endif %}
|
||||||
|
{%- if next %}
|
||||||
|
<link rel="next" title="{{ next.title|striptags|e }}" href="{{ next.link|e }}" />
|
||||||
|
{%- endif %}
|
||||||
|
{%- if prev %}
|
||||||
|
<link rel="prev" title="{{ prev.title|striptags|e }}" href="{{ prev.link|e }}" />
|
||||||
|
{%- endif %}
|
||||||
|
{%- endblock %}
|
||||||
|
{%- block extrahead %} {% endblock %}
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body class="wy-body-for-nav">
|
||||||
|
|
||||||
|
{% block extrabody %} {% endblock %}
|
||||||
|
<div class="wy-grid-for-nav">
|
||||||
|
{# SIDE NAV, TOGGLES ON MOBILE #}
|
||||||
|
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
|
||||||
|
<div class="wy-side-scroll">
|
||||||
|
<div class="wy-side-nav-search" {% if theme_style_nav_header_background %} style="background: {{theme_style_nav_header_background}}" {% endif %}>
|
||||||
|
{% block sidebartitle %}
|
||||||
|
|
||||||
|
{% if logo and theme_logo_only %}
|
||||||
|
<a href="{{ pathto(master_doc) }}">
|
||||||
|
{% else %}
|
||||||
|
<a href="{{ pathto(master_doc) }}" class="icon icon-home"> {{ project }}
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
{% if logo %}
|
||||||
|
{# Not strictly valid HTML, but it's the only way to display/scale
|
||||||
|
it properly, without weird scripting or heaps of work
|
||||||
|
#}
|
||||||
|
<img src="{{ pathto('_static/' + logo, 1) }}" class="logo" alt="{{ _('Logo') }}"/>
|
||||||
|
{% endif %}
|
||||||
|
</a>
|
||||||
|
|
||||||
|
{% if theme_display_version %}
|
||||||
|
{%- set nav_version = version %}
|
||||||
|
{% if READTHEDOCS and current_version %}
|
||||||
|
{%- set nav_version = current_version %}
|
||||||
|
{% endif %}
|
||||||
|
{% if nav_version %}
|
||||||
|
<div class="version">
|
||||||
|
{{ nav_version }}
|
||||||
|
</div>
|
||||||
|
{% endif %}
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
{% include "searchbox.html" %}
|
||||||
|
|
||||||
|
{% endblock %}
|
||||||
|
</div>
|
||||||
|
|
||||||
|
{% block navigation %}
|
||||||
|
<div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation">
|
||||||
|
{% block menu %}
|
||||||
|
{#
|
||||||
|
The singlehtml builder doesn't handle this toctree call when the
|
||||||
|
toctree is empty. Skip building this for now.
|
||||||
|
#}
|
||||||
|
{% if 'singlehtml' not in builder %}
|
||||||
|
{% set global_toc = toctree(maxdepth=theme_navigation_depth|int,
|
||||||
|
collapse=theme_collapse_navigation|tobool,
|
||||||
|
includehidden=theme_includehidden|tobool,
|
||||||
|
titles_only=theme_titles_only|tobool) %}
|
||||||
|
{% endif %}
|
||||||
|
{% if global_toc %}
|
||||||
|
{{ global_toc }}
|
||||||
|
{% else %}
|
||||||
|
<!-- Local TOC -->
|
||||||
|
<div class="local-toc">{{ toc }}</div>
|
||||||
|
{% endif %}
|
||||||
|
{% endblock %}
|
||||||
|
</div>
|
||||||
|
{% endblock %}
|
||||||
|
</div>
|
||||||
|
</nav>
|
||||||
|
|
||||||
|
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">
|
||||||
|
|
||||||
|
{# MOBILE NAV, TRIGGLES SIDE NAV ON TOGGLE #}
|
||||||
|
<nav class="wy-nav-top" aria-label="top navigation">
|
||||||
|
{% block mobile_nav %}
|
||||||
|
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
|
||||||
|
<a href="{{ pathto(master_doc) }}">{{ project }}</a>
|
||||||
|
{% endblock %}
|
||||||
|
</nav>
|
||||||
|
|
||||||
|
|
||||||
|
<div class="wy-nav-content">
|
||||||
|
{%- block content %}
|
||||||
|
{% if theme_style_external_links|tobool %}
|
||||||
|
<div class="rst-content style-external-links">
|
||||||
|
{% else %}
|
||||||
|
<div class="rst-content">
|
||||||
|
{% endif %}
|
||||||
|
{% include "breadcrumbs.html" %}
|
||||||
|
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
|
||||||
|
{%- block document %}
|
||||||
|
<div itemprop="articleBody">
|
||||||
|
{% block body %}{% endblock %}
|
||||||
|
</div>
|
||||||
|
{% if self.comments()|trim %}
|
||||||
|
<div class="articleComments">
|
||||||
|
{% block comments %}{% endblock %}
|
||||||
|
</div>
|
||||||
|
{% endif%}
|
||||||
|
</div>
|
||||||
|
{%- endblock %}
|
||||||
|
{% include "footer.html" %}
|
||||||
|
</div>
|
||||||
|
{%- endblock %}
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</section>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
{% include "versions.html" %}
|
||||||
|
|
||||||
|
<script type="text/javascript">
|
||||||
|
jQuery(function () {
|
||||||
|
SphinxRtdTheme.Navigation.enable({{ 'true' if theme_sticky_navigation|tobool else 'false' }});
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
|
||||||
|
{# Do not conflict with RTD insertion of analytics script #}
|
||||||
|
{% if not READTHEDOCS %}
|
||||||
|
{% if theme_analytics_id %}
|
||||||
|
<!-- Theme Analytics -->
|
||||||
|
<script>
|
||||||
|
(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
|
||||||
|
(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
|
||||||
|
m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
|
||||||
|
})(window,document,'script','https://www.google-analytics.com/analytics.js','ga');
|
||||||
|
|
||||||
|
ga('create', '{{ theme_analytics_id }}', 'auto');
|
||||||
|
ga('send', 'pageview');
|
||||||
|
</script>
|
||||||
|
|
||||||
|
{% endif %}
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
{%- block footer %} {% endblock %}
|
||||||
|
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
BIN
doc/_themes/sphinx_rtd_theme/locale/de/LC_MESSAGES/sphinx.mo
vendored
Normal file
BIN
doc/_themes/sphinx_rtd_theme/locale/de/LC_MESSAGES/sphinx.mo
vendored
Normal file
Binary file not shown.
143
doc/_themes/sphinx_rtd_theme/locale/de/LC_MESSAGES/sphinx.po
vendored
Normal file
143
doc/_themes/sphinx_rtd_theme/locale/de/LC_MESSAGES/sphinx.po
vendored
Normal file
@@ -0,0 +1,143 @@
|
|||||||
|
# English translations for sphinx_rtd_theme.
|
||||||
|
# Copyright (C) 2019 ORGANIZATION
|
||||||
|
# This file is distributed under the same license as the sphinx_rtd_theme
|
||||||
|
# project.
|
||||||
|
# FIRST AUTHOR <EMAIL@ADDRESS>, 2019.
|
||||||
|
#
|
||||||
|
# Translators:
|
||||||
|
# Tom Kunze <transifex.com@tomabrafix.de>, 2019
|
||||||
|
#
|
||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"Project-Id-Version: sphinx_rtd_theme 0.4.3.dev0\n"
|
||||||
|
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
|
||||||
|
"POT-Creation-Date: 2020-05-06 13:38-0600\n"
|
||||||
|
"PO-Revision-Date: 2019-07-16 21:44+0000\n"
|
||||||
|
"Last-Translator: Tom Kunze <transifex.com@tomabrafix.de>, 2019\n"
|
||||||
|
"Language-Team: German (https://www.transifex.com/readthedocs/teams/101354/de/)\n"
|
||||||
|
"MIME-Version: 1.0\n"
|
||||||
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
|
"Generated-By: Babel 2.8.0\n"
|
||||||
|
"Language: de\n"
|
||||||
|
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/breadcrumbs.html:43 sphinx_rtd_theme/breadcrumbs.html:45
|
||||||
|
msgid "Edit on GitHub"
|
||||||
|
msgstr "Auf GitHub bearbeiten"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/breadcrumbs.html:50 sphinx_rtd_theme/breadcrumbs.html:52
|
||||||
|
msgid "Edit on Bitbucket"
|
||||||
|
msgstr "Auf Bitbucket bearbeiten"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/breadcrumbs.html:57 sphinx_rtd_theme/breadcrumbs.html:59
|
||||||
|
msgid "Edit on GitLab"
|
||||||
|
msgstr "Auf GitLab bearbeiten"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/breadcrumbs.html:62 sphinx_rtd_theme/breadcrumbs.html:64
|
||||||
|
msgid "View page source"
|
||||||
|
msgstr "Quelltext anzeigen"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/breadcrumbs.html:74 sphinx_rtd_theme/footer.html:5
|
||||||
|
msgid "Next"
|
||||||
|
msgstr "Weiter"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/breadcrumbs.html:77 sphinx_rtd_theme/footer.html:8
|
||||||
|
msgid "Previous"
|
||||||
|
msgstr "Zurück"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/footer.html:21 sphinx_rtd_theme/footer.html:24
|
||||||
|
#: sphinx_rtd_theme/layout.html:96
|
||||||
|
msgid "Copyright"
|
||||||
|
msgstr "Copyright"
|
||||||
|
|
||||||
|
#. Build is a noun, not a verb
|
||||||
|
#: sphinx_rtd_theme/footer.html:31
|
||||||
|
msgid "Build"
|
||||||
|
msgstr "Build"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/footer.html:41
|
||||||
|
#, python-format
|
||||||
|
msgid "Last updated on %(last_updated)s."
|
||||||
|
msgstr "Zuletzt aktualisiert am %(last_updated)s."
|
||||||
|
|
||||||
|
#. the variable "sphinx_web" is a link to the Sphinx project documentation
|
||||||
|
#. with
|
||||||
|
#. the text "Sphinx"
|
||||||
|
#: sphinx_rtd_theme/footer.html:52
|
||||||
|
#, python-format
|
||||||
|
msgid "Built with %(sphinx_web)s using a"
|
||||||
|
msgstr "Erstellt mit %(sphinx_web)s mit einem"
|
||||||
|
|
||||||
|
#. this is always used as "provided by Read the Docs", and should not imply
|
||||||
|
#. Read the Docs is an author of the generated documentation.
|
||||||
|
#: sphinx_rtd_theme/footer.html:56
|
||||||
|
#, python-format
|
||||||
|
msgid "provided by %(readthedocs_web)s"
|
||||||
|
msgstr "bereitgestellt von %(readthedocs_web)s"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/layout.html:79
|
||||||
|
#, python-format
|
||||||
|
msgid "Search within %(docstitle)s"
|
||||||
|
msgstr "%(docstitle)s durchsuchen"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/layout.html:87
|
||||||
|
msgid "About these documents"
|
||||||
|
msgstr "Über diese Dokumentation"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/layout.html:90
|
||||||
|
msgid "Index"
|
||||||
|
msgstr "Index"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/layout.html:93 sphinx_rtd_theme/search.html:11
|
||||||
|
msgid "Search"
|
||||||
|
msgstr "Suche"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/layout.html:128
|
||||||
|
msgid "Logo"
|
||||||
|
msgstr "Logo"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/search.html:29
|
||||||
|
msgid "Please activate JavaScript to enable the search functionality."
|
||||||
|
msgstr "Bitte aktiviere JavaScript, um die Suchfunktion zu nutzen."
|
||||||
|
|
||||||
|
#. Search is a noun, not a verb
|
||||||
|
#: sphinx_rtd_theme/search.html:37
|
||||||
|
msgid "Search Results"
|
||||||
|
msgstr "Suchergebnisse"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/search.html:39
|
||||||
|
msgid ""
|
||||||
|
"Your search did not match any documents. Please make sure that all words are"
|
||||||
|
" spelled correctly and that you've selected enough categories."
|
||||||
|
msgstr ""
|
||||||
|
"Es wurden keine mit deiner Suchanfrage übereinstimmenden Dokumente gefunden."
|
||||||
|
" Achte darauf, dass alle Wörter richtig geschrieben sind und dass genug "
|
||||||
|
"Kategorien ausgewählt sind."
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/searchbox.html:4
|
||||||
|
msgid "Search docs"
|
||||||
|
msgstr "Dokumentation durchsuchen"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/versions.html:11
|
||||||
|
msgid "Versions"
|
||||||
|
msgstr "Versionen"
|
||||||
|
|
||||||
|
#. The phrase "Read the Docs" is not translated
|
||||||
|
#: sphinx_rtd_theme/versions.html:24
|
||||||
|
msgid "On Read the Docs"
|
||||||
|
msgstr "Auf Read the Docs"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/versions.html:26
|
||||||
|
msgid "Project Home"
|
||||||
|
msgstr "Projektübersicht"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/versions.html:29
|
||||||
|
msgid "Builds"
|
||||||
|
msgstr "Builds"
|
||||||
|
|
||||||
|
#~ msgid "Docs"
|
||||||
|
#~ msgstr "Dokumentation"
|
||||||
|
|
||||||
|
#~ msgid "Free document hosting provided by"
|
||||||
|
#~ msgstr "Kostenloses Dokumentationen-Hosting zur Verfügung gestellt von"
|
||||||
BIN
doc/_themes/sphinx_rtd_theme/locale/en/LC_MESSAGES/sphinx.mo
vendored
Normal file
BIN
doc/_themes/sphinx_rtd_theme/locale/en/LC_MESSAGES/sphinx.mo
vendored
Normal file
Binary file not shown.
156
doc/_themes/sphinx_rtd_theme/locale/en/LC_MESSAGES/sphinx.po
vendored
Normal file
156
doc/_themes/sphinx_rtd_theme/locale/en/LC_MESSAGES/sphinx.po
vendored
Normal file
@@ -0,0 +1,156 @@
|
|||||||
|
# English translations for sphinx_rtd_theme.
|
||||||
|
# Copyright (C) 2019 ORGANIZATION
|
||||||
|
# This file is distributed under the same license as the sphinx_rtd_theme
|
||||||
|
# project.
|
||||||
|
# FIRST AUTHOR <EMAIL@ADDRESS>, 2019.
|
||||||
|
#
|
||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"Project-Id-Version: sphinx_rtd_theme 0.4.3.dev0\n"
|
||||||
|
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
|
||||||
|
"POT-Creation-Date: 2020-05-06 13:38-0600\n"
|
||||||
|
"PO-Revision-Date: 2019-07-16 15:43-0600\n"
|
||||||
|
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||||
|
"Language: en\n"
|
||||||
|
"Language-Team: en <LL@li.org>\n"
|
||||||
|
"Plural-Forms: nplurals=2; plural=(n != 1)\n"
|
||||||
|
"MIME-Version: 1.0\n"
|
||||||
|
"Content-Type: text/plain; charset=utf-8\n"
|
||||||
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
|
"Generated-By: Babel 2.8.0\n"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/breadcrumbs.html:43 sphinx_rtd_theme/breadcrumbs.html:45
|
||||||
|
msgid "Edit on GitHub"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/breadcrumbs.html:50 sphinx_rtd_theme/breadcrumbs.html:52
|
||||||
|
msgid "Edit on Bitbucket"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/breadcrumbs.html:57 sphinx_rtd_theme/breadcrumbs.html:59
|
||||||
|
msgid "Edit on GitLab"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/breadcrumbs.html:62 sphinx_rtd_theme/breadcrumbs.html:64
|
||||||
|
msgid "View page source"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/breadcrumbs.html:74 sphinx_rtd_theme/footer.html:5
|
||||||
|
msgid "Next"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/breadcrumbs.html:77 sphinx_rtd_theme/footer.html:8
|
||||||
|
msgid "Previous"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/footer.html:21 sphinx_rtd_theme/footer.html:24
|
||||||
|
#: sphinx_rtd_theme/layout.html:96
|
||||||
|
msgid "Copyright"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. Build is a noun, not a verb
|
||||||
|
#: sphinx_rtd_theme/footer.html:31
|
||||||
|
msgid "Build"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. the phrase "revision" comes from Git, referring to a commit
|
||||||
|
#: sphinx_rtd_theme/footer.html:37
|
||||||
|
msgid "Revision"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/footer.html:41
|
||||||
|
#, python-format
|
||||||
|
msgid "Last updated on %(last_updated)s."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. the variable "sphinx_web" is a link to the Sphinx project documentation with
|
||||||
|
#. the text "Sphinx"
|
||||||
|
#: sphinx_rtd_theme/footer.html:52
|
||||||
|
#, python-format
|
||||||
|
msgid "Built with %(sphinx_web)s using a"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. "theme" refers to a theme for Sphinx, which alters the appearance of the
|
||||||
|
#. generated documenation
|
||||||
|
#: sphinx_rtd_theme/footer.html:54
|
||||||
|
msgid "theme"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. this is always used as "provided by Read the Docs", and should not imply
|
||||||
|
#. Read the Docs is an author of the generated documentation.
|
||||||
|
#: sphinx_rtd_theme/footer.html:56
|
||||||
|
#, python-format
|
||||||
|
msgid "provided by %(readthedocs_web)s"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/layout.html:79
|
||||||
|
#, python-format
|
||||||
|
msgid "Search within %(docstitle)s"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/layout.html:87
|
||||||
|
msgid "About these documents"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/layout.html:90
|
||||||
|
msgid "Index"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/layout.html:93 sphinx_rtd_theme/search.html:11
|
||||||
|
msgid "Search"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/layout.html:121
|
||||||
|
msgid "Documentation Home"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/layout.html:128
|
||||||
|
msgid "Logo"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/search.html:29
|
||||||
|
msgid "Please activate JavaScript to enable the search functionality."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. Search is a noun, not a verb
|
||||||
|
#: sphinx_rtd_theme/search.html:37
|
||||||
|
msgid "Search Results"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/search.html:39
|
||||||
|
msgid ""
|
||||||
|
"Your search did not match any documents. Please make sure that all words "
|
||||||
|
"are spelled correctly and that you've selected enough categories."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/searchbox.html:4
|
||||||
|
msgid "Search docs"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/versions.html:11
|
||||||
|
msgid "Versions"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/versions.html:17
|
||||||
|
msgid "Downloads"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. The phrase "Read the Docs" is not translated
|
||||||
|
#: sphinx_rtd_theme/versions.html:24
|
||||||
|
msgid "On Read the Docs"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/versions.html:26
|
||||||
|
msgid "Project Home"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/versions.html:29
|
||||||
|
msgid "Builds"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#~ msgid "Docs"
|
||||||
|
#~ msgstr ""
|
||||||
|
|
||||||
|
#~ msgid "Free document hosting provided by"
|
||||||
|
#~ msgstr ""
|
||||||
|
|
||||||
BIN
doc/_themes/sphinx_rtd_theme/locale/es/LC_MESSAGES/sphinx.mo
vendored
Normal file
BIN
doc/_themes/sphinx_rtd_theme/locale/es/LC_MESSAGES/sphinx.mo
vendored
Normal file
Binary file not shown.
164
doc/_themes/sphinx_rtd_theme/locale/es/LC_MESSAGES/sphinx.po
vendored
Normal file
164
doc/_themes/sphinx_rtd_theme/locale/es/LC_MESSAGES/sphinx.po
vendored
Normal file
@@ -0,0 +1,164 @@
|
|||||||
|
# English translations for sphinx_rtd_theme.
|
||||||
|
# Copyright (C) 2019 ORGANIZATION
|
||||||
|
# This file is distributed under the same license as the sphinx_rtd_theme
|
||||||
|
# project.
|
||||||
|
# FIRST AUTHOR <EMAIL@ADDRESS>, 2019.
|
||||||
|
#
|
||||||
|
# Translators:
|
||||||
|
# Anthony <aj@ohess.org>, 2019
|
||||||
|
# Leonardo J. Caballero G. <leonardocaballero@gmail.com>, 2020
|
||||||
|
#
|
||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"Project-Id-Version: sphinx_rtd_theme 0.4.3.dev0\n"
|
||||||
|
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
|
||||||
|
"POT-Creation-Date: 2020-05-06 13:38-0600\n"
|
||||||
|
"PO-Revision-Date: 2019-07-16 21:44+0000\n"
|
||||||
|
"Last-Translator: Leonardo J. Caballero G. <leonardocaballero@gmail.com>, 2020\n"
|
||||||
|
"Language-Team: Spanish (https://www.transifex.com/readthedocs/teams/101354/es/)\n"
|
||||||
|
"MIME-Version: 1.0\n"
|
||||||
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
|
"Generated-By: Babel 2.8.0\n"
|
||||||
|
"Language: es\n"
|
||||||
|
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/breadcrumbs.html:43 sphinx_rtd_theme/breadcrumbs.html:45
|
||||||
|
msgid "Edit on GitHub"
|
||||||
|
msgstr "Editar en GitHub"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/breadcrumbs.html:50 sphinx_rtd_theme/breadcrumbs.html:52
|
||||||
|
msgid "Edit on Bitbucket"
|
||||||
|
msgstr "Editar en Bitbucket"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/breadcrumbs.html:57 sphinx_rtd_theme/breadcrumbs.html:59
|
||||||
|
msgid "Edit on GitLab"
|
||||||
|
msgstr "Editar en GitLab"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/breadcrumbs.html:62 sphinx_rtd_theme/breadcrumbs.html:64
|
||||||
|
msgid "View page source"
|
||||||
|
msgstr "Ver código fuente de la página"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/breadcrumbs.html:74 sphinx_rtd_theme/footer.html:5
|
||||||
|
msgid "Next"
|
||||||
|
msgstr "Siguiente"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/breadcrumbs.html:77 sphinx_rtd_theme/footer.html:8
|
||||||
|
msgid "Previous"
|
||||||
|
msgstr "Anterior"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/footer.html:21 sphinx_rtd_theme/footer.html:24
|
||||||
|
#: sphinx_rtd_theme/layout.html:96
|
||||||
|
msgid "Copyright"
|
||||||
|
msgstr "Derechos de autor"
|
||||||
|
|
||||||
|
#. Build is a noun, not a verb
|
||||||
|
#: sphinx_rtd_theme/footer.html:31
|
||||||
|
msgid "Build"
|
||||||
|
msgstr "Construido"
|
||||||
|
|
||||||
|
#. the phrase "revision" comes from Git, referring to a commit
|
||||||
|
#: sphinx_rtd_theme/footer.html:37
|
||||||
|
msgid "Revision"
|
||||||
|
msgstr "Revisión"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/footer.html:41
|
||||||
|
#, python-format
|
||||||
|
msgid "Last updated on %(last_updated)s."
|
||||||
|
msgstr "Actualizado por última vez en %(last_updated)s."
|
||||||
|
|
||||||
|
#. the variable "sphinx_web" is a link to the Sphinx project documentation
|
||||||
|
#. with
|
||||||
|
#. the text "Sphinx"
|
||||||
|
#: sphinx_rtd_theme/footer.html:52
|
||||||
|
#, python-format
|
||||||
|
msgid "Built with %(sphinx_web)s using a"
|
||||||
|
msgstr "Construido con %(sphinx_web)s usando un"
|
||||||
|
|
||||||
|
#. "theme" refers to a theme for Sphinx, which alters the appearance of the
|
||||||
|
#. generated documenation
|
||||||
|
#: sphinx_rtd_theme/footer.html:54
|
||||||
|
msgid "theme"
|
||||||
|
msgstr "tema"
|
||||||
|
|
||||||
|
#. this is always used as "provided by Read the Docs", and should not imply
|
||||||
|
#. Read the Docs is an author of the generated documentation.
|
||||||
|
#: sphinx_rtd_theme/footer.html:56
|
||||||
|
#, python-format
|
||||||
|
msgid "provided by %(readthedocs_web)s"
|
||||||
|
msgstr "proporcionado por %(readthedocs_web)s"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/layout.html:79
|
||||||
|
#, python-format
|
||||||
|
msgid "Search within %(docstitle)s"
|
||||||
|
msgstr "Buscar en %(docstitle)s"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/layout.html:87
|
||||||
|
msgid "About these documents"
|
||||||
|
msgstr "Sobre esta documentación"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/layout.html:90
|
||||||
|
msgid "Index"
|
||||||
|
msgstr "Índice"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/layout.html:93 sphinx_rtd_theme/search.html:11
|
||||||
|
msgid "Search"
|
||||||
|
msgstr "Búsqueda"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/layout.html:121
|
||||||
|
msgid "Documentation Home"
|
||||||
|
msgstr "Inicio de Documentación"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/layout.html:128
|
||||||
|
msgid "Logo"
|
||||||
|
msgstr "Logotipo"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/search.html:29
|
||||||
|
msgid "Please activate JavaScript to enable the search functionality."
|
||||||
|
msgstr ""
|
||||||
|
"Por favor, active JavaScript para habilitar la funcionalidad de búsqueda."
|
||||||
|
|
||||||
|
#. Search is a noun, not a verb
|
||||||
|
#: sphinx_rtd_theme/search.html:37
|
||||||
|
msgid "Search Results"
|
||||||
|
msgstr "Resultados de la búsqueda"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/search.html:39
|
||||||
|
msgid ""
|
||||||
|
"Your search did not match any documents. Please make sure that all words are"
|
||||||
|
" spelled correctly and that you've selected enough categories."
|
||||||
|
msgstr ""
|
||||||
|
"Su búsqueda no coincide con ningún documento. Por favor, asegúrese de que "
|
||||||
|
"todas las palabras estén correctamente escritas y que usted haya "
|
||||||
|
"seleccionado las suficientes categorías."
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/searchbox.html:4
|
||||||
|
msgid "Search docs"
|
||||||
|
msgstr "Buscar documentos"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/versions.html:11
|
||||||
|
msgid "Versions"
|
||||||
|
msgstr "Versiones"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/versions.html:17
|
||||||
|
msgid "Downloads"
|
||||||
|
msgstr "Descargas"
|
||||||
|
|
||||||
|
#. The phrase "Read the Docs" is not translated
|
||||||
|
#: sphinx_rtd_theme/versions.html:24
|
||||||
|
msgid "On Read the Docs"
|
||||||
|
msgstr "En Read the Docs"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/versions.html:26
|
||||||
|
msgid "Project Home"
|
||||||
|
msgstr "Página de Proyecto"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/versions.html:29
|
||||||
|
msgid "Builds"
|
||||||
|
msgstr "Construcciones"
|
||||||
|
|
||||||
|
#~ msgid "Docs"
|
||||||
|
#~ msgstr "Documentos"
|
||||||
|
|
||||||
|
#~ msgid "Free document hosting provided by"
|
||||||
|
#~ msgstr "Alojamiento gratuito de documentos proporcionado por"
|
||||||
BIN
doc/_themes/sphinx_rtd_theme/locale/et/LC_MESSAGES/sphinx.mo
vendored
Normal file
BIN
doc/_themes/sphinx_rtd_theme/locale/et/LC_MESSAGES/sphinx.mo
vendored
Normal file
Binary file not shown.
155
doc/_themes/sphinx_rtd_theme/locale/et/LC_MESSAGES/sphinx.po
vendored
Normal file
155
doc/_themes/sphinx_rtd_theme/locale/et/LC_MESSAGES/sphinx.po
vendored
Normal file
@@ -0,0 +1,155 @@
|
|||||||
|
# English translations for sphinx_rtd_theme.
|
||||||
|
# Copyright (C) 2019 ORGANIZATION
|
||||||
|
# This file is distributed under the same license as the sphinx_rtd_theme
|
||||||
|
# project.
|
||||||
|
# FIRST AUTHOR <EMAIL@ADDRESS>, 2019.
|
||||||
|
#
|
||||||
|
# Translators:
|
||||||
|
# Anthony <aj@ohess.org>, 2020
|
||||||
|
# Ivar Smolin <okul@linux.ee>, 2020
|
||||||
|
#
|
||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"Project-Id-Version: sphinx_rtd_theme 0.4.3.dev0\n"
|
||||||
|
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
|
||||||
|
"POT-Creation-Date: 2020-05-06 13:38-0600\n"
|
||||||
|
"PO-Revision-Date: 2019-07-16 21:44+0000\n"
|
||||||
|
"Last-Translator: Ivar Smolin <okul@linux.ee>, 2020\n"
|
||||||
|
"Language-Team: Estonian (https://www.transifex.com/readthedocs/teams/101354/et/)\n"
|
||||||
|
"MIME-Version: 1.0\n"
|
||||||
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
|
"Generated-By: Babel 2.8.0\n"
|
||||||
|
"Language: et\n"
|
||||||
|
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/breadcrumbs.html:43 sphinx_rtd_theme/breadcrumbs.html:45
|
||||||
|
msgid "Edit on GitHub"
|
||||||
|
msgstr "Muuda GitHubis"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/breadcrumbs.html:50 sphinx_rtd_theme/breadcrumbs.html:52
|
||||||
|
msgid "Edit on Bitbucket"
|
||||||
|
msgstr "Muuda Bitbucketis"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/breadcrumbs.html:57 sphinx_rtd_theme/breadcrumbs.html:59
|
||||||
|
msgid "Edit on GitLab"
|
||||||
|
msgstr "Muuda GitLabis"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/breadcrumbs.html:62 sphinx_rtd_theme/breadcrumbs.html:64
|
||||||
|
msgid "View page source"
|
||||||
|
msgstr "Vaata lehe lähtekoodi"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/breadcrumbs.html:74 sphinx_rtd_theme/footer.html:5
|
||||||
|
msgid "Next"
|
||||||
|
msgstr "Järgmine"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/breadcrumbs.html:77 sphinx_rtd_theme/footer.html:8
|
||||||
|
msgid "Previous"
|
||||||
|
msgstr "Eelmine"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/footer.html:21 sphinx_rtd_theme/footer.html:24
|
||||||
|
#: sphinx_rtd_theme/layout.html:96
|
||||||
|
msgid "Copyright"
|
||||||
|
msgstr "Autoriõigus"
|
||||||
|
|
||||||
|
#. Build is a noun, not a verb
|
||||||
|
#: sphinx_rtd_theme/footer.html:31
|
||||||
|
msgid "Build"
|
||||||
|
msgstr "Ehitus"
|
||||||
|
|
||||||
|
#. the phrase "revision" comes from Git, referring to a commit
|
||||||
|
#: sphinx_rtd_theme/footer.html:37
|
||||||
|
msgid "Revision"
|
||||||
|
msgstr "Redaktsioon"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/footer.html:41
|
||||||
|
#, python-format
|
||||||
|
msgid "Last updated on %(last_updated)s."
|
||||||
|
msgstr "Viimati uuendatud %(last_updated)s."
|
||||||
|
|
||||||
|
#. the variable "sphinx_web" is a link to the Sphinx project documentation
|
||||||
|
#. with
|
||||||
|
#. the text "Sphinx"
|
||||||
|
#: sphinx_rtd_theme/footer.html:52
|
||||||
|
#, python-format
|
||||||
|
msgid "Built with %(sphinx_web)s using a"
|
||||||
|
msgstr "Ehitatud %(sphinx_web)s'iga,"
|
||||||
|
|
||||||
|
#. "theme" refers to a theme for Sphinx, which alters the appearance of the
|
||||||
|
#. generated documenation
|
||||||
|
#: sphinx_rtd_theme/footer.html:54
|
||||||
|
msgid "theme"
|
||||||
|
msgstr "kujundusteema"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/layout.html:79
|
||||||
|
#, python-format
|
||||||
|
msgid "Search within %(docstitle)s"
|
||||||
|
msgstr "Otsi dokumendist %(docstitle)s"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/layout.html:87
|
||||||
|
msgid "About these documents"
|
||||||
|
msgstr "Nende dokumentide kirjeldused"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/layout.html:90
|
||||||
|
msgid "Index"
|
||||||
|
msgstr "Indeks"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/layout.html:93 sphinx_rtd_theme/search.html:11
|
||||||
|
msgid "Search"
|
||||||
|
msgstr "Otsing"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/layout.html:121
|
||||||
|
msgid "Documentation Home"
|
||||||
|
msgstr "Dokumentatsiooni kodu"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/layout.html:128
|
||||||
|
msgid "Logo"
|
||||||
|
msgstr "Logo"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/search.html:29
|
||||||
|
msgid "Please activate JavaScript to enable the search functionality."
|
||||||
|
msgstr "Otsimisfunktsiooni lubamiseks aktiveeri palun JavaScript"
|
||||||
|
|
||||||
|
#. Search is a noun, not a verb
|
||||||
|
#: sphinx_rtd_theme/search.html:37
|
||||||
|
msgid "Search Results"
|
||||||
|
msgstr "Otsingu tulemused"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/search.html:39
|
||||||
|
msgid ""
|
||||||
|
"Your search did not match any documents. Please make sure that all words are"
|
||||||
|
" spelled correctly and that you've selected enough categories."
|
||||||
|
msgstr ""
|
||||||
|
"Sinu otsingule ei vastanud ükski dokument. Palun veendu, et kõik sisestatud "
|
||||||
|
"sõnad on õigesti kirjutatud ja sa oled valikud piisaval hulgal kategooriaid."
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/searchbox.html:4
|
||||||
|
msgid "Search docs"
|
||||||
|
msgstr "Otsi dokumente"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/versions.html:11
|
||||||
|
msgid "Versions"
|
||||||
|
msgstr "Versioonid"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/versions.html:17
|
||||||
|
msgid "Downloads"
|
||||||
|
msgstr "Allalaadimised"
|
||||||
|
|
||||||
|
#. The phrase "Read the Docs" is not translated
|
||||||
|
#: sphinx_rtd_theme/versions.html:24
|
||||||
|
msgid "On Read the Docs"
|
||||||
|
msgstr "Saidil Read the Docs"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/versions.html:26
|
||||||
|
msgid "Project Home"
|
||||||
|
msgstr "Projekti kodu"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/versions.html:29
|
||||||
|
msgid "Builds"
|
||||||
|
msgstr "Ehitused"
|
||||||
|
|
||||||
|
#~ msgid "Docs"
|
||||||
|
#~ msgstr "Dokumendid"
|
||||||
|
|
||||||
|
#~ msgid "Free document hosting provided by"
|
||||||
|
#~ msgstr "Dokumentatsiooni majutab tasuta"
|
||||||
BIN
doc/_themes/sphinx_rtd_theme/locale/fr/LC_MESSAGES/sphinx.mo
vendored
Normal file
BIN
doc/_themes/sphinx_rtd_theme/locale/fr/LC_MESSAGES/sphinx.mo
vendored
Normal file
Binary file not shown.
154
doc/_themes/sphinx_rtd_theme/locale/fr/LC_MESSAGES/sphinx.po
vendored
Normal file
154
doc/_themes/sphinx_rtd_theme/locale/fr/LC_MESSAGES/sphinx.po
vendored
Normal file
@@ -0,0 +1,154 @@
|
|||||||
|
# English translations for sphinx_rtd_theme.
|
||||||
|
# Copyright (C) 2019 ORGANIZATION
|
||||||
|
# This file is distributed under the same license as the sphinx_rtd_theme
|
||||||
|
# project.
|
||||||
|
# FIRST AUTHOR <EMAIL@ADDRESS>, 2019.
|
||||||
|
#
|
||||||
|
# Translators:
|
||||||
|
# Radina Matic <radina.matic@gmail.com>, 2020
|
||||||
|
# Anthony <aj@ohess.org>, 2020
|
||||||
|
#
|
||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"Project-Id-Version: sphinx_rtd_theme 0.4.3.dev0\n"
|
||||||
|
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
|
||||||
|
"POT-Creation-Date: 2020-05-06 13:38-0600\n"
|
||||||
|
"PO-Revision-Date: 2019-07-16 21:44+0000\n"
|
||||||
|
"Last-Translator: Anthony <aj@ohess.org>, 2020\n"
|
||||||
|
"Language-Team: French (https://www.transifex.com/readthedocs/teams/101354/fr/)\n"
|
||||||
|
"MIME-Version: 1.0\n"
|
||||||
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
|
"Generated-By: Babel 2.8.0\n"
|
||||||
|
"Language: fr\n"
|
||||||
|
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/breadcrumbs.html:43 sphinx_rtd_theme/breadcrumbs.html:45
|
||||||
|
msgid "Edit on GitHub"
|
||||||
|
msgstr "Éditer sur GitHub"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/breadcrumbs.html:50 sphinx_rtd_theme/breadcrumbs.html:52
|
||||||
|
msgid "Edit on Bitbucket"
|
||||||
|
msgstr "Éditer sur Bitbucket"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/breadcrumbs.html:57 sphinx_rtd_theme/breadcrumbs.html:59
|
||||||
|
msgid "Edit on GitLab"
|
||||||
|
msgstr "Éditer sur GitLab"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/breadcrumbs.html:62 sphinx_rtd_theme/breadcrumbs.html:64
|
||||||
|
msgid "View page source"
|
||||||
|
msgstr "Afficher la source de la page"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/breadcrumbs.html:74 sphinx_rtd_theme/footer.html:5
|
||||||
|
msgid "Next"
|
||||||
|
msgstr "Suivant"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/breadcrumbs.html:77 sphinx_rtd_theme/footer.html:8
|
||||||
|
msgid "Previous"
|
||||||
|
msgstr "Précédent"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/footer.html:21 sphinx_rtd_theme/footer.html:24
|
||||||
|
#: sphinx_rtd_theme/layout.html:96
|
||||||
|
msgid "Copyright"
|
||||||
|
msgstr "Droits d'auteur"
|
||||||
|
|
||||||
|
#. Build is a noun, not a verb
|
||||||
|
#: sphinx_rtd_theme/footer.html:31
|
||||||
|
msgid "Build"
|
||||||
|
msgstr "Compilation"
|
||||||
|
|
||||||
|
#. the phrase "revision" comes from Git, referring to a commit
|
||||||
|
#: sphinx_rtd_theme/footer.html:37
|
||||||
|
msgid "Revision"
|
||||||
|
msgstr "Révision"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/footer.html:41
|
||||||
|
#, python-format
|
||||||
|
msgid "Last updated on %(last_updated)s."
|
||||||
|
msgstr "Dernière mise à jour le %(last_updated)s."
|
||||||
|
|
||||||
|
#. the variable "sphinx_web" is a link to the Sphinx project documentation
|
||||||
|
#. with
|
||||||
|
#. the text "Sphinx"
|
||||||
|
#: sphinx_rtd_theme/footer.html:52
|
||||||
|
#, python-format
|
||||||
|
msgid "Built with %(sphinx_web)s using a"
|
||||||
|
msgstr "Compilé avec %(sphinx_web)s en utilisant un"
|
||||||
|
|
||||||
|
#. "theme" refers to a theme for Sphinx, which alters the appearance of the
|
||||||
|
#. generated documenation
|
||||||
|
#: sphinx_rtd_theme/footer.html:54
|
||||||
|
msgid "theme"
|
||||||
|
msgstr "thème"
|
||||||
|
|
||||||
|
#. this is always used as "provided by Read the Docs", and should not imply
|
||||||
|
#. Read the Docs is an author of the generated documentation.
|
||||||
|
#: sphinx_rtd_theme/footer.html:56
|
||||||
|
#, python-format
|
||||||
|
msgid "provided by %(readthedocs_web)s"
|
||||||
|
msgstr "fourni par %(readthedocs_web)s"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/layout.html:79
|
||||||
|
#, python-format
|
||||||
|
msgid "Search within %(docstitle)s"
|
||||||
|
msgstr "Rechercher dans %(docstitle)s"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/layout.html:87
|
||||||
|
msgid "About these documents"
|
||||||
|
msgstr "À propos de cette documentation"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/layout.html:90
|
||||||
|
msgid "Index"
|
||||||
|
msgstr "Index"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/layout.html:93 sphinx_rtd_theme/search.html:11
|
||||||
|
msgid "Search"
|
||||||
|
msgstr "Rechercher"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/layout.html:128
|
||||||
|
msgid "Logo"
|
||||||
|
msgstr "Logo"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/search.html:29
|
||||||
|
msgid "Please activate JavaScript to enable the search functionality."
|
||||||
|
msgstr "Activez JavaScript pour accéder à la fonction de recherche."
|
||||||
|
|
||||||
|
#. Search is a noun, not a verb
|
||||||
|
#: sphinx_rtd_theme/search.html:37
|
||||||
|
msgid "Search Results"
|
||||||
|
msgstr "Résultats de la recherche"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/search.html:39
|
||||||
|
msgid ""
|
||||||
|
"Your search did not match any documents. Please make sure that all words are"
|
||||||
|
" spelled correctly and that you've selected enough categories."
|
||||||
|
msgstr ""
|
||||||
|
"Votre recherche ne correspond à aucun document. Assurez-vous que tous les "
|
||||||
|
"mots sont correctement orthographiés et que vous avez sélectionné "
|
||||||
|
"suffisamment de catégories."
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/searchbox.html:4
|
||||||
|
msgid "Search docs"
|
||||||
|
msgstr "Rechercher docs"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/versions.html:11
|
||||||
|
msgid "Versions"
|
||||||
|
msgstr "Versions"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/versions.html:17
|
||||||
|
msgid "Downloads"
|
||||||
|
msgstr "Téléchargements"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/versions.html:26
|
||||||
|
msgid "Project Home"
|
||||||
|
msgstr "Accueil du projet"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/versions.html:29
|
||||||
|
msgid "Builds"
|
||||||
|
msgstr "Compilations"
|
||||||
|
|
||||||
|
#~ msgid "Docs"
|
||||||
|
#~ msgstr "Docs"
|
||||||
|
|
||||||
|
#~ msgid "Free document hosting provided by"
|
||||||
|
#~ msgstr "Hébergement gratuit de documents fourni par"
|
||||||
BIN
doc/_themes/sphinx_rtd_theme/locale/nl/LC_MESSAGES/sphinx.mo
vendored
Normal file
BIN
doc/_themes/sphinx_rtd_theme/locale/nl/LC_MESSAGES/sphinx.mo
vendored
Normal file
Binary file not shown.
157
doc/_themes/sphinx_rtd_theme/locale/nl/LC_MESSAGES/sphinx.po
vendored
Normal file
157
doc/_themes/sphinx_rtd_theme/locale/nl/LC_MESSAGES/sphinx.po
vendored
Normal file
@@ -0,0 +1,157 @@
|
|||||||
|
# English translations for sphinx_rtd_theme.
|
||||||
|
# Copyright (C) 2019 ORGANIZATION
|
||||||
|
# This file is distributed under the same license as the sphinx_rtd_theme
|
||||||
|
# project.
|
||||||
|
# FIRST AUTHOR <EMAIL@ADDRESS>, 2019.
|
||||||
|
#
|
||||||
|
# Translators:
|
||||||
|
# Jesse Tan, 2019
|
||||||
|
#
|
||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"Project-Id-Version: sphinx_rtd_theme 0.4.3.dev0\n"
|
||||||
|
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
|
||||||
|
"POT-Creation-Date: 2020-05-06 13:38-0600\n"
|
||||||
|
"PO-Revision-Date: 2019-07-16 21:44+0000\n"
|
||||||
|
"Last-Translator: Jesse Tan, 2019\n"
|
||||||
|
"Language-Team: Dutch (https://www.transifex.com/readthedocs/teams/101354/nl/)\n"
|
||||||
|
"MIME-Version: 1.0\n"
|
||||||
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
|
"Generated-By: Babel 2.8.0\n"
|
||||||
|
"Language: nl\n"
|
||||||
|
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/breadcrumbs.html:43 sphinx_rtd_theme/breadcrumbs.html:45
|
||||||
|
msgid "Edit on GitHub"
|
||||||
|
msgstr "Bewerk op GitHub"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/breadcrumbs.html:50 sphinx_rtd_theme/breadcrumbs.html:52
|
||||||
|
msgid "Edit on Bitbucket"
|
||||||
|
msgstr "Bewerk op BitBucket"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/breadcrumbs.html:57 sphinx_rtd_theme/breadcrumbs.html:59
|
||||||
|
msgid "Edit on GitLab"
|
||||||
|
msgstr "Bewerk op GitLab"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/breadcrumbs.html:62 sphinx_rtd_theme/breadcrumbs.html:64
|
||||||
|
msgid "View page source"
|
||||||
|
msgstr "Bekijk paginabron"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/breadcrumbs.html:74 sphinx_rtd_theme/footer.html:5
|
||||||
|
msgid "Next"
|
||||||
|
msgstr "Volgende"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/breadcrumbs.html:77 sphinx_rtd_theme/footer.html:8
|
||||||
|
msgid "Previous"
|
||||||
|
msgstr "Vorige"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/footer.html:21 sphinx_rtd_theme/footer.html:24
|
||||||
|
#: sphinx_rtd_theme/layout.html:96
|
||||||
|
msgid "Copyright"
|
||||||
|
msgstr "Copyright"
|
||||||
|
|
||||||
|
#. Build is a noun, not a verb
|
||||||
|
#: sphinx_rtd_theme/footer.html:31
|
||||||
|
msgid "Build"
|
||||||
|
msgstr "Bouwresultaat"
|
||||||
|
|
||||||
|
#. the phrase "revision" comes from Git, referring to a commit
|
||||||
|
#: sphinx_rtd_theme/footer.html:37
|
||||||
|
msgid "Revision"
|
||||||
|
msgstr "Revisie"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/footer.html:41
|
||||||
|
#, python-format
|
||||||
|
msgid "Last updated on %(last_updated)s."
|
||||||
|
msgstr "Laatste update op %(last_updated)s."
|
||||||
|
|
||||||
|
#. the variable "sphinx_web" is a link to the Sphinx project documentation
|
||||||
|
#. with
|
||||||
|
#. the text "Sphinx"
|
||||||
|
#: sphinx_rtd_theme/footer.html:52
|
||||||
|
#, python-format
|
||||||
|
msgid "Built with %(sphinx_web)s using a"
|
||||||
|
msgstr "Gebouwd met %(sphinx_web)s met een"
|
||||||
|
|
||||||
|
#. "theme" refers to a theme for Sphinx, which alters the appearance of the
|
||||||
|
#. generated documenation
|
||||||
|
#: sphinx_rtd_theme/footer.html:54
|
||||||
|
msgid "theme"
|
||||||
|
msgstr "thema"
|
||||||
|
|
||||||
|
#. this is always used as "provided by Read the Docs", and should not imply
|
||||||
|
#. Read the Docs is an author of the generated documentation.
|
||||||
|
#: sphinx_rtd_theme/footer.html:56
|
||||||
|
#, python-format
|
||||||
|
msgid "provided by %(readthedocs_web)s"
|
||||||
|
msgstr "geleverd door %(readthedocs_web)s"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/layout.html:79
|
||||||
|
#, python-format
|
||||||
|
msgid "Search within %(docstitle)s"
|
||||||
|
msgstr "Zoek binnen %(docstitle)s"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/layout.html:87
|
||||||
|
msgid "About these documents"
|
||||||
|
msgstr "Over deze documenten"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/layout.html:90
|
||||||
|
msgid "Index"
|
||||||
|
msgstr "Index"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/layout.html:93 sphinx_rtd_theme/search.html:11
|
||||||
|
msgid "Search"
|
||||||
|
msgstr "Zoek"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/layout.html:128
|
||||||
|
msgid "Logo"
|
||||||
|
msgstr "Logo"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/search.html:29
|
||||||
|
msgid "Please activate JavaScript to enable the search functionality."
|
||||||
|
msgstr "Zet JavaScript aan om de zoekfunctie mogelijk te maken."
|
||||||
|
|
||||||
|
#. Search is a noun, not a verb
|
||||||
|
#: sphinx_rtd_theme/search.html:37
|
||||||
|
msgid "Search Results"
|
||||||
|
msgstr "Zoekresultaten"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/search.html:39
|
||||||
|
msgid ""
|
||||||
|
"Your search did not match any documents. Please make sure that all words are"
|
||||||
|
" spelled correctly and that you've selected enough categories."
|
||||||
|
msgstr ""
|
||||||
|
"Zoekpoging vond geen documenten. Zorg ervoor dat alle woorden correct zijn "
|
||||||
|
"gespeld en dat voldoende categorieën zijn geselecteerd."
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/searchbox.html:4
|
||||||
|
msgid "Search docs"
|
||||||
|
msgstr "Zoek in documentatie"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/versions.html:11
|
||||||
|
msgid "Versions"
|
||||||
|
msgstr "Versies"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/versions.html:17
|
||||||
|
msgid "Downloads"
|
||||||
|
msgstr "Downloads"
|
||||||
|
|
||||||
|
#. The phrase "Read the Docs" is not translated
|
||||||
|
#: sphinx_rtd_theme/versions.html:24
|
||||||
|
msgid "On Read the Docs"
|
||||||
|
msgstr "Op Read the Docs"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/versions.html:26
|
||||||
|
msgid "Project Home"
|
||||||
|
msgstr "Project Home"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/versions.html:29
|
||||||
|
msgid "Builds"
|
||||||
|
msgstr "Bouwresultaten"
|
||||||
|
|
||||||
|
#~ msgid "Docs"
|
||||||
|
#~ msgstr "Documentatie"
|
||||||
|
|
||||||
|
#~ msgid "Free document hosting provided by"
|
||||||
|
#~ msgstr "Gratis hosting voor documentatie verzorgd door"
|
||||||
BIN
doc/_themes/sphinx_rtd_theme/locale/pt_BR/LC_MESSAGES/sphinx.mo
vendored
Normal file
BIN
doc/_themes/sphinx_rtd_theme/locale/pt_BR/LC_MESSAGES/sphinx.mo
vendored
Normal file
Binary file not shown.
159
doc/_themes/sphinx_rtd_theme/locale/pt_BR/LC_MESSAGES/sphinx.po
vendored
Normal file
159
doc/_themes/sphinx_rtd_theme/locale/pt_BR/LC_MESSAGES/sphinx.po
vendored
Normal file
@@ -0,0 +1,159 @@
|
|||||||
|
# English translations for sphinx_rtd_theme.
|
||||||
|
# Copyright (C) 2019 ORGANIZATION
|
||||||
|
# This file is distributed under the same license as the sphinx_rtd_theme
|
||||||
|
# project.
|
||||||
|
# FIRST AUTHOR <EMAIL@ADDRESS>, 2019.
|
||||||
|
#
|
||||||
|
# Translators:
|
||||||
|
# Rafael Fontenelle <rffontenelle@gmail.com>, 2020
|
||||||
|
#
|
||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"Project-Id-Version: sphinx_rtd_theme 0.4.3.dev0\n"
|
||||||
|
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
|
||||||
|
"POT-Creation-Date: 2020-05-06 13:38-0600\n"
|
||||||
|
"PO-Revision-Date: 2019-07-16 21:44+0000\n"
|
||||||
|
"Last-Translator: Rafael Fontenelle <rffontenelle@gmail.com>, 2020\n"
|
||||||
|
"Language-Team: Portuguese (Brazil) (https://www.transifex.com/readthedocs/teams/101354/pt_BR/)\n"
|
||||||
|
"MIME-Version: 1.0\n"
|
||||||
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
|
"Generated-By: Babel 2.8.0\n"
|
||||||
|
"Language: pt_BR\n"
|
||||||
|
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/breadcrumbs.html:43 sphinx_rtd_theme/breadcrumbs.html:45
|
||||||
|
msgid "Edit on GitHub"
|
||||||
|
msgstr "Editar no GitHub"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/breadcrumbs.html:50 sphinx_rtd_theme/breadcrumbs.html:52
|
||||||
|
msgid "Edit on Bitbucket"
|
||||||
|
msgstr "Editar no Bitbucket"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/breadcrumbs.html:57 sphinx_rtd_theme/breadcrumbs.html:59
|
||||||
|
msgid "Edit on GitLab"
|
||||||
|
msgstr "Editar no GitLab"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/breadcrumbs.html:62 sphinx_rtd_theme/breadcrumbs.html:64
|
||||||
|
msgid "View page source"
|
||||||
|
msgstr "Ver código-fonte da página"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/breadcrumbs.html:74 sphinx_rtd_theme/footer.html:5
|
||||||
|
msgid "Next"
|
||||||
|
msgstr "Próximo"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/breadcrumbs.html:77 sphinx_rtd_theme/footer.html:8
|
||||||
|
msgid "Previous"
|
||||||
|
msgstr "Anterior"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/footer.html:21 sphinx_rtd_theme/footer.html:24
|
||||||
|
#: sphinx_rtd_theme/layout.html:96
|
||||||
|
msgid "Copyright"
|
||||||
|
msgstr "Copyright"
|
||||||
|
|
||||||
|
#. Build is a noun, not a verb
|
||||||
|
#: sphinx_rtd_theme/footer.html:31
|
||||||
|
msgid "Build"
|
||||||
|
msgstr "Compilação"
|
||||||
|
|
||||||
|
#. the phrase "revision" comes from Git, referring to a commit
|
||||||
|
#: sphinx_rtd_theme/footer.html:37
|
||||||
|
msgid "Revision"
|
||||||
|
msgstr "Revisão"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/footer.html:41
|
||||||
|
#, python-format
|
||||||
|
msgid "Last updated on %(last_updated)s."
|
||||||
|
msgstr "Última atualização em %(last_updated)s."
|
||||||
|
|
||||||
|
#. the variable "sphinx_web" is a link to the Sphinx project documentation
|
||||||
|
#. with
|
||||||
|
#. the text "Sphinx"
|
||||||
|
#: sphinx_rtd_theme/footer.html:52
|
||||||
|
#, python-format
|
||||||
|
msgid "Built with %(sphinx_web)s using a"
|
||||||
|
msgstr "Compilado com %(sphinx_web)s usando um"
|
||||||
|
|
||||||
|
#. "theme" refers to a theme for Sphinx, which alters the appearance of the
|
||||||
|
#. generated documenation
|
||||||
|
#: sphinx_rtd_theme/footer.html:54
|
||||||
|
msgid "theme"
|
||||||
|
msgstr "tema"
|
||||||
|
|
||||||
|
#. this is always used as "provided by Read the Docs", and should not imply
|
||||||
|
#. Read the Docs is an author of the generated documentation.
|
||||||
|
#: sphinx_rtd_theme/footer.html:56
|
||||||
|
#, python-format
|
||||||
|
msgid "provided by %(readthedocs_web)s"
|
||||||
|
msgstr "fornecido por %(readthedocs_web)s"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/layout.html:79
|
||||||
|
#, python-format
|
||||||
|
msgid "Search within %(docstitle)s"
|
||||||
|
msgstr "Pesquisar em %(docstitle)s"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/layout.html:87
|
||||||
|
msgid "About these documents"
|
||||||
|
msgstr "Sobre esses documentos"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/layout.html:90
|
||||||
|
msgid "Index"
|
||||||
|
msgstr "Índice"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/layout.html:93 sphinx_rtd_theme/search.html:11
|
||||||
|
msgid "Search"
|
||||||
|
msgstr "Pesquisar"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/layout.html:128
|
||||||
|
msgid "Logo"
|
||||||
|
msgstr "Logo"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/search.html:29
|
||||||
|
msgid "Please activate JavaScript to enable the search functionality."
|
||||||
|
msgstr ""
|
||||||
|
"Por favor, ative JavaScript para habilitar a funcionalidade de pesquisa."
|
||||||
|
|
||||||
|
#. Search is a noun, not a verb
|
||||||
|
#: sphinx_rtd_theme/search.html:37
|
||||||
|
msgid "Search Results"
|
||||||
|
msgstr "Resultados da pesquisa"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/search.html:39
|
||||||
|
msgid ""
|
||||||
|
"Your search did not match any documents. Please make sure that all words are"
|
||||||
|
" spelled correctly and that you've selected enough categories."
|
||||||
|
msgstr ""
|
||||||
|
"A sua pesquisa não encontrou nenhum documento correspondente. Verifique se "
|
||||||
|
"todas as palavras estão escritas corretamente e se você selecionou "
|
||||||
|
"categorias suficientes."
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/searchbox.html:4
|
||||||
|
msgid "Search docs"
|
||||||
|
msgstr "Pesquisar documentos"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/versions.html:11
|
||||||
|
msgid "Versions"
|
||||||
|
msgstr "Versões"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/versions.html:17
|
||||||
|
msgid "Downloads"
|
||||||
|
msgstr "Downloads"
|
||||||
|
|
||||||
|
#. The phrase "Read the Docs" is not translated
|
||||||
|
#: sphinx_rtd_theme/versions.html:24
|
||||||
|
msgid "On Read the Docs"
|
||||||
|
msgstr "No Read the Docs"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/versions.html:26
|
||||||
|
msgid "Project Home"
|
||||||
|
msgstr "Página inicial"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/versions.html:29
|
||||||
|
msgid "Builds"
|
||||||
|
msgstr "Compilações"
|
||||||
|
|
||||||
|
#~ msgid "Docs"
|
||||||
|
#~ msgstr "Docs"
|
||||||
|
|
||||||
|
#~ msgid "Free document hosting provided by"
|
||||||
|
#~ msgstr "Hospedagem de documentos livres fornecida por"
|
||||||
BIN
doc/_themes/sphinx_rtd_theme/locale/ru/LC_MESSAGES/sphinx.mo
vendored
Normal file
BIN
doc/_themes/sphinx_rtd_theme/locale/ru/LC_MESSAGES/sphinx.mo
vendored
Normal file
Binary file not shown.
158
doc/_themes/sphinx_rtd_theme/locale/ru/LC_MESSAGES/sphinx.po
vendored
Normal file
158
doc/_themes/sphinx_rtd_theme/locale/ru/LC_MESSAGES/sphinx.po
vendored
Normal file
@@ -0,0 +1,158 @@
|
|||||||
|
# English translations for sphinx_rtd_theme.
|
||||||
|
# Copyright (C) 2019 ORGANIZATION
|
||||||
|
# This file is distributed under the same license as the sphinx_rtd_theme
|
||||||
|
# project.
|
||||||
|
# FIRST AUTHOR <EMAIL@ADDRESS>, 2019.
|
||||||
|
#
|
||||||
|
# Translators:
|
||||||
|
# Dmitry Shachnev <mitya57@gmail.com>, 2019
|
||||||
|
# lvv83 <vlozhkin83@gmail.com>, 2019
|
||||||
|
#
|
||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"Project-Id-Version: sphinx_rtd_theme 0.4.3.dev0\n"
|
||||||
|
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
|
||||||
|
"POT-Creation-Date: 2020-05-06 13:38-0600\n"
|
||||||
|
"PO-Revision-Date: 2019-07-16 21:44+0000\n"
|
||||||
|
"Last-Translator: lvv83 <vlozhkin83@gmail.com>, 2019\n"
|
||||||
|
"Language-Team: Russian (https://www.transifex.com/readthedocs/teams/101354/ru/)\n"
|
||||||
|
"MIME-Version: 1.0\n"
|
||||||
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
|
"Generated-By: Babel 2.8.0\n"
|
||||||
|
"Language: ru\n"
|
||||||
|
"Plural-Forms: nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n%100>=11 && n%100<=14)? 2 : 3);\n"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/breadcrumbs.html:43 sphinx_rtd_theme/breadcrumbs.html:45
|
||||||
|
msgid "Edit on GitHub"
|
||||||
|
msgstr "Редактировать на GitHub"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/breadcrumbs.html:50 sphinx_rtd_theme/breadcrumbs.html:52
|
||||||
|
msgid "Edit on Bitbucket"
|
||||||
|
msgstr "Редактировать на BitBucket"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/breadcrumbs.html:57 sphinx_rtd_theme/breadcrumbs.html:59
|
||||||
|
msgid "Edit on GitLab"
|
||||||
|
msgstr "Редактировать на GitLab"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/breadcrumbs.html:62 sphinx_rtd_theme/breadcrumbs.html:64
|
||||||
|
msgid "View page source"
|
||||||
|
msgstr "Просмотреть исходный код страницы"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/breadcrumbs.html:74 sphinx_rtd_theme/footer.html:5
|
||||||
|
msgid "Next"
|
||||||
|
msgstr "Следующая"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/breadcrumbs.html:77 sphinx_rtd_theme/footer.html:8
|
||||||
|
msgid "Previous"
|
||||||
|
msgstr "Предыдущая"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/footer.html:21 sphinx_rtd_theme/footer.html:24
|
||||||
|
#: sphinx_rtd_theme/layout.html:96
|
||||||
|
msgid "Copyright"
|
||||||
|
msgstr "Авторские права"
|
||||||
|
|
||||||
|
#. Build is a noun, not a verb
|
||||||
|
#: sphinx_rtd_theme/footer.html:31
|
||||||
|
msgid "Build"
|
||||||
|
msgstr "Сборка"
|
||||||
|
|
||||||
|
#. the phrase "revision" comes from Git, referring to a commit
|
||||||
|
#: sphinx_rtd_theme/footer.html:37
|
||||||
|
msgid "Revision"
|
||||||
|
msgstr "Ревизия"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/footer.html:41
|
||||||
|
#, python-format
|
||||||
|
msgid "Last updated on %(last_updated)s."
|
||||||
|
msgstr "Последний раз обновлено %(last_updated)s."
|
||||||
|
|
||||||
|
#. the variable "sphinx_web" is a link to the Sphinx project documentation
|
||||||
|
#. with
|
||||||
|
#. the text "Sphinx"
|
||||||
|
#: sphinx_rtd_theme/footer.html:52
|
||||||
|
#, python-format
|
||||||
|
msgid "Built with %(sphinx_web)s using a"
|
||||||
|
msgstr "Собрано при помощи %(sphinx_web)s с использованием"
|
||||||
|
|
||||||
|
#. "theme" refers to a theme for Sphinx, which alters the appearance of the
|
||||||
|
#. generated documenation
|
||||||
|
#: sphinx_rtd_theme/footer.html:54
|
||||||
|
msgid "theme"
|
||||||
|
msgstr "темы,"
|
||||||
|
|
||||||
|
#. this is always used as "provided by Read the Docs", and should not imply
|
||||||
|
#. Read the Docs is an author of the generated documentation.
|
||||||
|
#: sphinx_rtd_theme/footer.html:56
|
||||||
|
#, python-format
|
||||||
|
msgid "provided by %(readthedocs_web)s"
|
||||||
|
msgstr "предоставленной %(readthedocs_web)s"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/layout.html:79
|
||||||
|
#, python-format
|
||||||
|
msgid "Search within %(docstitle)s"
|
||||||
|
msgstr "Поиск в %(docstitle)s"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/layout.html:87
|
||||||
|
msgid "About these documents"
|
||||||
|
msgstr "Об этих документах"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/layout.html:90
|
||||||
|
msgid "Index"
|
||||||
|
msgstr "Алфавитный указатель"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/layout.html:93 sphinx_rtd_theme/search.html:11
|
||||||
|
msgid "Search"
|
||||||
|
msgstr "Поиск"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/layout.html:128
|
||||||
|
msgid "Logo"
|
||||||
|
msgstr "Логотип"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/search.html:29
|
||||||
|
msgid "Please activate JavaScript to enable the search functionality."
|
||||||
|
msgstr "Активируйте JavaScript, чтобы использовать функционал поиска."
|
||||||
|
|
||||||
|
#. Search is a noun, not a verb
|
||||||
|
#: sphinx_rtd_theme/search.html:37
|
||||||
|
msgid "Search Results"
|
||||||
|
msgstr "Результаты поиска"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/search.html:39
|
||||||
|
msgid ""
|
||||||
|
"Your search did not match any documents. Please make sure that all words are"
|
||||||
|
" spelled correctly and that you've selected enough categories."
|
||||||
|
msgstr ""
|
||||||
|
"По Вашему запросу не найдено результатов. Пожалуйста, проверьте, что все "
|
||||||
|
"слова написаны правильно, и Вы выбрали нужные категории."
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/searchbox.html:4
|
||||||
|
msgid "Search docs"
|
||||||
|
msgstr "Поиск в документации"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/versions.html:11
|
||||||
|
msgid "Versions"
|
||||||
|
msgstr "Версии"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/versions.html:17
|
||||||
|
msgid "Downloads"
|
||||||
|
msgstr "Загрузки"
|
||||||
|
|
||||||
|
#. The phrase "Read the Docs" is not translated
|
||||||
|
#: sphinx_rtd_theme/versions.html:24
|
||||||
|
msgid "On Read the Docs"
|
||||||
|
msgstr "На Read the Docs"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/versions.html:26
|
||||||
|
msgid "Project Home"
|
||||||
|
msgstr "Домашняя страница проекта"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/versions.html:29
|
||||||
|
msgid "Builds"
|
||||||
|
msgstr "Сборки"
|
||||||
|
|
||||||
|
#~ msgid "Docs"
|
||||||
|
#~ msgstr "Документация"
|
||||||
|
|
||||||
|
#~ msgid "Free document hosting provided by"
|
||||||
|
#~ msgstr "Бесплатный хостинг документов, предоставленный"
|
||||||
149
doc/_themes/sphinx_rtd_theme/locale/sphinx.pot
vendored
Normal file
149
doc/_themes/sphinx_rtd_theme/locale/sphinx.pot
vendored
Normal file
@@ -0,0 +1,149 @@
|
|||||||
|
# Translations template for sphinx_rtd_theme.
|
||||||
|
# Copyright (C) 2020 ORGANIZATION
|
||||||
|
# This file is distributed under the same license as the sphinx_rtd_theme
|
||||||
|
# project.
|
||||||
|
# FIRST AUTHOR <EMAIL@ADDRESS>, 2020.
|
||||||
|
#
|
||||||
|
#, fuzzy
|
||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"Project-Id-Version: sphinx_rtd_theme 0.4.3.dev0\n"
|
||||||
|
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
|
||||||
|
"POT-Creation-Date: 2020-05-06 13:38-0600\n"
|
||||||
|
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||||
|
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||||
|
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||||
|
"MIME-Version: 1.0\n"
|
||||||
|
"Content-Type: text/plain; charset=utf-8\n"
|
||||||
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
|
"Generated-By: Babel 2.8.0\n"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/breadcrumbs.html:43 sphinx_rtd_theme/breadcrumbs.html:45
|
||||||
|
msgid "Edit on GitHub"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/breadcrumbs.html:50 sphinx_rtd_theme/breadcrumbs.html:52
|
||||||
|
msgid "Edit on Bitbucket"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/breadcrumbs.html:57 sphinx_rtd_theme/breadcrumbs.html:59
|
||||||
|
msgid "Edit on GitLab"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/breadcrumbs.html:62 sphinx_rtd_theme/breadcrumbs.html:64
|
||||||
|
msgid "View page source"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/breadcrumbs.html:74 sphinx_rtd_theme/footer.html:5
|
||||||
|
msgid "Next"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/breadcrumbs.html:77 sphinx_rtd_theme/footer.html:8
|
||||||
|
msgid "Previous"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/footer.html:21 sphinx_rtd_theme/footer.html:24
|
||||||
|
#: sphinx_rtd_theme/layout.html:96
|
||||||
|
msgid "Copyright"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. Build is a noun, not a verb
|
||||||
|
#: sphinx_rtd_theme/footer.html:31
|
||||||
|
msgid "Build"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. the phrase "revision" comes from Git, referring to a commit
|
||||||
|
#: sphinx_rtd_theme/footer.html:37
|
||||||
|
msgid "Revision"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/footer.html:41
|
||||||
|
#, python-format
|
||||||
|
msgid "Last updated on %(last_updated)s."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. the variable "sphinx_web" is a link to the Sphinx project documentation with
|
||||||
|
#. the text "Sphinx"
|
||||||
|
#: sphinx_rtd_theme/footer.html:52
|
||||||
|
#, python-format
|
||||||
|
msgid "Built with %(sphinx_web)s using a"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. "theme" refers to a theme for Sphinx, which alters the appearance of the
|
||||||
|
#. generated documenation
|
||||||
|
#: sphinx_rtd_theme/footer.html:54
|
||||||
|
msgid "theme"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. this is always used as "provided by Read the Docs", and should not imply
|
||||||
|
#. Read the Docs is an author of the generated documentation.
|
||||||
|
#: sphinx_rtd_theme/footer.html:56
|
||||||
|
#, python-format
|
||||||
|
msgid "provided by %(readthedocs_web)s"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/layout.html:79
|
||||||
|
#, python-format
|
||||||
|
msgid "Search within %(docstitle)s"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/layout.html:87
|
||||||
|
msgid "About these documents"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/layout.html:90
|
||||||
|
msgid "Index"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/layout.html:93 sphinx_rtd_theme/search.html:11
|
||||||
|
msgid "Search"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/layout.html:121
|
||||||
|
msgid "Documentation Home"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/layout.html:128
|
||||||
|
msgid "Logo"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/search.html:29
|
||||||
|
msgid "Please activate JavaScript to enable the search functionality."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. Search is a noun, not a verb
|
||||||
|
#: sphinx_rtd_theme/search.html:37
|
||||||
|
msgid "Search Results"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/search.html:39
|
||||||
|
msgid ""
|
||||||
|
"Your search did not match any documents. Please make sure that all words "
|
||||||
|
"are spelled correctly and that you've selected enough categories."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/searchbox.html:4
|
||||||
|
msgid "Search docs"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/versions.html:11
|
||||||
|
msgid "Versions"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/versions.html:17
|
||||||
|
msgid "Downloads"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. The phrase "Read the Docs" is not translated
|
||||||
|
#: sphinx_rtd_theme/versions.html:24
|
||||||
|
msgid "On Read the Docs"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/versions.html:26
|
||||||
|
msgid "Project Home"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/versions.html:29
|
||||||
|
msgid "Builds"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
BIN
doc/_themes/sphinx_rtd_theme/locale/sv/LC_MESSAGES/sphinx.mo
vendored
Normal file
BIN
doc/_themes/sphinx_rtd_theme/locale/sv/LC_MESSAGES/sphinx.mo
vendored
Normal file
Binary file not shown.
158
doc/_themes/sphinx_rtd_theme/locale/sv/LC_MESSAGES/sphinx.po
vendored
Normal file
158
doc/_themes/sphinx_rtd_theme/locale/sv/LC_MESSAGES/sphinx.po
vendored
Normal file
@@ -0,0 +1,158 @@
|
|||||||
|
# English translations for sphinx_rtd_theme.
|
||||||
|
# Copyright (C) 2019 ORGANIZATION
|
||||||
|
# This file is distributed under the same license as the sphinx_rtd_theme
|
||||||
|
# project.
|
||||||
|
# FIRST AUTHOR <EMAIL@ADDRESS>, 2019.
|
||||||
|
#
|
||||||
|
# Translators:
|
||||||
|
# Daniel Holmberg <daniel.holmberg97@gmail.com>, 2020
|
||||||
|
#
|
||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"Project-Id-Version: sphinx_rtd_theme 0.4.3.dev0\n"
|
||||||
|
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
|
||||||
|
"POT-Creation-Date: 2020-05-06 13:38-0600\n"
|
||||||
|
"PO-Revision-Date: 2019-07-16 21:44+0000\n"
|
||||||
|
"Last-Translator: Daniel Holmberg <daniel.holmberg97@gmail.com>, 2020\n"
|
||||||
|
"Language-Team: Swedish (https://www.transifex.com/readthedocs/teams/101354/sv/)\n"
|
||||||
|
"MIME-Version: 1.0\n"
|
||||||
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
|
"Generated-By: Babel 2.8.0\n"
|
||||||
|
"Language: sv\n"
|
||||||
|
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/breadcrumbs.html:43 sphinx_rtd_theme/breadcrumbs.html:45
|
||||||
|
msgid "Edit on GitHub"
|
||||||
|
msgstr "Editera på GitHub"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/breadcrumbs.html:50 sphinx_rtd_theme/breadcrumbs.html:52
|
||||||
|
msgid "Edit on Bitbucket"
|
||||||
|
msgstr "Editera på Bitbucket"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/breadcrumbs.html:57 sphinx_rtd_theme/breadcrumbs.html:59
|
||||||
|
msgid "Edit on GitLab"
|
||||||
|
msgstr "Editera på GitLab"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/breadcrumbs.html:62 sphinx_rtd_theme/breadcrumbs.html:64
|
||||||
|
msgid "View page source"
|
||||||
|
msgstr "Visa sidkälla"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/breadcrumbs.html:74 sphinx_rtd_theme/footer.html:5
|
||||||
|
msgid "Next"
|
||||||
|
msgstr "Nästa"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/breadcrumbs.html:77 sphinx_rtd_theme/footer.html:8
|
||||||
|
msgid "Previous"
|
||||||
|
msgstr "Tillbaka"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/footer.html:21 sphinx_rtd_theme/footer.html:24
|
||||||
|
#: sphinx_rtd_theme/layout.html:96
|
||||||
|
msgid "Copyright"
|
||||||
|
msgstr "Upphovsrätt"
|
||||||
|
|
||||||
|
#. Build is a noun, not a verb
|
||||||
|
#: sphinx_rtd_theme/footer.html:31
|
||||||
|
msgid "Build"
|
||||||
|
msgstr "Bygg"
|
||||||
|
|
||||||
|
#. the phrase "revision" comes from Git, referring to a commit
|
||||||
|
#: sphinx_rtd_theme/footer.html:37
|
||||||
|
msgid "Revision"
|
||||||
|
msgstr "Ändra"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/footer.html:41
|
||||||
|
#, python-format
|
||||||
|
msgid "Last updated on %(last_updated)s."
|
||||||
|
msgstr "Senast uppdaterad %(last_updated)s."
|
||||||
|
|
||||||
|
#. the variable "sphinx_web" is a link to the Sphinx project documentation
|
||||||
|
#. with
|
||||||
|
#. the text "Sphinx"
|
||||||
|
#: sphinx_rtd_theme/footer.html:52
|
||||||
|
#, python-format
|
||||||
|
msgid "Built with %(sphinx_web)s using a"
|
||||||
|
msgstr "Gjord med %(sphinx_web)s med hjälp av"
|
||||||
|
|
||||||
|
#. "theme" refers to a theme for Sphinx, which alters the appearance of the
|
||||||
|
#. generated documenation
|
||||||
|
#: sphinx_rtd_theme/footer.html:54
|
||||||
|
msgid "theme"
|
||||||
|
msgstr "tema"
|
||||||
|
|
||||||
|
#. this is always used as "provided by Read the Docs", and should not imply
|
||||||
|
#. Read the Docs is an author of the generated documentation.
|
||||||
|
#: sphinx_rtd_theme/footer.html:56
|
||||||
|
#, python-format
|
||||||
|
msgid "provided by %(readthedocs_web)s"
|
||||||
|
msgstr "erhållet av %(readthedocs_web)s"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/layout.html:79
|
||||||
|
#, python-format
|
||||||
|
msgid "Search within %(docstitle)s"
|
||||||
|
msgstr "Sök i %(docstitle)s"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/layout.html:87
|
||||||
|
msgid "About these documents"
|
||||||
|
msgstr "Om dessa dokument"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/layout.html:90
|
||||||
|
msgid "Index"
|
||||||
|
msgstr "Index"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/layout.html:93 sphinx_rtd_theme/search.html:11
|
||||||
|
msgid "Search"
|
||||||
|
msgstr "Sök"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/layout.html:121
|
||||||
|
msgid "Documentation Home"
|
||||||
|
msgstr "Dokumentation Hem"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/layout.html:128
|
||||||
|
msgid "Logo"
|
||||||
|
msgstr "Logo"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/search.html:29
|
||||||
|
msgid "Please activate JavaScript to enable the search functionality."
|
||||||
|
msgstr ""
|
||||||
|
"Var vänlig och aktivera JavaScript för att möjliggöra sökfunktionaliteten."
|
||||||
|
|
||||||
|
#. Search is a noun, not a verb
|
||||||
|
#: sphinx_rtd_theme/search.html:37
|
||||||
|
msgid "Search Results"
|
||||||
|
msgstr "Sökresultat"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/search.html:39
|
||||||
|
msgid ""
|
||||||
|
"Your search did not match any documents. Please make sure that all words are"
|
||||||
|
" spelled correctly and that you've selected enough categories."
|
||||||
|
msgstr ""
|
||||||
|
"Din sökning gav inga träffar. Var vänlig och se till att alla ord är rätt "
|
||||||
|
"stavade och att du har valt tillräckligt många kategorier."
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/searchbox.html:4
|
||||||
|
msgid "Search docs"
|
||||||
|
msgstr "Sök i dokumentationen"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/versions.html:11
|
||||||
|
msgid "Versions"
|
||||||
|
msgstr "Versioner"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/versions.html:17
|
||||||
|
msgid "Downloads"
|
||||||
|
msgstr "Nerladdningar"
|
||||||
|
|
||||||
|
#. The phrase "Read the Docs" is not translated
|
||||||
|
#: sphinx_rtd_theme/versions.html:24
|
||||||
|
msgid "On Read the Docs"
|
||||||
|
msgstr "På Read the Docs"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/versions.html:26
|
||||||
|
msgid "Project Home"
|
||||||
|
msgstr "Projekt Hem"
|
||||||
|
|
||||||
|
#~ msgid "Docs"
|
||||||
|
#~ msgstr "Dokumentation"
|
||||||
|
|
||||||
|
#~ msgid "Free document hosting provided by"
|
||||||
|
#~ msgstr "Gratis dokumentations hysning erhållen av"
|
||||||
BIN
doc/_themes/sphinx_rtd_theme/locale/tr/LC_MESSAGES/sphinx.mo
vendored
Normal file
BIN
doc/_themes/sphinx_rtd_theme/locale/tr/LC_MESSAGES/sphinx.mo
vendored
Normal file
Binary file not shown.
147
doc/_themes/sphinx_rtd_theme/locale/tr/LC_MESSAGES/sphinx.po
vendored
Normal file
147
doc/_themes/sphinx_rtd_theme/locale/tr/LC_MESSAGES/sphinx.po
vendored
Normal file
@@ -0,0 +1,147 @@
|
|||||||
|
# English translations for sphinx_rtd_theme.
|
||||||
|
# Copyright (C) 2019 ORGANIZATION
|
||||||
|
# This file is distributed under the same license as the sphinx_rtd_theme
|
||||||
|
# project.
|
||||||
|
# FIRST AUTHOR <EMAIL@ADDRESS>, 2019.
|
||||||
|
#
|
||||||
|
# Translators:
|
||||||
|
# BouRock, 2020
|
||||||
|
#
|
||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"Project-Id-Version: sphinx_rtd_theme 0.4.3.dev0\n"
|
||||||
|
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
|
||||||
|
"POT-Creation-Date: 2020-05-06 13:38-0600\n"
|
||||||
|
"PO-Revision-Date: 2019-07-16 21:44+0000\n"
|
||||||
|
"Last-Translator: BouRock, 2020\n"
|
||||||
|
"Language-Team: Turkish (https://www.transifex.com/readthedocs/teams/101354/tr/)\n"
|
||||||
|
"MIME-Version: 1.0\n"
|
||||||
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
|
"Generated-By: Babel 2.8.0\n"
|
||||||
|
"Language: tr\n"
|
||||||
|
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/breadcrumbs.html:43 sphinx_rtd_theme/breadcrumbs.html:45
|
||||||
|
msgid "Edit on GitHub"
|
||||||
|
msgstr "GitHub'da Düzenle"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/breadcrumbs.html:50 sphinx_rtd_theme/breadcrumbs.html:52
|
||||||
|
msgid "Edit on Bitbucket"
|
||||||
|
msgstr "Bitbucket'ta Düzenle"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/breadcrumbs.html:57 sphinx_rtd_theme/breadcrumbs.html:59
|
||||||
|
msgid "Edit on GitLab"
|
||||||
|
msgstr "GitLab'ta Düzenle"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/breadcrumbs.html:62 sphinx_rtd_theme/breadcrumbs.html:64
|
||||||
|
msgid "View page source"
|
||||||
|
msgstr "Sayfa kaynağını görüntüle"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/breadcrumbs.html:74 sphinx_rtd_theme/footer.html:5
|
||||||
|
msgid "Next"
|
||||||
|
msgstr "Sonraki"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/breadcrumbs.html:77 sphinx_rtd_theme/footer.html:8
|
||||||
|
msgid "Previous"
|
||||||
|
msgstr "Önceki"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/footer.html:21 sphinx_rtd_theme/footer.html:24
|
||||||
|
#: sphinx_rtd_theme/layout.html:96
|
||||||
|
msgid "Copyright"
|
||||||
|
msgstr "Telif hakkı"
|
||||||
|
|
||||||
|
#. Build is a noun, not a verb
|
||||||
|
#: sphinx_rtd_theme/footer.html:31
|
||||||
|
msgid "Build"
|
||||||
|
msgstr "Oluşturma"
|
||||||
|
|
||||||
|
#. the phrase "revision" comes from Git, referring to a commit
|
||||||
|
#: sphinx_rtd_theme/footer.html:37
|
||||||
|
msgid "Revision"
|
||||||
|
msgstr "Gözden geçirme"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/footer.html:41
|
||||||
|
#, python-format
|
||||||
|
msgid "Last updated on %(last_updated)s."
|
||||||
|
msgstr "Son olarak %(last_updated)s tarihinde güncellendi."
|
||||||
|
|
||||||
|
#. "theme" refers to a theme for Sphinx, which alters the appearance of the
|
||||||
|
#. generated documenation
|
||||||
|
#: sphinx_rtd_theme/footer.html:54
|
||||||
|
msgid "theme"
|
||||||
|
msgstr "tema"
|
||||||
|
|
||||||
|
#. this is always used as "provided by Read the Docs", and should not imply
|
||||||
|
#. Read the Docs is an author of the generated documentation.
|
||||||
|
#: sphinx_rtd_theme/footer.html:56
|
||||||
|
#, python-format
|
||||||
|
msgid "provided by %(readthedocs_web)s"
|
||||||
|
msgstr "kullanılarak %(readthedocs_web)s tarafından sağlanmasıyla oluşturuldu"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/layout.html:79
|
||||||
|
#, python-format
|
||||||
|
msgid "Search within %(docstitle)s"
|
||||||
|
msgstr "%(docstitle)s içinde ara"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/layout.html:87
|
||||||
|
msgid "About these documents"
|
||||||
|
msgstr "Bu belgeler hakkında"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/layout.html:90
|
||||||
|
msgid "Index"
|
||||||
|
msgstr "Dizin"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/layout.html:93 sphinx_rtd_theme/search.html:11
|
||||||
|
msgid "Search"
|
||||||
|
msgstr "Arama"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/layout.html:128
|
||||||
|
msgid "Logo"
|
||||||
|
msgstr "Logo"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/search.html:29
|
||||||
|
msgid "Please activate JavaScript to enable the search functionality."
|
||||||
|
msgstr ""
|
||||||
|
"Arama işlevselliğini etkinleştirmek için lütfen JavaScript'i etkinleştirin."
|
||||||
|
|
||||||
|
#. Search is a noun, not a verb
|
||||||
|
#: sphinx_rtd_theme/search.html:37
|
||||||
|
msgid "Search Results"
|
||||||
|
msgstr "Arama Sonuçları"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/search.html:39
|
||||||
|
msgid ""
|
||||||
|
"Your search did not match any documents. Please make sure that all words are"
|
||||||
|
" spelled correctly and that you've selected enough categories."
|
||||||
|
msgstr ""
|
||||||
|
"Aramanız hiçbir belgeyle eşleşmedi. Lütfen tüm kelimelerin doğru "
|
||||||
|
"yazıldığından ve yeterli kategori seçtiğinizden emin olun."
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/searchbox.html:4
|
||||||
|
msgid "Search docs"
|
||||||
|
msgstr "Belgeleri arayın"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/versions.html:11
|
||||||
|
msgid "Versions"
|
||||||
|
msgstr "Sürümler"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/versions.html:17
|
||||||
|
msgid "Downloads"
|
||||||
|
msgstr "İndirmeler"
|
||||||
|
|
||||||
|
#. The phrase "Read the Docs" is not translated
|
||||||
|
#: sphinx_rtd_theme/versions.html:24
|
||||||
|
msgid "On Read the Docs"
|
||||||
|
msgstr "Read the Docs Üzerinde"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/versions.html:26
|
||||||
|
msgid "Project Home"
|
||||||
|
msgstr "Proje Ana Sayfa"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/versions.html:29
|
||||||
|
msgid "Builds"
|
||||||
|
msgstr "Oluşturmalar"
|
||||||
|
|
||||||
|
#~ msgid "Free document hosting provided by"
|
||||||
|
#~ msgstr "Ücretsiz belge barındırmayı sağlayan"
|
||||||
BIN
doc/_themes/sphinx_rtd_theme/locale/zh_CN/LC_MESSAGES/sphinx.mo
vendored
Normal file
BIN
doc/_themes/sphinx_rtd_theme/locale/zh_CN/LC_MESSAGES/sphinx.mo
vendored
Normal file
Binary file not shown.
151
doc/_themes/sphinx_rtd_theme/locale/zh_CN/LC_MESSAGES/sphinx.po
vendored
Normal file
151
doc/_themes/sphinx_rtd_theme/locale/zh_CN/LC_MESSAGES/sphinx.po
vendored
Normal file
@@ -0,0 +1,151 @@
|
|||||||
|
# English translations for sphinx_rtd_theme.
|
||||||
|
# Copyright (C) 2019 ORGANIZATION
|
||||||
|
# This file is distributed under the same license as the sphinx_rtd_theme
|
||||||
|
# project.
|
||||||
|
# FIRST AUTHOR <EMAIL@ADDRESS>, 2019.
|
||||||
|
#
|
||||||
|
# Translators:
|
||||||
|
# 王赛 <wangsai@bootcss.com>, 2019
|
||||||
|
# Anthony <aj@ohess.org>, 2020
|
||||||
|
#
|
||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"Project-Id-Version: sphinx_rtd_theme 0.4.3.dev0\n"
|
||||||
|
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
|
||||||
|
"POT-Creation-Date: 2020-05-06 13:38-0600\n"
|
||||||
|
"PO-Revision-Date: 2019-07-16 21:44+0000\n"
|
||||||
|
"Last-Translator: Anthony <aj@ohess.org>, 2020\n"
|
||||||
|
"Language-Team: Chinese (China) (https://www.transifex.com/readthedocs/teams/101354/zh_CN/)\n"
|
||||||
|
"MIME-Version: 1.0\n"
|
||||||
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
|
"Generated-By: Babel 2.8.0\n"
|
||||||
|
"Language: zh_CN\n"
|
||||||
|
"Plural-Forms: nplurals=1; plural=0;\n"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/breadcrumbs.html:43 sphinx_rtd_theme/breadcrumbs.html:45
|
||||||
|
msgid "Edit on GitHub"
|
||||||
|
msgstr "在 GitHub 上修改"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/breadcrumbs.html:50 sphinx_rtd_theme/breadcrumbs.html:52
|
||||||
|
msgid "Edit on Bitbucket"
|
||||||
|
msgstr "在 Bitbucket 上修改"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/breadcrumbs.html:57 sphinx_rtd_theme/breadcrumbs.html:59
|
||||||
|
msgid "Edit on GitLab"
|
||||||
|
msgstr "在 GitLab 上修改"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/breadcrumbs.html:62 sphinx_rtd_theme/breadcrumbs.html:64
|
||||||
|
msgid "View page source"
|
||||||
|
msgstr "查看页面源码"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/breadcrumbs.html:74 sphinx_rtd_theme/footer.html:5
|
||||||
|
msgid "Next"
|
||||||
|
msgstr "下一页"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/breadcrumbs.html:77 sphinx_rtd_theme/footer.html:8
|
||||||
|
msgid "Previous"
|
||||||
|
msgstr "上一页"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/footer.html:21 sphinx_rtd_theme/footer.html:24
|
||||||
|
#: sphinx_rtd_theme/layout.html:96
|
||||||
|
msgid "Copyright"
|
||||||
|
msgstr "版权所有"
|
||||||
|
|
||||||
|
#. Build is a noun, not a verb
|
||||||
|
#: sphinx_rtd_theme/footer.html:31
|
||||||
|
msgid "Build"
|
||||||
|
msgstr "构建"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/footer.html:41
|
||||||
|
#, python-format
|
||||||
|
msgid "Last updated on %(last_updated)s."
|
||||||
|
msgstr "最后更新时间 %(last_updated)s。"
|
||||||
|
|
||||||
|
#. the variable "sphinx_web" is a link to the Sphinx project documentation
|
||||||
|
#. with
|
||||||
|
#. the text "Sphinx"
|
||||||
|
#: sphinx_rtd_theme/footer.html:52
|
||||||
|
#, python-format
|
||||||
|
msgid "Built with %(sphinx_web)s using a"
|
||||||
|
msgstr "利用 %(sphinx_web)s 构建,使用了 "
|
||||||
|
|
||||||
|
#. "theme" refers to a theme for Sphinx, which alters the appearance of the
|
||||||
|
#. generated documenation
|
||||||
|
#: sphinx_rtd_theme/footer.html:54
|
||||||
|
msgid "theme"
|
||||||
|
msgstr "主题"
|
||||||
|
|
||||||
|
#. this is always used as "provided by Read the Docs", and should not imply
|
||||||
|
#. Read the Docs is an author of the generated documentation.
|
||||||
|
#: sphinx_rtd_theme/footer.html:56
|
||||||
|
#, python-format
|
||||||
|
msgid "provided by %(readthedocs_web)s"
|
||||||
|
msgstr "由 %(readthedocs_web)s开发"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/layout.html:79
|
||||||
|
#, python-format
|
||||||
|
msgid "Search within %(docstitle)s"
|
||||||
|
msgstr "在 %(docstitle)s中搜索"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/layout.html:87
|
||||||
|
msgid "About these documents"
|
||||||
|
msgstr "关于此文档"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/layout.html:90
|
||||||
|
msgid "Index"
|
||||||
|
msgstr "索引"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/layout.html:93 sphinx_rtd_theme/search.html:11
|
||||||
|
msgid "Search"
|
||||||
|
msgstr "搜索"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/layout.html:128
|
||||||
|
msgid "Logo"
|
||||||
|
msgstr "Logo"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/search.html:29
|
||||||
|
msgid "Please activate JavaScript to enable the search functionality."
|
||||||
|
msgstr "请启用 JavaScript 以便使用搜索功能"
|
||||||
|
|
||||||
|
#. Search is a noun, not a verb
|
||||||
|
#: sphinx_rtd_theme/search.html:37
|
||||||
|
msgid "Search Results"
|
||||||
|
msgstr "搜索结果"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/search.html:39
|
||||||
|
msgid ""
|
||||||
|
"Your search did not match any documents. Please make sure that all words are"
|
||||||
|
" spelled correctly and that you've selected enough categories."
|
||||||
|
msgstr "您的搜索没有匹配到任何文档。请确保所有单词拼写正确,并选择了足够多的类别。"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/searchbox.html:4
|
||||||
|
msgid "Search docs"
|
||||||
|
msgstr "在文档中搜索"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/versions.html:11
|
||||||
|
msgid "Versions"
|
||||||
|
msgstr "版本列表"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/versions.html:17
|
||||||
|
msgid "Downloads"
|
||||||
|
msgstr "下载链接"
|
||||||
|
|
||||||
|
#. The phrase "Read the Docs" is not translated
|
||||||
|
#: sphinx_rtd_theme/versions.html:24
|
||||||
|
msgid "On Read the Docs"
|
||||||
|
msgstr "托管于 Read the Docs"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/versions.html:26
|
||||||
|
msgid "Project Home"
|
||||||
|
msgstr "项目首页"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/versions.html:29
|
||||||
|
msgid "Builds"
|
||||||
|
msgstr "构建"
|
||||||
|
|
||||||
|
#~ msgid "Docs"
|
||||||
|
#~ msgstr "文档"
|
||||||
|
|
||||||
|
#~ msgid "Free document hosting provided by"
|
||||||
|
#~ msgstr "此文档免费托管于"
|
||||||
55
doc/_themes/sphinx_rtd_theme/search.html
vendored
Normal file
55
doc/_themes/sphinx_rtd_theme/search.html
vendored
Normal file
@@ -0,0 +1,55 @@
|
|||||||
|
{#
|
||||||
|
basic/search.html
|
||||||
|
~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
Template for the search page.
|
||||||
|
|
||||||
|
:copyright: Copyright 2007-2013 by the Sphinx team, see AUTHORS.
|
||||||
|
:license: BSD, see LICENSE for details.
|
||||||
|
#}
|
||||||
|
{%- extends "layout.html" %}
|
||||||
|
{% set title = _('Search') %}
|
||||||
|
{% set display_vcs_links = False %}
|
||||||
|
{%- block scripts %}
|
||||||
|
{{ super() }}
|
||||||
|
<script type="text/javascript" src="{{ pathto('_static/searchtools.js', 1) }}"></script>
|
||||||
|
{%- endblock %}
|
||||||
|
{% block footer %}
|
||||||
|
<script type="text/javascript">
|
||||||
|
jQuery(function() { Search.loadIndex("{{ pathto('searchindex.js', 1) }}"); });
|
||||||
|
</script>
|
||||||
|
{# this is used when loading the search index using $.ajax fails,
|
||||||
|
such as on Chrome for documents on localhost #}
|
||||||
|
<script type="text/javascript" id="searchindexloader"></script>
|
||||||
|
{{ super() }}
|
||||||
|
{% endblock %}
|
||||||
|
{% block body %}
|
||||||
|
<noscript>
|
||||||
|
<div id="fallback" class="admonition warning">
|
||||||
|
<p class="last">
|
||||||
|
{% trans trimmed %}Please activate JavaScript to enable the search
|
||||||
|
functionality.{% endtrans %}
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
</noscript>
|
||||||
|
|
||||||
|
{% if search_performed %}
|
||||||
|
{# Translators: Search is a noun, not a verb #}
|
||||||
|
<h2>{{ _('Search Results') }}</h2>
|
||||||
|
{% if not search_results %}
|
||||||
|
<p>{{ _('Your search did not match any documents. Please make sure that all words are spelled correctly and that you\'ve selected enough categories.') }}</p>
|
||||||
|
{% endif %}
|
||||||
|
{% endif %}
|
||||||
|
<div id="search-results">
|
||||||
|
{% if search_results %}
|
||||||
|
<ul>
|
||||||
|
{% for href, caption, context in search_results %}
|
||||||
|
<li>
|
||||||
|
<a href="{{ pathto(item.href) }}">{{ caption }}</a>
|
||||||
|
<p class="context">{{ context|e }}</p>
|
||||||
|
</li>
|
||||||
|
{% endfor %}
|
||||||
|
</ul>
|
||||||
|
{% endif %}
|
||||||
|
</div>
|
||||||
|
{% endblock %}
|
||||||
9
doc/_themes/sphinx_rtd_theme/searchbox.html
vendored
Normal file
9
doc/_themes/sphinx_rtd_theme/searchbox.html
vendored
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
{%- if builder != 'singlehtml' %}
|
||||||
|
<div role="search">
|
||||||
|
<form id="rtd-search-form" class="wy-form" action="{{ pathto('search') }}" method="get">
|
||||||
|
<input type="text" name="q" placeholder="{{ _('Search docs') }}" />
|
||||||
|
<input type="hidden" name="check_keywords" value="yes" />
|
||||||
|
<input type="hidden" name="area" value="default" />
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
{%- endif %}
|
||||||
1
doc/_themes/sphinx_rtd_theme/static/css/badge_only.css
vendored
Normal file
1
doc/_themes/sphinx_rtd_theme/static/css/badge_only.css
vendored
Normal file
@@ -0,0 +1 @@
|
|||||||
|
.fa:before{-webkit-font-smoothing:antialiased}.clearfix{*zoom:1}.clearfix:after,.clearfix:before{display:table;content:""}.clearfix:after{clear:both}@font-face{font-family:FontAwesome;font-style:normal;font-weight:400;src:url(fonts/fontawesome-webfont.eot?674f50d287a8c48dc19ba404d20fe713?#iefix) format("embedded-opentype"),url(fonts/fontawesome-webfont.woff2?af7ae505a9eed503f8b8e6982036873e) format("woff2"),url(fonts/fontawesome-webfont.woff?fee66e712a8a08eef5805a46892932ad) format("woff"),url(fonts/fontawesome-webfont.ttf?b06871f281fee6b241d60582ae9369b9) format("truetype"),url(fonts/fontawesome-webfont.svg?912ec66d7572ff821749319396470bde#FontAwesome) format("svg")}.fa:before{font-family:FontAwesome;font-style:normal;font-weight:400;line-height:1}.fa:before,a .fa{text-decoration:inherit}.fa:before,a .fa,li .fa{display:inline-block}li .fa-large:before{width:1.875em}ul.fas{list-style-type:none;margin-left:2em;text-indent:-.8em}ul.fas li .fa{width:.8em}ul.fas li .fa-large:before{vertical-align:baseline}.fa-book:before,.icon-book:before{content:"\f02d"}.fa-caret-down:before,.icon-caret-down:before{content:"\f0d7"}.fa-caret-up:before,.icon-caret-up:before{content:"\f0d8"}.fa-caret-left:before,.icon-caret-left:before{content:"\f0d9"}.fa-caret-right:before,.icon-caret-right:before{content:"\f0da"}.rst-versions{position:fixed;bottom:0;left:0;width:300px;color:#fcfcfc;background:#1f1d1d;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;z-index:400}.rst-versions a{color:#2980b9;text-decoration:none}.rst-versions .rst-badge-small{display:none}.rst-versions .rst-current-version{padding:12px;background-color:#272525;display:block;text-align:right;font-size:90%;cursor:pointer;color:#27ae60}.rst-versions .rst-current-version:after{clear:both;content:"";display:block}.rst-versions .rst-current-version .fa{color:#fcfcfc}.rst-versions .rst-current-version .fa-book,.rst-versions .rst-current-version .icon-book{float:left}.rst-versions .rst-current-version.rst-out-of-date{background-color:#e74c3c;color:#fff}.rst-versions .rst-current-version.rst-active-old-version{background-color:#f1c40f;color:#000}.rst-versions.shift-up{height:auto;max-height:100%;overflow-y:scroll}.rst-versions.shift-up .rst-other-versions{display:block}.rst-versions .rst-other-versions{font-size:90%;padding:12px;color:grey;display:none}.rst-versions .rst-other-versions hr{display:block;height:1px;border:0;margin:20px 0;padding:0;border-top:1px solid #413d3d}.rst-versions .rst-other-versions dd{display:inline-block;margin:0}.rst-versions .rst-other-versions dd a{display:inline-block;padding:6px;color:#fcfcfc}.rst-versions.rst-badge{width:auto;bottom:20px;right:20px;left:auto;border:none;max-width:300px;max-height:90%}.rst-versions.rst-badge .fa-book,.rst-versions.rst-badge .icon-book{float:none;line-height:30px}.rst-versions.rst-badge.shift-up .rst-current-version{text-align:right}.rst-versions.rst-badge.shift-up .rst-current-version .fa-book,.rst-versions.rst-badge.shift-up .rst-current-version .icon-book{float:left}.rst-versions.rst-badge>.rst-current-version{width:auto;height:30px;line-height:30px;padding:0 6px;display:block;text-align:center}@media screen and (max-width:768px){.rst-versions{width:85%;display:none}.rst-versions.shift{display:block}}
|
||||||
BIN
doc/_themes/sphinx_rtd_theme/static/css/fonts/Roboto-Slab-Bold.woff
vendored
Normal file
BIN
doc/_themes/sphinx_rtd_theme/static/css/fonts/Roboto-Slab-Bold.woff
vendored
Normal file
Binary file not shown.
BIN
doc/_themes/sphinx_rtd_theme/static/css/fonts/Roboto-Slab-Bold.woff2
vendored
Normal file
BIN
doc/_themes/sphinx_rtd_theme/static/css/fonts/Roboto-Slab-Bold.woff2
vendored
Normal file
Binary file not shown.
BIN
doc/_themes/sphinx_rtd_theme/static/css/fonts/Roboto-Slab-Regular.woff
vendored
Normal file
BIN
doc/_themes/sphinx_rtd_theme/static/css/fonts/Roboto-Slab-Regular.woff
vendored
Normal file
Binary file not shown.
BIN
doc/_themes/sphinx_rtd_theme/static/css/fonts/Roboto-Slab-Regular.woff2
vendored
Normal file
BIN
doc/_themes/sphinx_rtd_theme/static/css/fonts/Roboto-Slab-Regular.woff2
vendored
Normal file
Binary file not shown.
BIN
doc/_themes/sphinx_rtd_theme/static/css/fonts/fontawesome-webfont.eot
vendored
Normal file
BIN
doc/_themes/sphinx_rtd_theme/static/css/fonts/fontawesome-webfont.eot
vendored
Normal file
Binary file not shown.
2671
doc/_themes/sphinx_rtd_theme/static/css/fonts/fontawesome-webfont.svg
vendored
Normal file
2671
doc/_themes/sphinx_rtd_theme/static/css/fonts/fontawesome-webfont.svg
vendored
Normal file
File diff suppressed because it is too large
Load Diff
|
After Width: | Height: | Size: 434 KiB |
BIN
doc/_themes/sphinx_rtd_theme/static/css/fonts/fontawesome-webfont.ttf
vendored
Normal file
BIN
doc/_themes/sphinx_rtd_theme/static/css/fonts/fontawesome-webfont.ttf
vendored
Normal file
Binary file not shown.
BIN
doc/_themes/sphinx_rtd_theme/static/css/fonts/fontawesome-webfont.woff
vendored
Normal file
BIN
doc/_themes/sphinx_rtd_theme/static/css/fonts/fontawesome-webfont.woff
vendored
Normal file
Binary file not shown.
BIN
doc/_themes/sphinx_rtd_theme/static/css/fonts/fontawesome-webfont.woff2
vendored
Normal file
BIN
doc/_themes/sphinx_rtd_theme/static/css/fonts/fontawesome-webfont.woff2
vendored
Normal file
Binary file not shown.
BIN
doc/_themes/sphinx_rtd_theme/static/css/fonts/lato-bold-italic.woff
vendored
Normal file
BIN
doc/_themes/sphinx_rtd_theme/static/css/fonts/lato-bold-italic.woff
vendored
Normal file
Binary file not shown.
BIN
doc/_themes/sphinx_rtd_theme/static/css/fonts/lato-bold-italic.woff2
vendored
Normal file
BIN
doc/_themes/sphinx_rtd_theme/static/css/fonts/lato-bold-italic.woff2
vendored
Normal file
Binary file not shown.
BIN
doc/_themes/sphinx_rtd_theme/static/css/fonts/lato-bold.woff
vendored
Normal file
BIN
doc/_themes/sphinx_rtd_theme/static/css/fonts/lato-bold.woff
vendored
Normal file
Binary file not shown.
BIN
doc/_themes/sphinx_rtd_theme/static/css/fonts/lato-bold.woff2
vendored
Normal file
BIN
doc/_themes/sphinx_rtd_theme/static/css/fonts/lato-bold.woff2
vendored
Normal file
Binary file not shown.
BIN
doc/_themes/sphinx_rtd_theme/static/css/fonts/lato-normal-italic.woff
vendored
Normal file
BIN
doc/_themes/sphinx_rtd_theme/static/css/fonts/lato-normal-italic.woff
vendored
Normal file
Binary file not shown.
BIN
doc/_themes/sphinx_rtd_theme/static/css/fonts/lato-normal-italic.woff2
vendored
Normal file
BIN
doc/_themes/sphinx_rtd_theme/static/css/fonts/lato-normal-italic.woff2
vendored
Normal file
Binary file not shown.
BIN
doc/_themes/sphinx_rtd_theme/static/css/fonts/lato-normal.woff
vendored
Normal file
BIN
doc/_themes/sphinx_rtd_theme/static/css/fonts/lato-normal.woff
vendored
Normal file
Binary file not shown.
BIN
doc/_themes/sphinx_rtd_theme/static/css/fonts/lato-normal.woff2
vendored
Normal file
BIN
doc/_themes/sphinx_rtd_theme/static/css/fonts/lato-normal.woff2
vendored
Normal file
Binary file not shown.
4
doc/_themes/sphinx_rtd_theme/static/css/theme.css
vendored
Normal file
4
doc/_themes/sphinx_rtd_theme/static/css/theme.css
vendored
Normal file
File diff suppressed because one or more lines are too long
1
doc/_themes/sphinx_rtd_theme/static/js/badge_only.js
vendored
Normal file
1
doc/_themes/sphinx_rtd_theme/static/js/badge_only.js
vendored
Normal file
@@ -0,0 +1 @@
|
|||||||
|
!function(e){var t={};function r(n){if(t[n])return t[n].exports;var o=t[n]={i:n,l:!1,exports:{}};return e[n].call(o.exports,o,o.exports,r),o.l=!0,o.exports}r.m=e,r.c=t,r.d=function(e,t,n){r.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n})},r.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.t=function(e,t){if(1&t&&(e=r(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(r.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)r.d(n,o,function(t){return e[t]}.bind(null,o));return n},r.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return r.d(t,"a",t),t},r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},r.p="",r(r.s=4)}({4:function(e,t,r){}});
|
||||||
1
doc/_themes/sphinx_rtd_theme/static/js/theme.js
vendored
Normal file
1
doc/_themes/sphinx_rtd_theme/static/js/theme.js
vendored
Normal file
@@ -0,0 +1 @@
|
|||||||
|
!function(n){var e={};function t(i){if(e[i])return e[i].exports;var o=e[i]={i:i,l:!1,exports:{}};return n[i].call(o.exports,o,o.exports,t),o.l=!0,o.exports}t.m=n,t.c=e,t.d=function(n,e,i){t.o(n,e)||Object.defineProperty(n,e,{enumerable:!0,get:i})},t.r=function(n){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(n,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(n,"__esModule",{value:!0})},t.t=function(n,e){if(1&e&&(n=t(n)),8&e)return n;if(4&e&&"object"==typeof n&&n&&n.__esModule)return n;var i=Object.create(null);if(t.r(i),Object.defineProperty(i,"default",{enumerable:!0,value:n}),2&e&&"string"!=typeof n)for(var o in n)t.d(i,o,function(e){return n[e]}.bind(null,o));return i},t.n=function(n){var e=n&&n.__esModule?function(){return n.default}:function(){return n};return t.d(e,"a",e),e},t.o=function(n,e){return Object.prototype.hasOwnProperty.call(n,e)},t.p="",t(t.s=0)}([function(n,e,t){t(1),n.exports=t(3)},function(n,e,t){(function(){var e="undefined"!=typeof window?window.jQuery:t(2);n.exports.ThemeNav={navBar:null,win:null,winScroll:!1,winResize:!1,linkScroll:!1,winPosition:0,winHeight:null,docHeight:null,isRunning:!1,enable:function(n){var t=this;void 0===n&&(n=!0),t.isRunning||(t.isRunning=!0,e((function(e){t.init(e),t.reset(),t.win.on("hashchange",t.reset),n&&t.win.on("scroll",(function(){t.linkScroll||t.winScroll||(t.winScroll=!0,requestAnimationFrame((function(){t.onScroll()})))})),t.win.on("resize",(function(){t.winResize||(t.winResize=!0,requestAnimationFrame((function(){t.onResize()})))})),t.onResize()})))},enableSticky:function(){this.enable(!0)},init:function(n){n(document);var e=this;this.navBar=n("div.wy-side-scroll:first"),this.win=n(window),n(document).on("click","[data-toggle='wy-nav-top']",(function(){n("[data-toggle='wy-nav-shift']").toggleClass("shift"),n("[data-toggle='rst-versions']").toggleClass("shift")})).on("click",".wy-menu-vertical .current ul li a",(function(){var t=n(this);n("[data-toggle='wy-nav-shift']").removeClass("shift"),n("[data-toggle='rst-versions']").toggleClass("shift"),e.toggleCurrent(t),e.hashChange()})).on("click","[data-toggle='rst-current-version']",(function(){n("[data-toggle='rst-versions']").toggleClass("shift-up")})),n("table.docutils:not(.field-list,.footnote,.citation)").wrap("<div class='wy-table-responsive'></div>"),n("table.docutils.footnote").wrap("<div class='wy-table-responsive footnote'></div>"),n("table.docutils.citation").wrap("<div class='wy-table-responsive citation'></div>"),n(".wy-menu-vertical ul").not(".simple").siblings("a").each((function(){var t=n(this);expand=n('<span class="toctree-expand"></span>'),expand.on("click",(function(n){return e.toggleCurrent(t),n.stopPropagation(),!1})),t.prepend(expand)}))},reset:function(){var n=encodeURI(window.location.hash)||"#";try{var e=$(".wy-menu-vertical"),t=e.find('[href="'+n+'"]');if(0===t.length){var i=$('.document [id="'+n.substring(1)+'"]').closest("div.section");0===(t=e.find('[href="#'+i.attr("id")+'"]')).length&&(t=e.find('[href="#"]'))}t.length>0&&($(".wy-menu-vertical .current").removeClass("current"),t.addClass("current"),t.closest("li.toctree-l1").addClass("current"),t.closest("li.toctree-l1").parent().addClass("current"),t.closest("li.toctree-l1").addClass("current"),t.closest("li.toctree-l2").addClass("current"),t.closest("li.toctree-l3").addClass("current"),t.closest("li.toctree-l4").addClass("current"),t.closest("li.toctree-l5").addClass("current"),t[0].scrollIntoView())}catch(n){console.log("Error expanding nav for anchor",n)}},onScroll:function(){this.winScroll=!1;var n=this.win.scrollTop(),e=n+this.winHeight,t=this.navBar.scrollTop()+(n-this.winPosition);n<0||e>this.docHeight||(this.navBar.scrollTop(t),this.winPosition=n)},onResize:function(){this.winResize=!1,this.winHeight=this.win.height(),this.docHeight=$(document).height()},hashChange:function(){this.linkScroll=!0,this.win.one("hashchange",(function(){this.linkScroll=!1}))},toggleCurrent:function(n){var e=n.closest("li");e.siblings("li.current").removeClass("current"),e.siblings().find("li.current").removeClass("current"),e.find("> ul li.current").removeClass("current"),e.toggleClass("current")}},"undefined"!=typeof window&&(window.SphinxRtdTheme={Navigation:n.exports.ThemeNav,StickyNav:n.exports.ThemeNav}),function(){for(var n=0,e=["ms","moz","webkit","o"],t=0;t<e.length&&!window.requestAnimationFrame;++t)window.requestAnimationFrame=window[e[t]+"RequestAnimationFrame"],window.cancelAnimationFrame=window[e[t]+"CancelAnimationFrame"]||window[e[t]+"CancelRequestAnimationFrame"];window.requestAnimationFrame||(window.requestAnimationFrame=function(e,t){var i=(new Date).getTime(),o=Math.max(0,16-(i-n)),r=window.setTimeout((function(){e(i+o)}),o);return n=i+o,r}),window.cancelAnimationFrame||(window.cancelAnimationFrame=function(n){clearTimeout(n)})}()}).call(window)},function(n,e){n.exports=jQuery},function(n,e,t){}]);
|
||||||
18
doc/_themes/sphinx_rtd_theme/theme.conf
vendored
Normal file
18
doc/_themes/sphinx_rtd_theme/theme.conf
vendored
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
[theme]
|
||||||
|
inherit = basic
|
||||||
|
stylesheet = css/theme.css
|
||||||
|
pygments_style = default
|
||||||
|
|
||||||
|
[options]
|
||||||
|
canonical_url =
|
||||||
|
analytics_id =
|
||||||
|
collapse_navigation = True
|
||||||
|
sticky_navigation = True
|
||||||
|
navigation_depth = 4
|
||||||
|
includehidden = True
|
||||||
|
titles_only =
|
||||||
|
logo_only =
|
||||||
|
display_version = True
|
||||||
|
prev_next_buttons_location = bottom
|
||||||
|
style_external_links = False
|
||||||
|
style_nav_header_background =
|
||||||
34
doc/_themes/sphinx_rtd_theme/versions.html
vendored
Normal file
34
doc/_themes/sphinx_rtd_theme/versions.html
vendored
Normal file
@@ -0,0 +1,34 @@
|
|||||||
|
{% if READTHEDOCS %}
|
||||||
|
{# Add rst-badge after rst-versions for small badge style. #}
|
||||||
|
<div class="rst-versions" data-toggle="rst-versions" role="note" aria-label="versions">
|
||||||
|
<span class="rst-current-version" data-toggle="rst-current-version">
|
||||||
|
<span class="fa fa-book"> Read the Docs</span>
|
||||||
|
v: {{ current_version }}
|
||||||
|
<span class="fa fa-caret-down"></span>
|
||||||
|
</span>
|
||||||
|
<div class="rst-other-versions">
|
||||||
|
<dl>
|
||||||
|
<dt>{{ _('Versions') }}</dt>
|
||||||
|
{% for slug, url in versions %}
|
||||||
|
<dd><a href="{{ url }}">{{ slug }}</a></dd>
|
||||||
|
{% endfor %}
|
||||||
|
</dl>
|
||||||
|
<dl>
|
||||||
|
<dt>{{ _('Downloads') }}</dt>
|
||||||
|
{% for type, url in downloads %}
|
||||||
|
<dd><a href="{{ url }}">{{ type }}</a></dd>
|
||||||
|
{% endfor %}
|
||||||
|
</dl>
|
||||||
|
<dl>
|
||||||
|
{# Translators: The phrase "Read the Docs" is not translated #}
|
||||||
|
<dt>{{ _('On Read the Docs') }}</dt>
|
||||||
|
<dd>
|
||||||
|
<a href="//{{ PRODUCTION_DOMAIN }}/projects/{{ slug }}/?fromdocs={{ slug }}">{{ _('Project Home') }}</a>
|
||||||
|
</dd>
|
||||||
|
<dd>
|
||||||
|
<a href="//{{ PRODUCTION_DOMAIN }}/builds/{{ slug }}/?fromdocs={{ slug }}">{{ _('Builds') }}</a>
|
||||||
|
</dd>
|
||||||
|
</dl>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
{% endif %}
|
||||||
5
doc/asio_http2.h.rst.in
Normal file
5
doc/asio_http2.h.rst.in
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
asio_http2.h
|
||||||
|
============
|
||||||
|
|
||||||
|
.. literalinclude:: @top_srcdir@/src/includes/nghttp2/asio_http2.h
|
||||||
|
:language: cpp
|
||||||
5
doc/asio_http2_client.h.rst.in
Normal file
5
doc/asio_http2_client.h.rst.in
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
asio_http2_client.h
|
||||||
|
===================
|
||||||
|
|
||||||
|
.. literalinclude:: @top_srcdir@/src/includes/nghttp2/asio_http2_client.h
|
||||||
|
:language: cpp
|
||||||
5
doc/asio_http2_server.h.rst.in
Normal file
5
doc/asio_http2_server.h.rst.in
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
asio_http2_server.h
|
||||||
|
===================
|
||||||
|
|
||||||
|
.. literalinclude:: @top_srcdir@/src/includes/nghttp2/asio_http2_server.h
|
||||||
|
:language: cpp
|
||||||
@@ -8,7 +8,7 @@ _h2load()
|
|||||||
_get_comp_words_by_ref cur prev
|
_get_comp_words_by_ref cur prev
|
||||||
case $cur in
|
case $cur in
|
||||||
-*)
|
-*)
|
||||||
COMPREPLY=( $( compgen -W '--requests --clients --threads --input-file --max-concurrent-streams --max-frame-size --window-bits --connection-window-bits --header --ciphers --tls13-ciphers --no-tls-proto --data --rate --rate-period --duration --warm-up-time --connection-active-timeout --connection-inactivity-timeout --timing-script-file --base-uri --alpn-list --h1 --header-table-size --encoder-header-table-size --log-file --qlog-file-base --connect-to --rps --groups --no-udp-gso --max-udp-payload-size --ktls --sni --verbose --version --help ' -- "$cur" ) )
|
COMPREPLY=( $( compgen -W '--requests --clients --threads --input-file --max-concurrent-streams --window-bits --connection-window-bits --header --ciphers --tls13-ciphers --no-tls-proto --data --rate --rate-period --duration --warm-up-time --connection-active-timeout --connection-inactivity-timeout --timing-script-file --base-uri --npn-list --h1 --header-table-size --encoder-header-table-size --log-file --qlog-file-base --connect-to --rps --groups --no-udp-gso --max-udp-payload-size --verbose --version --help ' -- "$cur" ) )
|
||||||
;;
|
;;
|
||||||
*)
|
*)
|
||||||
_filedir
|
_filedir
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ _nghttp()
|
|||||||
_get_comp_words_by_ref cur prev
|
_get_comp_words_by_ref cur prev
|
||||||
case $cur in
|
case $cur in
|
||||||
-*)
|
-*)
|
||||||
COMPREPLY=( $( compgen -W '--verbose --null-out --remote-name --timeout --window-bits --connection-window-bits --get-assets --stat --header --trailer --cert --key --data --multiply --upgrade --extpri --peer-max-concurrent-streams --header-table-size --encoder-header-table-size --padding --har --color --continuation --no-content-length --hexdump --no-push --max-concurrent-streams --expect-continue --no-verify-peer --ktls --version --help ' -- "$cur" ) )
|
COMPREPLY=( $( compgen -W '--verbose --null-out --remote-name --timeout --window-bits --connection-window-bits --get-assets --stat --header --trailer --cert --key --data --multiply --upgrade --weight --peer-max-concurrent-streams --header-table-size --encoder-header-table-size --padding --har --color --continuation --no-content-length --no-dep --hexdump --no-push --max-concurrent-streams --expect-continue --no-verify-peer --version --help ' -- "$cur" ) )
|
||||||
;;
|
;;
|
||||||
*)
|
*)
|
||||||
_filedir
|
_filedir
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user