mirror of
https://github.com/WarmUpTill/SceneSwitcher.git
synced 2026-08-29 12:45:28 -05:00
Compare commits
1 Commits
1.29.1
...
test-codeq
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
4056fc180d |
131
.clang-format
131
.clang-format
@@ -1,6 +1,6 @@
|
|||||||
# please use clang-format version 16 or later
|
# please use clang-format version 8 or later
|
||||||
|
|
||||||
Standard: c++17
|
Standard: Cpp11
|
||||||
AccessModifierOffset: -8
|
AccessModifierOffset: -8
|
||||||
AlignAfterOpenBracket: Align
|
AlignAfterOpenBracket: Align
|
||||||
AlignConsecutiveAssignments: false
|
AlignConsecutiveAssignments: false
|
||||||
@@ -8,14 +8,14 @@ AlignConsecutiveDeclarations: false
|
|||||||
AlignEscapedNewlines: Left
|
AlignEscapedNewlines: Left
|
||||||
AlignOperands: true
|
AlignOperands: true
|
||||||
AlignTrailingComments: true
|
AlignTrailingComments: true
|
||||||
AllowAllArgumentsOnNextLine: false
|
#AllowAllArgumentsOnNextLine: false # requires clang-format 9
|
||||||
AllowAllConstructorInitializersOnNextLine: false
|
#AllowAllConstructorInitializersOnNextLine: false # requires clang-format 9
|
||||||
AllowAllParametersOfDeclarationOnNextLine: false
|
AllowAllParametersOfDeclarationOnNextLine: false
|
||||||
AllowShortBlocksOnASingleLine: false
|
AllowShortBlocksOnASingleLine: false
|
||||||
AllowShortCaseLabelsOnASingleLine: false
|
AllowShortCaseLabelsOnASingleLine: false
|
||||||
AllowShortFunctionsOnASingleLine: Inline
|
AllowShortFunctionsOnASingleLine: Inline
|
||||||
AllowShortIfStatementsOnASingleLine: false
|
AllowShortIfStatementsOnASingleLine: false
|
||||||
AllowShortLambdasOnASingleLine: Inline
|
#AllowShortLambdasOnASingleLine: Inline # requires clang-format 9
|
||||||
AllowShortLoopsOnASingleLine: false
|
AllowShortLoopsOnASingleLine: false
|
||||||
AlwaysBreakAfterDefinitionReturnType: None
|
AlwaysBreakAfterDefinitionReturnType: None
|
||||||
AlwaysBreakAfterReturnType: None
|
AlwaysBreakAfterReturnType: None
|
||||||
@@ -52,12 +52,11 @@ ContinuationIndentWidth: 8
|
|||||||
Cpp11BracedListStyle: true
|
Cpp11BracedListStyle: true
|
||||||
DerivePointerAlignment: false
|
DerivePointerAlignment: false
|
||||||
DisableFormat: false
|
DisableFormat: false
|
||||||
FixNamespaceComments: true
|
FixNamespaceComments: false
|
||||||
ForEachMacros:
|
ForEachMacros:
|
||||||
- 'json_object_foreach'
|
- 'json_object_foreach'
|
||||||
- 'json_object_foreach_safe'
|
- 'json_object_foreach_safe'
|
||||||
- 'json_array_foreach'
|
- 'json_array_foreach'
|
||||||
- 'HASH_ITER'
|
|
||||||
IncludeBlocks: Preserve
|
IncludeBlocks: Preserve
|
||||||
IndentCaseLabels: false
|
IndentCaseLabels: false
|
||||||
IndentPPDirectives: None
|
IndentPPDirectives: None
|
||||||
@@ -66,7 +65,7 @@ IndentWrappedFunctionNames: false
|
|||||||
KeepEmptyLinesAtTheStartOfBlocks: true
|
KeepEmptyLinesAtTheStartOfBlocks: true
|
||||||
MaxEmptyLinesToKeep: 1
|
MaxEmptyLinesToKeep: 1
|
||||||
NamespaceIndentation: None
|
NamespaceIndentation: None
|
||||||
ObjCBinPackProtocolList: Auto
|
#ObjCBinPackProtocolList: Auto # requires clang-format 7
|
||||||
ObjCBlockIndentWidth: 8
|
ObjCBlockIndentWidth: 8
|
||||||
ObjCSpaceAfterProperty: true
|
ObjCSpaceAfterProperty: true
|
||||||
ObjCSpaceBeforeProtocolList: true
|
ObjCSpaceBeforeProtocolList: true
|
||||||
@@ -84,13 +83,13 @@ ReflowComments: false
|
|||||||
SortIncludes: false
|
SortIncludes: false
|
||||||
SortUsingDeclarations: false
|
SortUsingDeclarations: false
|
||||||
SpaceAfterCStyleCast: false
|
SpaceAfterCStyleCast: false
|
||||||
SpaceAfterLogicalNot: false
|
#SpaceAfterLogicalNot: false # requires clang-format 9
|
||||||
SpaceAfterTemplateKeyword: false
|
SpaceAfterTemplateKeyword: false
|
||||||
SpaceBeforeAssignmentOperators: true
|
SpaceBeforeAssignmentOperators: true
|
||||||
SpaceBeforeCtorInitializerColon: true
|
#SpaceBeforeCtorInitializerColon: true # requires clang-format 7
|
||||||
SpaceBeforeInheritanceColon: true
|
#SpaceBeforeInheritanceColon: true # requires clang-format 7
|
||||||
SpaceBeforeParens: ControlStatements
|
SpaceBeforeParens: ControlStatements
|
||||||
SpaceBeforeRangeBasedForLoopColon: true
|
#SpaceBeforeRangeBasedForLoopColon: true # requires clang-format 7
|
||||||
SpaceInEmptyParentheses: false
|
SpaceInEmptyParentheses: false
|
||||||
SpacesBeforeTrailingComments: 1
|
SpacesBeforeTrailingComments: 1
|
||||||
SpacesInAngles: false
|
SpacesInAngles: false
|
||||||
@@ -98,111 +97,11 @@ SpacesInCStyleCastParentheses: false
|
|||||||
SpacesInContainerLiterals: false
|
SpacesInContainerLiterals: false
|
||||||
SpacesInParentheses: false
|
SpacesInParentheses: false
|
||||||
SpacesInSquareBrackets: false
|
SpacesInSquareBrackets: false
|
||||||
StatementMacros:
|
#StatementMacros: # requires clang-format 8
|
||||||
- 'Q_OBJECT'
|
# - 'Q_OBJECT'
|
||||||
TabWidth: 8
|
TabWidth: 8
|
||||||
TypenameMacros:
|
#TypenameMacros: # requires clang-format 9
|
||||||
- 'DARRAY'
|
# - 'DARRAY'
|
||||||
UseTab: ForContinuationAndIndentation
|
UseTab: ForContinuationAndIndentation
|
||||||
---
|
---
|
||||||
Language: ObjC
|
Language: ObjC
|
||||||
AccessModifierOffset: 2
|
|
||||||
AlignArrayOfStructures: Right
|
|
||||||
AlignConsecutiveAssignments: None
|
|
||||||
AlignConsecutiveBitFields: None
|
|
||||||
AlignConsecutiveDeclarations: None
|
|
||||||
AlignConsecutiveMacros:
|
|
||||||
Enabled: true
|
|
||||||
AcrossEmptyLines: false
|
|
||||||
AcrossComments: true
|
|
||||||
AllowShortBlocksOnASingleLine: Never
|
|
||||||
AllowShortEnumsOnASingleLine: false
|
|
||||||
AllowShortFunctionsOnASingleLine: Empty
|
|
||||||
AllowShortIfStatementsOnASingleLine: Never
|
|
||||||
AllowShortLambdasOnASingleLine: None
|
|
||||||
AttributeMacros: ['__unused', '__autoreleasing', '_Nonnull', '__bridge']
|
|
||||||
BitFieldColonSpacing: Both
|
|
||||||
#BreakBeforeBraces: Webkit
|
|
||||||
BreakBeforeBraces: Custom
|
|
||||||
BraceWrapping:
|
|
||||||
AfterCaseLabel: false
|
|
||||||
AfterClass: true
|
|
||||||
AfterControlStatement: Never
|
|
||||||
AfterEnum: false
|
|
||||||
AfterFunction: true
|
|
||||||
AfterNamespace: false
|
|
||||||
AfterObjCDeclaration: false
|
|
||||||
AfterStruct: false
|
|
||||||
AfterUnion: false
|
|
||||||
AfterExternBlock: false
|
|
||||||
BeforeCatch: false
|
|
||||||
BeforeElse: false
|
|
||||||
BeforeLambdaBody: false
|
|
||||||
BeforeWhile: false
|
|
||||||
IndentBraces: false
|
|
||||||
SplitEmptyFunction: false
|
|
||||||
SplitEmptyRecord: false
|
|
||||||
SplitEmptyNamespace: true
|
|
||||||
BreakAfterAttributes: Never
|
|
||||||
BreakArrays: false
|
|
||||||
BreakBeforeConceptDeclarations: Allowed
|
|
||||||
BreakBeforeInlineASMColon: OnlyMultiline
|
|
||||||
BreakConstructorInitializers: AfterColon
|
|
||||||
BreakInheritanceList: AfterComma
|
|
||||||
ColumnLimit: 120
|
|
||||||
ConstructorInitializerIndentWidth: 4
|
|
||||||
ContinuationIndentWidth: 4
|
|
||||||
EmptyLineAfterAccessModifier: Never
|
|
||||||
EmptyLineBeforeAccessModifier: LogicalBlock
|
|
||||||
ExperimentalAutoDetectBinPacking: false
|
|
||||||
FixNamespaceComments: true
|
|
||||||
IndentAccessModifiers: false
|
|
||||||
IndentCaseBlocks: false
|
|
||||||
IndentCaseLabels: true
|
|
||||||
IndentExternBlock: Indent
|
|
||||||
IndentGotoLabels: false
|
|
||||||
IndentRequiresClause: true
|
|
||||||
IndentWidth: 4
|
|
||||||
IndentWrappedFunctionNames: true
|
|
||||||
InsertBraces: false
|
|
||||||
InsertNewlineAtEOF: true
|
|
||||||
KeepEmptyLinesAtTheStartOfBlocks: false
|
|
||||||
LambdaBodyIndentation: Signature
|
|
||||||
NamespaceIndentation: All
|
|
||||||
ObjCBinPackProtocolList: Auto
|
|
||||||
ObjCBlockIndentWidth: 4
|
|
||||||
ObjCBreakBeforeNestedBlockParam: false
|
|
||||||
ObjCSpaceAfterProperty: true
|
|
||||||
ObjCSpaceBeforeProtocolList: true
|
|
||||||
PPIndentWidth: -1
|
|
||||||
PackConstructorInitializers: NextLine
|
|
||||||
QualifierAlignment: Leave
|
|
||||||
ReferenceAlignment: Right
|
|
||||||
RemoveSemicolon: false
|
|
||||||
RequiresClausePosition: WithPreceding
|
|
||||||
RequiresExpressionIndentation: OuterScope
|
|
||||||
SeparateDefinitionBlocks: Always
|
|
||||||
ShortNamespaceLines: 1
|
|
||||||
SortIncludes: false
|
|
||||||
#SortUsingDeclarations: LexicographicNumeric
|
|
||||||
SortUsingDeclarations: true
|
|
||||||
SpaceAfterCStyleCast: true
|
|
||||||
SpaceAfterLogicalNot: false
|
|
||||||
SpaceAroundPointerQualifiers: Default
|
|
||||||
SpaceBeforeCaseColon: false
|
|
||||||
SpaceBeforeCpp11BracedList: true
|
|
||||||
SpaceBeforeCtorInitializerColon: true
|
|
||||||
SpaceBeforeInheritanceColon: true
|
|
||||||
SpaceBeforeParens: ControlStatements
|
|
||||||
SpaceBeforeRangeBasedForLoopColon: true
|
|
||||||
SpaceBeforeSquareBrackets: false
|
|
||||||
SpaceInEmptyBlock: false
|
|
||||||
SpaceInEmptyParentheses: false
|
|
||||||
SpacesBeforeTrailingComments: 2
|
|
||||||
SpacesInConditionalStatement: false
|
|
||||||
SpacesInLineCommentPrefix:
|
|
||||||
Minimum: 1
|
|
||||||
Maximum: -1
|
|
||||||
Standard: c++17
|
|
||||||
TabWidth: 4
|
|
||||||
UseTab: Never
|
|
||||||
|
|||||||
@@ -1,31 +0,0 @@
|
|||||||
{
|
|
||||||
"format": {
|
|
||||||
"line_width": 80,
|
|
||||||
"tab_size": 2,
|
|
||||||
"enable_sort": true,
|
|
||||||
"autosort": true
|
|
||||||
},
|
|
||||||
"additional_commands": {
|
|
||||||
"set_target_properties_obs": {
|
|
||||||
"pargs": 1,
|
|
||||||
"flags": [],
|
|
||||||
"kwargs": {
|
|
||||||
"PROPERTIES": {
|
|
||||||
"kwargs": {
|
|
||||||
"PREFIX": 1,
|
|
||||||
"OUTPUT_NAME": 1,
|
|
||||||
"FOLDER": 1,
|
|
||||||
"VERSION": 1,
|
|
||||||
"SOVERSION": 1,
|
|
||||||
"AUTOMOC": 1,
|
|
||||||
"AUTOUIC": 1,
|
|
||||||
"AUTORCC": 1,
|
|
||||||
"AUTOUIC_SEARCH_PATHS": 1,
|
|
||||||
"BUILD_RPATH": 1,
|
|
||||||
"INSTALL_RPATH": 1
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
2
.gitattributes
vendored
2
.gitattributes
vendored
@@ -1,2 +0,0 @@
|
|||||||
/build-aux/*.zsh eol=lf
|
|
||||||
/build-aux/.functions/* eol=lf
|
|
||||||
35
.github/ISSUE_TEMPLATE/bug_report.md
vendored
Normal file
35
.github/ISSUE_TEMPLATE/bug_report.md
vendored
Normal file
@@ -0,0 +1,35 @@
|
|||||||
|
---
|
||||||
|
name: Bug report
|
||||||
|
about: Create a report to help us improve
|
||||||
|
title: ''
|
||||||
|
labels: ''
|
||||||
|
assignees: ''
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
**Describe the bug**
|
||||||
|
A clear and concise description of what the bug is.
|
||||||
|
|
||||||
|
**To Reproduce**
|
||||||
|
Steps to reproduce the behavior:
|
||||||
|
1. Go to '...'
|
||||||
|
2. Click on '....'
|
||||||
|
3. Scroll down to '....'
|
||||||
|
4. See error
|
||||||
|
|
||||||
|
**Expected behavior**
|
||||||
|
A clear and concise description of what you expected to happen.
|
||||||
|
|
||||||
|
**Logs**
|
||||||
|
Please provide a log of your issue with verbose logging enabled (See General tab of the plugin).
|
||||||
|
See [here](https://obsproject.com/forum/threads/please-post-a-log-with-your-issue-heres-how.23074/) for a description where to find the log files and how to share them.
|
||||||
|
Please share the currently used plugin settings by exporting them them to a file (See General tab of the plugin).
|
||||||
|
If applicable, add screenshots to help explain your problem.
|
||||||
|
|
||||||
|
**Version information**
|
||||||
|
- OS: [e.g. Windows 10]
|
||||||
|
- OBS Version [e.g. 27.1.3]
|
||||||
|
- Plugin Version [e.g. 1.17.1]
|
||||||
|
|
||||||
|
**Additional context**
|
||||||
|
Add any other context about the problem here.
|
||||||
112
.github/ISSUE_TEMPLATE/bug_report.yaml
vendored
112
.github/ISSUE_TEMPLATE/bug_report.yaml
vendored
@@ -1,112 +0,0 @@
|
|||||||
# Based on the OBS issue templates
|
|
||||||
# https://github.com/obsproject/.github/tree/master/.github/ISSUE_TEMPLATE
|
|
||||||
|
|
||||||
name: Bug Report
|
|
||||||
description: Report a bug or crash
|
|
||||||
body:
|
|
||||||
- type: markdown
|
|
||||||
id: md_welcome
|
|
||||||
attributes:
|
|
||||||
value: This form is for reporting bugs for Advanced Scene Switcher!
|
|
||||||
- type: dropdown
|
|
||||||
id: os_info
|
|
||||||
attributes:
|
|
||||||
label: Operating System Info
|
|
||||||
description: What Operating System are you running?
|
|
||||||
options:
|
|
||||||
- Windows 11
|
|
||||||
- Windows 10
|
|
||||||
- macOS 14
|
|
||||||
- macOS 13
|
|
||||||
- macOS 12
|
|
||||||
- macOS 11
|
|
||||||
- Ubuntu 24.04
|
|
||||||
- Ubuntu 23.10
|
|
||||||
- Ubuntu 22.04
|
|
||||||
- Other
|
|
||||||
validations:
|
|
||||||
required: true
|
|
||||||
- type: input
|
|
||||||
id: os_info_other
|
|
||||||
attributes:
|
|
||||||
label: Other OS
|
|
||||||
description: "If \"Other\" was selected above, what OS are you using?"
|
|
||||||
placeholder: "e.g., Arch Linux, FreeBSD"
|
|
||||||
validations:
|
|
||||||
required: false
|
|
||||||
- type: input
|
|
||||||
id: obs_version
|
|
||||||
attributes:
|
|
||||||
label: OBS Studio Version
|
|
||||||
description: What version of OBS Studio are you using?
|
|
||||||
placeholder: 30.2.2
|
|
||||||
validations:
|
|
||||||
required: true
|
|
||||||
- type: input
|
|
||||||
id: advss_version
|
|
||||||
attributes:
|
|
||||||
label: Advanced Scene Switcher Version
|
|
||||||
description: What version of the Advanced Scene Switcher are you using?
|
|
||||||
placeholder: 1.27.2
|
|
||||||
validations:
|
|
||||||
required: true
|
|
||||||
- type: input
|
|
||||||
id: settings
|
|
||||||
attributes:
|
|
||||||
label: Plugin settings
|
|
||||||
description: |
|
|
||||||
Please provide the plugin settings used.
|
|
||||||
Either only [export the macros](https://github.com/WarmUpTill/SceneSwitcher/wiki/Exporting-and-importing-individual-macros) relevant to this issue or [export all settings](https://github.com/WarmUpTill/SceneSwitcher/wiki/Saving-and-loading-settings#how-to-create-and-import-a-backup-of-your-settings) on the General tab of the plugin.
|
|
||||||
validations:
|
|
||||||
required: false
|
|
||||||
- type: input
|
|
||||||
id: obs_log_url
|
|
||||||
attributes:
|
|
||||||
label: OBS Studio Log URL
|
|
||||||
description: Please provide the obsproject.com URL (from Help menu > Log Files > Upload Current/Previous Log File) to the OBS log file where this issue occurred.
|
|
||||||
validations:
|
|
||||||
required: false
|
|
||||||
- type: input
|
|
||||||
id: obs_crash_log_url
|
|
||||||
attributes:
|
|
||||||
label: OBS Studio Crash Log URL
|
|
||||||
description: If this is a crash report, please provide the obsproject.com URL to the OBS crash log file where this issue occurred.
|
|
||||||
validations:
|
|
||||||
required: false
|
|
||||||
- type: textarea
|
|
||||||
id: expected_behavior
|
|
||||||
attributes:
|
|
||||||
label: Expected Behavior
|
|
||||||
description: "What did you expect to happen?"
|
|
||||||
validations:
|
|
||||||
required: true
|
|
||||||
- type: textarea
|
|
||||||
id: current_behavior
|
|
||||||
attributes:
|
|
||||||
label: Current Behavior
|
|
||||||
description: "What actually happened?"
|
|
||||||
validations:
|
|
||||||
required: true
|
|
||||||
- type: textarea
|
|
||||||
id: steps_to_reproduce
|
|
||||||
attributes:
|
|
||||||
label: Steps to Reproduce
|
|
||||||
description: "How do you trigger this bug? Please walk us through it step by step."
|
|
||||||
placeholder: |
|
|
||||||
1.
|
|
||||||
2.
|
|
||||||
3.
|
|
||||||
...
|
|
||||||
value: |
|
|
||||||
1.
|
|
||||||
2.
|
|
||||||
3.
|
|
||||||
...
|
|
||||||
validations:
|
|
||||||
required: true
|
|
||||||
- type: textarea
|
|
||||||
id: additional_notes
|
|
||||||
attributes:
|
|
||||||
label: Anything else we should know?
|
|
||||||
validations:
|
|
||||||
required: false
|
|
||||||
8
.github/ISSUE_TEMPLATE/config.yml
vendored
8
.github/ISSUE_TEMPLATE/config.yml
vendored
@@ -1,8 +0,0 @@
|
|||||||
blank_issues_enabled: true
|
|
||||||
contact_links:
|
|
||||||
- name: 📚 Wiki
|
|
||||||
url: https://github.com/WarmUpTill/SceneSwitcher/wiki
|
|
||||||
about: For explanations on how the plugin works or to see example guides, check out the wiki.
|
|
||||||
- name: 💬 OBS Forum Thread
|
|
||||||
url: https://obsproject.com/forum/threads/advanced-scene-switcher.48264
|
|
||||||
about: To discuss the plugin or get assistance, feel free to use the OBS forum thread or the GitHub discussions page.
|
|
||||||
20
.github/ISSUE_TEMPLATE/feature_request.md
vendored
Normal file
20
.github/ISSUE_TEMPLATE/feature_request.md
vendored
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
---
|
||||||
|
name: Feature request
|
||||||
|
about: Suggest an idea for this project
|
||||||
|
title: ''
|
||||||
|
labels: ''
|
||||||
|
assignees: ''
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
**Is your feature request related to a problem? Please describe.**
|
||||||
|
A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
|
||||||
|
|
||||||
|
**Describe the solution you'd like**
|
||||||
|
A clear and concise description of what you want to happen.
|
||||||
|
|
||||||
|
**Describe alternatives you've considered**
|
||||||
|
A clear and concise description of any alternative solutions or features you've considered.
|
||||||
|
|
||||||
|
**Additional context**
|
||||||
|
Add any other context or screenshots about the feature request here.
|
||||||
37
.github/ISSUE_TEMPLATE/feature_request.yaml
vendored
37
.github/ISSUE_TEMPLATE/feature_request.yaml
vendored
@@ -1,37 +0,0 @@
|
|||||||
# Based on the OBS issue templates
|
|
||||||
# https://github.com/obsproject/.github/tree/master/.github/ISSUE_TEMPLATE
|
|
||||||
|
|
||||||
name: Feature request
|
|
||||||
description: Suggest an idea for this projectReport a bug or crash
|
|
||||||
body:
|
|
||||||
- type: markdown
|
|
||||||
id: md_welcome
|
|
||||||
attributes:
|
|
||||||
value: This form is for requesting new features for Advanced Scene Switcher!
|
|
||||||
- type: textarea
|
|
||||||
id: background
|
|
||||||
attributes:
|
|
||||||
label: Background
|
|
||||||
description: "Is your feature request related to a problem? Please describe."
|
|
||||||
validations:
|
|
||||||
required: false
|
|
||||||
- type: textarea
|
|
||||||
id: solution
|
|
||||||
attributes:
|
|
||||||
label: Solution
|
|
||||||
description: "Describe the solution you'd like."
|
|
||||||
validations:
|
|
||||||
required: true
|
|
||||||
- type: textarea
|
|
||||||
id: alternatives
|
|
||||||
attributes:
|
|
||||||
label: Alternatives
|
|
||||||
description: "Describe alternatives you've considered."
|
|
||||||
validations:
|
|
||||||
required: false
|
|
||||||
- type: textarea
|
|
||||||
id: additional_notes
|
|
||||||
attributes:
|
|
||||||
label: Anything else we should know?
|
|
||||||
validations:
|
|
||||||
required: false
|
|
||||||
80
.github/actions/build-dependencies/action.yaml
vendored
80
.github/actions/build-dependencies/action.yaml
vendored
@@ -1,80 +0,0 @@
|
|||||||
name: 'Setup plugin build dependencies'
|
|
||||||
description: 'Builds the plugin build dependencies'
|
|
||||||
inputs:
|
|
||||||
target:
|
|
||||||
description: 'Build target for dependencies'
|
|
||||||
required: true
|
|
||||||
config:
|
|
||||||
description: 'Build configuration'
|
|
||||||
required: false
|
|
||||||
default: 'Release'
|
|
||||||
visualStudio:
|
|
||||||
description: 'Visual Studio version (Windows only)'
|
|
||||||
required: false
|
|
||||||
default: 'Visual Studio 16 2019'
|
|
||||||
workingDirectory:
|
|
||||||
description: 'Working directory for packaging'
|
|
||||||
required: false
|
|
||||||
default: ${{ github.workspace }}
|
|
||||||
runs:
|
|
||||||
using: 'composite'
|
|
||||||
steps:
|
|
||||||
- name: Setup cmake
|
|
||||||
uses: jwlawson/actions-setup-cmake@v1.13
|
|
||||||
with:
|
|
||||||
cmake-version: '3.24.x'
|
|
||||||
|
|
||||||
- name: Restore cached dependencies
|
|
||||||
id: restore-cache
|
|
||||||
uses: actions/cache@v4
|
|
||||||
with:
|
|
||||||
path: ${{ env.DEP_DIR }}
|
|
||||||
key: ${{ env.DEP_DIR }}-${{ runner.os }}-${{ inputs.target }}
|
|
||||||
|
|
||||||
- name: Run macOS Build
|
|
||||||
if: ${{ runner.os == 'macOS' && steps.restore-cache.outputs.cache-hit != 'true' }}
|
|
||||||
shell: zsh {0}
|
|
||||||
run: |
|
|
||||||
build_args=(
|
|
||||||
-c ${{ inputs.config }}
|
|
||||||
-t ${{ inputs.target }}
|
|
||||||
-o ${{ env.DEP_DIR }}
|
|
||||||
)
|
|
||||||
|
|
||||||
if (( ${+CI} && ${+RUNNER_DEBUG} )) build_args+=(--debug)
|
|
||||||
|
|
||||||
.github/scripts/build-deps-macos.zsh -o ${{ env.DEP_DIR }} ${build_args}
|
|
||||||
|
|
||||||
- name: Run Linux Build
|
|
||||||
if: ${{ runner.os == 'Linux' && steps.restore-cache.outputs.cache-hit != 'true' }}
|
|
||||||
shell: bash
|
|
||||||
run: |
|
|
||||||
build_args=(
|
|
||||||
-c ${{ inputs.config }}
|
|
||||||
-t linux-${{ inputs.target }}
|
|
||||||
)
|
|
||||||
|
|
||||||
if [[ -n "${CI}" && -n "${RUNNER_DEBUG}" ]]; then
|
|
||||||
build_args+=(--debug)
|
|
||||||
fi
|
|
||||||
|
|
||||||
.github/scripts/build-deps-linux.sh -o ${{ env.DEP_DIR }} "${build_args[@]}"
|
|
||||||
|
|
||||||
- name: Run Windows Build
|
|
||||||
if: ${{ runner.os == 'Windows' && steps.restore-cache.outputs.cache-hit != 'true' }}
|
|
||||||
shell: pwsh
|
|
||||||
run: |
|
|
||||||
$BuildArgs = @{
|
|
||||||
Target = '${{ inputs.target }}'
|
|
||||||
Configuration = '${{ inputs.config }}'
|
|
||||||
OutDirName = '${{ env.DEP_DIR }}'
|
|
||||||
}
|
|
||||||
|
|
||||||
if ( ( Test-Path env:CI ) -and ( Test-Path env:RUNNER_DEBUG ) ) {
|
|
||||||
$BuildArgs += @{
|
|
||||||
Debug = $true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.github/scripts/Build-Deps-Windows.ps1 -OutDirName ${{ env.DEP_DIR }} @BuildArgs
|
|
||||||
|
|
||||||
110
.github/actions/build-plugin/action.yaml
vendored
110
.github/actions/build-plugin/action.yaml
vendored
@@ -1,110 +0,0 @@
|
|||||||
name: 'Set up and build plugin'
|
|
||||||
description: 'Builds the plugin for specified architecture and build config'
|
|
||||||
inputs:
|
|
||||||
target:
|
|
||||||
description: 'Target architecture for dependencies'
|
|
||||||
required: true
|
|
||||||
config:
|
|
||||||
description: 'Build configuration'
|
|
||||||
required: false
|
|
||||||
default: 'RelWithDebInfo'
|
|
||||||
codesign:
|
|
||||||
description: 'Enable codesigning (macOS only)'
|
|
||||||
required: false
|
|
||||||
default: 'false'
|
|
||||||
codesignIdent:
|
|
||||||
description: 'Developer ID for application codesigning (macOS only)'
|
|
||||||
required: false
|
|
||||||
default: '-'
|
|
||||||
workingDirectory:
|
|
||||||
description: 'Working directory for packaging'
|
|
||||||
required: false
|
|
||||||
default: ${{ github.workspace }}
|
|
||||||
runs:
|
|
||||||
using: composite
|
|
||||||
steps:
|
|
||||||
- name: Run macOS Build
|
|
||||||
if: runner.os == 'macOS'
|
|
||||||
shell: zsh --no-rcs --errexit --pipefail {0}
|
|
||||||
working-directory: ${{ inputs.workingDirectory }}
|
|
||||||
env:
|
|
||||||
CODESIGN_IDENT: ${{ inputs.codesignIdent }}
|
|
||||||
CODESIGN_TEAM: ${{ inputs.codesignTeam }}
|
|
||||||
run: |
|
|
||||||
: Run macOS Build
|
|
||||||
|
|
||||||
local -a build_args=(
|
|
||||||
--config ${{ inputs.config }}
|
|
||||||
--dep ${{ env.DEP_DIR }}
|
|
||||||
)
|
|
||||||
if (( ${+RUNNER_DEBUG} )) build_args+=(--debug)
|
|
||||||
|
|
||||||
if [[ '${{ inputs.codesign }}' == 'true' ]] build_args+=(--codesign)
|
|
||||||
|
|
||||||
.github/scripts/build-macos ${build_args}
|
|
||||||
|
|
||||||
- name: Install Dependencies 🛍️
|
|
||||||
if: runner.os == 'Linux'
|
|
||||||
shell: bash
|
|
||||||
run: |
|
|
||||||
: Install Dependencies 🛍️
|
|
||||||
echo ::group::Install Dependencies
|
|
||||||
eval "$(/home/linuxbrew/.linuxbrew/bin/brew shellenv)"
|
|
||||||
echo "/home/linuxbrew/.linuxbrew/bin:/home/linuxbrew/.linuxbrew/sbin" >> $GITHUB_PATH
|
|
||||||
brew install --quiet zsh
|
|
||||||
echo ::endgroup::
|
|
||||||
|
|
||||||
- name: Run Ubuntu Build
|
|
||||||
if: runner.os == 'Linux'
|
|
||||||
shell: zsh --no-rcs --errexit --pipefail {0}
|
|
||||||
working-directory: ${{ inputs.workingDirectory }}
|
|
||||||
run: |
|
|
||||||
: Run Ubuntu Build
|
|
||||||
|
|
||||||
local -a build_args=(
|
|
||||||
--target linux-${{ inputs.target }}
|
|
||||||
--config ${{ inputs.config }}
|
|
||||||
)
|
|
||||||
if (( ${+RUNNER_DEBUG} )) build_args+=(--debug)
|
|
||||||
|
|
||||||
.github/scripts/build-linux ${build_args}
|
|
||||||
|
|
||||||
- name: Run Windows Build
|
|
||||||
if: runner.os == 'Windows'
|
|
||||||
shell: pwsh
|
|
||||||
run: |
|
|
||||||
# Run Windows Build
|
|
||||||
if ( $Env:RUNNER_DEBUG -ne $null ) {
|
|
||||||
Set-PSDebug -Trace 1
|
|
||||||
}
|
|
||||||
|
|
||||||
$BuildArgs = @{
|
|
||||||
Target = '${{ inputs.target }}'
|
|
||||||
Configuration = '${{ inputs.config }}'
|
|
||||||
ADVSSDepName = '${{ env.DEP_DIR }}'
|
|
||||||
}
|
|
||||||
|
|
||||||
.github/scripts/Build-Windows.ps1 @BuildArgs
|
|
||||||
|
|
||||||
- name: Create Summary 📊
|
|
||||||
if: contains(fromJSON('["Linux", "macOS"]'),runner.os)
|
|
||||||
shell: zsh --no-rcs --errexit --pipefail {0}
|
|
||||||
env:
|
|
||||||
CCACHE_CONFIGPATH: ${{ inputs.workingDirectory }}/.ccache.conf
|
|
||||||
run: |
|
|
||||||
: Create Summary 📊
|
|
||||||
|
|
||||||
local -a ccache_data
|
|
||||||
if (( ${+RUNNER_DEBUG} )) {
|
|
||||||
setopt XTRACE
|
|
||||||
ccache_data=("${(fA)$(ccache -s -vv)}")
|
|
||||||
} else {
|
|
||||||
ccache_data=("${(fA)$(ccache -s)}")
|
|
||||||
}
|
|
||||||
|
|
||||||
print '### ${{ runner.os }} Ccache Stats (${{ inputs.target }})' >> $GITHUB_STEP_SUMMARY
|
|
||||||
print '```' >> $GITHUB_STEP_SUMMARY
|
|
||||||
for line (${ccache_data}) {
|
|
||||||
print ${line} >> $GITHUB_STEP_SUMMARY
|
|
||||||
}
|
|
||||||
print '```' >> $GITHUB_STEP_SUMMARY
|
|
||||||
117
.github/actions/package-plugin/action.yaml
vendored
117
.github/actions/package-plugin/action.yaml
vendored
@@ -1,117 +0,0 @@
|
|||||||
name: 'Package plugin'
|
|
||||||
description: 'Packages the plugin for specified architecture and build config.'
|
|
||||||
inputs:
|
|
||||||
target:
|
|
||||||
description: 'Build target for dependencies'
|
|
||||||
required: true
|
|
||||||
config:
|
|
||||||
description: 'Build configuration'
|
|
||||||
required: false
|
|
||||||
default: 'RelWithDebInfo'
|
|
||||||
codesign:
|
|
||||||
description: 'Enable codesigning (macOS only)'
|
|
||||||
required: false
|
|
||||||
default: 'false'
|
|
||||||
notarize:
|
|
||||||
description: 'Enable notarization (macOS only)'
|
|
||||||
required: false
|
|
||||||
default: 'false'
|
|
||||||
codesignIdent:
|
|
||||||
description: 'Developer ID for application codesigning (macOS only)'
|
|
||||||
required: false
|
|
||||||
default: '-'
|
|
||||||
installerIdent:
|
|
||||||
description: 'Developer ID for installer package codesigning (macOS only)'
|
|
||||||
required: false
|
|
||||||
default: ''
|
|
||||||
codesignTeam:
|
|
||||||
description: 'Developer team for codesigning (macOS only)'
|
|
||||||
required: false
|
|
||||||
default: ''
|
|
||||||
codesignUser:
|
|
||||||
description: 'Apple ID username for notarization (macOS only)'
|
|
||||||
required: false
|
|
||||||
default: ''
|
|
||||||
codesignPass:
|
|
||||||
description: 'Apple ID password for notarization (macOS only)'
|
|
||||||
required: false
|
|
||||||
default: ''
|
|
||||||
package:
|
|
||||||
description: 'Create Windows or macOS installation package'
|
|
||||||
required: false
|
|
||||||
default: 'true'
|
|
||||||
workingDirectory:
|
|
||||||
description: 'Working directory for packaging'
|
|
||||||
required: false
|
|
||||||
default: ${{ github.workspace }}
|
|
||||||
runs:
|
|
||||||
using: composite
|
|
||||||
steps:
|
|
||||||
- name: Run macOS Packaging
|
|
||||||
if: runner.os == 'macOS'
|
|
||||||
shell: zsh --no-rcs --errexit --pipefail {0}
|
|
||||||
working-directory: ${{ inputs.workingDirectory }}
|
|
||||||
env:
|
|
||||||
CODESIGN_IDENT: ${{ inputs.codesignIdent }}
|
|
||||||
CODESIGN_IDENT_INSTALLER: ${{ inputs.installerIdent }}
|
|
||||||
CODESIGN_TEAM: ${{ inputs.codesignTeam }}
|
|
||||||
CODESIGN_IDENT_USER: ${{ inputs.codesignUser }}
|
|
||||||
CODESIGN_IDENT_PASS: ${{ inputs.codesignPass }}
|
|
||||||
run: |
|
|
||||||
: Run macOS Packaging
|
|
||||||
|
|
||||||
local -a package_args=(--config ${{ inputs.config }})
|
|
||||||
if (( ${+RUNNER_DEBUG} )) package_args+=(--debug)
|
|
||||||
|
|
||||||
if [[ '${{ inputs.codesign }}' == 'true' ]] package_args+=(--codesign)
|
|
||||||
if [[ '${{ inputs.notarize }}' == 'true' ]] package_args+=(--notarize)
|
|
||||||
if [[ '${{ inputs.package }}' == 'true' ]] package_args+=(--package)
|
|
||||||
|
|
||||||
.github/scripts/package-macos ${package_args}
|
|
||||||
|
|
||||||
- name: Install Dependencies 🛍️
|
|
||||||
if: runner.os == 'Linux'
|
|
||||||
shell: bash
|
|
||||||
run: |
|
|
||||||
: Install Dependencies 🛍️
|
|
||||||
echo ::group::Install Dependencies
|
|
||||||
eval "$(/home/linuxbrew/.linuxbrew/bin/brew shellenv)"
|
|
||||||
echo "/home/linuxbrew/.linuxbrew/bin:/home/linuxbrew/.linuxbrew/sbin" >> $GITHUB_PATH
|
|
||||||
brew install --quiet zsh
|
|
||||||
echo ::endgroup::
|
|
||||||
|
|
||||||
- name: Run Ubuntu Packaging
|
|
||||||
if: runner.os == 'Linux'
|
|
||||||
shell: zsh --no-rcs --errexit --pipefail {0}
|
|
||||||
working-directory: ${{ inputs.workingDirectory }}
|
|
||||||
run: |
|
|
||||||
: Run Ubuntu Packaging
|
|
||||||
package_args=(
|
|
||||||
--target linux-${{ inputs.target }}
|
|
||||||
--config ${{ inputs.config }}
|
|
||||||
)
|
|
||||||
if (( ${+RUNNER_DEBUG} )) build_args+=(--debug)
|
|
||||||
|
|
||||||
if [[ '${{ inputs.package }}' == 'true' ]] package_args+=(--package)
|
|
||||||
|
|
||||||
.github/scripts/package-linux ${package_args}
|
|
||||||
|
|
||||||
- name: Run Windows Packaging
|
|
||||||
if: runner.os == 'Windows'
|
|
||||||
shell: pwsh
|
|
||||||
run: |
|
|
||||||
# Run Windows Packaging
|
|
||||||
if ( $Env:RUNNER_DEBUG -ne $null ) {
|
|
||||||
Set-PSDebug -Trace 1
|
|
||||||
}
|
|
||||||
|
|
||||||
$PackageArgs = @{
|
|
||||||
Target = '${{ inputs.target }}'
|
|
||||||
Configuration = '${{ inputs.config }}'
|
|
||||||
}
|
|
||||||
|
|
||||||
if ( '${{ inputs.package }}' -eq 'true' ) {
|
|
||||||
$PackageArgs += @{BuildInstaller = $true}
|
|
||||||
}
|
|
||||||
|
|
||||||
.github/scripts/Package-Windows.ps1 @PackageArgs
|
|
||||||
61
.github/actions/run-clang-format/action.yaml
vendored
61
.github/actions/run-clang-format/action.yaml
vendored
@@ -1,61 +0,0 @@
|
|||||||
name: Run clang-format
|
|
||||||
description: Runs clang-format and checks for any changes introduced by it
|
|
||||||
inputs:
|
|
||||||
failCondition:
|
|
||||||
description: Controls whether failed checks also fail the workflow run
|
|
||||||
required: false
|
|
||||||
default: 'never'
|
|
||||||
workingDirectory:
|
|
||||||
description: Working directory for checks
|
|
||||||
required: false
|
|
||||||
default: ${{ github.workspace }}
|
|
||||||
runs:
|
|
||||||
using: composite
|
|
||||||
steps:
|
|
||||||
- name: Check Runner Operating System 🏃♂️
|
|
||||||
if: runner.os == 'Windows'
|
|
||||||
shell: bash
|
|
||||||
run: |
|
|
||||||
: Check Runner Operating System 🏃♂️
|
|
||||||
echo "::notice::run-clang-format action requires a macOS-based or Linux-based runner."
|
|
||||||
exit 2
|
|
||||||
|
|
||||||
- name: Install Dependencies 🛍️
|
|
||||||
if: runner.os == 'Linux'
|
|
||||||
shell: bash
|
|
||||||
run: |
|
|
||||||
: Install Dependencies 🛍️
|
|
||||||
echo ::group::Install Dependencies
|
|
||||||
eval "$(/home/linuxbrew/.linuxbrew/bin/brew shellenv)"
|
|
||||||
echo "/home/linuxbrew/.linuxbrew/bin:/home/linuxbrew/.linuxbrew/sbin" >> $GITHUB_PATH
|
|
||||||
echo "/home/linuxbrew/.linuxbrew/opt/clang-format@16/bin" >> $GITHUB_PATH
|
|
||||||
brew install --quiet zsh
|
|
||||||
echo ::endgroup::
|
|
||||||
|
|
||||||
- name: Run clang-format 🐉
|
|
||||||
id: result
|
|
||||||
shell: zsh --no-rcs --errexit --pipefail {0}
|
|
||||||
working-directory: ${{ inputs.workingDirectory }}
|
|
||||||
env:
|
|
||||||
GITHUB_EVENT_FORCED: ${{ github.event.forced }}
|
|
||||||
GITHUB_REF_BEFORE: ${{ github.event.before }}
|
|
||||||
run: |
|
|
||||||
: Run clang-format 🐉
|
|
||||||
if (( ${+RUNNER_DEBUG} )) setopt XTRACE
|
|
||||||
|
|
||||||
local -a changes=($(git diff --name-only HEAD~1 HEAD))
|
|
||||||
case ${GITHUB_EVENT_NAME} {
|
|
||||||
pull_request) changes=($(git diff --name-only origin/${GITHUB_BASE_REF} HEAD)) ;;
|
|
||||||
push) if [[ ${GITHUB_EVENT_FORCED} != true ]] changes=($(git diff --name-only ${GITHUB_REF_BEFORE} HEAD)) ;;
|
|
||||||
*) ;;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (( ${changes[(I)(*.c|*.h|*.cpp|*.hpp|*.m|*.mm)]} )) {
|
|
||||||
echo ::group::Install clang-format-16
|
|
||||||
brew install --quiet obsproject/tools/clang-format@16
|
|
||||||
echo ::endgroup::
|
|
||||||
|
|
||||||
echo ::group::Run clang-format-16
|
|
||||||
./build-aux/run-clang-format --fail-${{ inputs.failCondition }} --check
|
|
||||||
echo ::endgroup::
|
|
||||||
}
|
|
||||||
59
.github/actions/run-cmake-format/action.yaml
vendored
59
.github/actions/run-cmake-format/action.yaml
vendored
@@ -1,59 +0,0 @@
|
|||||||
name: Run cmake-format
|
|
||||||
description: Runs cmake-format and checks for any changes introduced by it
|
|
||||||
inputs:
|
|
||||||
failCondition:
|
|
||||||
description: Controls whether failed checks also fail the workflow run
|
|
||||||
required: false
|
|
||||||
default: 'never'
|
|
||||||
workingDirectory:
|
|
||||||
description: Working directory for checks
|
|
||||||
required: false
|
|
||||||
default: ${{ github.workspace }}
|
|
||||||
runs:
|
|
||||||
using: composite
|
|
||||||
steps:
|
|
||||||
- name: Check Runner Operating System 🏃♂️
|
|
||||||
if: runner.os == 'Windows'
|
|
||||||
shell: bash
|
|
||||||
run: |
|
|
||||||
: Check Runner Operating System 🏃♂️
|
|
||||||
echo "::notice::run-cmake-format action requires a macOS-based or Linux-based runner."
|
|
||||||
exit 2
|
|
||||||
|
|
||||||
- name: Install Dependencies 🛍️
|
|
||||||
if: runner.os == 'Linux'
|
|
||||||
shell: bash
|
|
||||||
run: |
|
|
||||||
: Install Dependencies 🛍️
|
|
||||||
echo ::group::Install Dependencies
|
|
||||||
eval "$(/home/linuxbrew/.linuxbrew/bin/brew shellenv)"
|
|
||||||
echo "/home/linuxbrew/.linuxbrew/bin:/home/linuxbrew/.linuxbrew/sbin" >> $GITHUB_PATH
|
|
||||||
brew install --quiet zsh
|
|
||||||
echo ::endgroup::
|
|
||||||
|
|
||||||
- name: Run cmake-format 🎛️
|
|
||||||
id: result
|
|
||||||
shell: zsh --no-rcs --errexit --pipefail {0}
|
|
||||||
working-directory: ${{ github.workspace }}
|
|
||||||
env:
|
|
||||||
GITHUB_EVENT_FORCED: ${{ github.event.forced }}
|
|
||||||
GITHUB_REF_BEFORE: ${{ github.event.before }}
|
|
||||||
run: |
|
|
||||||
: Run cmake-format 🎛️
|
|
||||||
if (( ${+RUNNER_DEBUG} )) setopt XTRACE
|
|
||||||
|
|
||||||
local -a changes=($(git diff --name-only HEAD~1 HEAD))
|
|
||||||
case ${GITHUB_EVENT_NAME} {
|
|
||||||
pull_request) changes=($(git diff --name-only origin/${GITHUB_BASE_REF} HEAD)) ;;
|
|
||||||
push) if [[ ${GITHUB_EVENT_FORCED} != true ]] changes=($(git diff --name-only ${GITHUB_REF_BEFORE} HEAD)) ;;
|
|
||||||
*) ;;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (( ${changes[(I)*.cmake|*CMakeLists.txt]} )) {
|
|
||||||
echo ::group::Install cmakelang
|
|
||||||
pip3 install cmakelang
|
|
||||||
echo ::endgroup::
|
|
||||||
echo ::group::Run cmake-format
|
|
||||||
./build-aux/run-cmake-format --fail-${{ inputs.failCondition }} --check
|
|
||||||
echo ::endgroup::
|
|
||||||
}
|
|
||||||
41
.github/actions/run-tests/action.yaml
vendored
41
.github/actions/run-tests/action.yaml
vendored
@@ -1,41 +0,0 @@
|
|||||||
name: "Run tests"
|
|
||||||
description: "Run tests."
|
|
||||||
inputs:
|
|
||||||
target:
|
|
||||||
description: "Build target"
|
|
||||||
required: true
|
|
||||||
workingDirectory:
|
|
||||||
description: "Working directory"
|
|
||||||
required: false
|
|
||||||
default: ${{ github.workspace }}
|
|
||||||
config:
|
|
||||||
description: "Build config"
|
|
||||||
required: false
|
|
||||||
default: ""
|
|
||||||
runs:
|
|
||||||
using: "composite"
|
|
||||||
steps:
|
|
||||||
- name: Run macOS tests
|
|
||||||
if: ${{ runner.os == 'macOS' }}
|
|
||||||
shell: zsh {0}
|
|
||||||
run: |
|
|
||||||
if [[ '${{ inputs.target }}' != 'macos-universal' ]]; then
|
|
||||||
echo tests skipped!
|
|
||||||
exit 0
|
|
||||||
fi
|
|
||||||
${{ inputs.workingDirectory }}/build_macos/tests/${{ inputs.config }}/advanced-scene-switcher-tests
|
|
||||||
|
|
||||||
- name: Run Linux packaging
|
|
||||||
if: ${{ runner.os == 'Linux' }}
|
|
||||||
shell: bash
|
|
||||||
run: |
|
|
||||||
if [[ '${{ inputs.target }}' != 'x86_64' ]]; then
|
|
||||||
exit 0
|
|
||||||
fi
|
|
||||||
${{ inputs.workingDirectory }}/build_x86_64/tests/advanced-scene-switcher-tests
|
|
||||||
|
|
||||||
- name: Run Windows packaging
|
|
||||||
if: ${{ runner.os == 'Windows' }}
|
|
||||||
shell: pwsh
|
|
||||||
run: |
|
|
||||||
${{ inputs.workingDirectory }}/build_x64/tests/${{ inputs.config }}/advanced-scene-switcher-tests.exe
|
|
||||||
154
.github/actions/setup-macos-codesigning/action.yaml
vendored
154
.github/actions/setup-macos-codesigning/action.yaml
vendored
@@ -1,154 +0,0 @@
|
|||||||
name: Set up macOS codesigning
|
|
||||||
description: Sets up code signing certificates, provisioning profiles, and notarization information
|
|
||||||
inputs:
|
|
||||||
codesignIdentity:
|
|
||||||
description: Codesigning identity
|
|
||||||
required: true
|
|
||||||
installerIdentity:
|
|
||||||
description: Codesigning identity for package installer
|
|
||||||
required: false
|
|
||||||
codesignCertificate:
|
|
||||||
description: PKCS12 certificate in base64 format
|
|
||||||
required: true
|
|
||||||
certificatePassword:
|
|
||||||
description: Password required to install PKCS12 certificate
|
|
||||||
required: true
|
|
||||||
keychainPassword:
|
|
||||||
description: Password to use for temporary keychain
|
|
||||||
required: false
|
|
||||||
notarizationUser:
|
|
||||||
description: Apple ID to use for notarization
|
|
||||||
required: false
|
|
||||||
notarizationPassword:
|
|
||||||
description: Application password for notarization
|
|
||||||
provisioningProfile:
|
|
||||||
description: Provisioning profile in base64 format
|
|
||||||
required: false
|
|
||||||
outputs:
|
|
||||||
haveCodesignIdent:
|
|
||||||
description: True if necessary codesigning credentials were found
|
|
||||||
value: ${{ steps.codesign.outputs.haveCodesignIdent }}
|
|
||||||
haveProvisioningProfile:
|
|
||||||
description: True if necessary provisioning profile credentials were found
|
|
||||||
value: ${{ steps.provisioning.outputs.haveProvisioningProfile }}
|
|
||||||
haveNotarizationUser:
|
|
||||||
description: True if necessary notarization credentials were found
|
|
||||||
value: ${{ steps.notarization.outputs.haveNotarizationUser }}
|
|
||||||
codesignIdent:
|
|
||||||
description: Codesigning identity
|
|
||||||
value: ${{ steps.codesign.outputs.codesignIdent }}
|
|
||||||
installerIdent:
|
|
||||||
description: Codesigning identity for package installer
|
|
||||||
value: ${{ steps.codesign.outputs.installerIdent }}
|
|
||||||
codesignTeam:
|
|
||||||
description: Codesigning team
|
|
||||||
value: ${{ steps.codesign.outputs.codesignTeam }}
|
|
||||||
runs:
|
|
||||||
using: composite
|
|
||||||
steps:
|
|
||||||
- name: Check Runner Operating System 🏃♂️
|
|
||||||
if: runner.os != 'macOS'
|
|
||||||
shell: bash
|
|
||||||
run: |
|
|
||||||
: Check Runner Operating System 🏃♂️
|
|
||||||
echo "setup-macos-codesigning action requires a macOS-based runner."
|
|
||||||
exit 2
|
|
||||||
|
|
||||||
- name: macOS Codesigning ✍️
|
|
||||||
shell: zsh --no-rcs --errexit --pipefail {0}
|
|
||||||
id: codesign
|
|
||||||
env:
|
|
||||||
MACOS_SIGNING_IDENTITY: ${{ inputs.codesignIdentity }}
|
|
||||||
MACOS_SIGNING_IDENTITY_INSTALLER: ${{ inputs.installerIdentity}}
|
|
||||||
MACOS_SIGNING_CERT: ${{ inputs.codesignCertificate }}
|
|
||||||
MAOCS_SIGNING_CERT_PASSWORD: ${{ inputs.certificatePassword }}
|
|
||||||
MACOS_KEYCHAIN_PASSWORD: ${{ inputs.keychainPassword }}
|
|
||||||
run: |
|
|
||||||
: macOS Codesigning ✍️
|
|
||||||
if (( ${+RUNNER_DEBUG} )) setopt XTRACE
|
|
||||||
|
|
||||||
if [[ ${MACOS_SIGNING_IDENTITY} && ${MACOS_SIGNING_IDENTITY_INSTALLER} && ${MACOS_SIGNING_CERT} ]] {
|
|
||||||
print 'haveCodesignIdent=true' >> $GITHUB_OUTPUT
|
|
||||||
|
|
||||||
local -r certificate_path="${RUNNER_TEMP}/build_certificate.p12"
|
|
||||||
local -r keychain_path="${RUNNER_TEMP}/app-signing.keychain-db"
|
|
||||||
|
|
||||||
print -n "${MACOS_SIGNING_CERT}" | base64 --decode --output="${certificate_path}"
|
|
||||||
|
|
||||||
: "${MACOS_KEYCHAIN_PASSWORD:="$(print ${RANDOM} | shasum | head -c 32)"}"
|
|
||||||
|
|
||||||
print '::group::Keychain setup'
|
|
||||||
security create-keychain -p "${MACOS_KEYCHAIN_PASSWORD}" ${keychain_path}
|
|
||||||
security set-keychain-settings -lut 21600 ${keychain_path}
|
|
||||||
security unlock-keychain -p "${MACOS_KEYCHAIN_PASSWORD}" ${keychain_path}
|
|
||||||
|
|
||||||
security import "${certificate_path}" -P "${MAOCS_SIGNING_CERT_PASSWORD}" -A \
|
|
||||||
-t cert -f pkcs12 -k ${keychain_path} \
|
|
||||||
-T /usr/bin/codesign -T /usr/bin/security -T /usr/bin/xcrun
|
|
||||||
|
|
||||||
security set-key-partition-list -S 'apple-tool:,apple:' -k "${MACOS_KEYCHAIN_PASSWORD}" \
|
|
||||||
${keychain_path} &> /dev/null
|
|
||||||
|
|
||||||
security list-keychain -d user -s ${keychain_path} 'login-keychain'
|
|
||||||
print '::endgroup::'
|
|
||||||
|
|
||||||
local -r team_id="${${MACOS_SIGNING_IDENTITY##* }//(\(|\))/}"
|
|
||||||
|
|
||||||
print "codesignIdent=${MACOS_SIGNING_IDENTITY}" >> $GITHUB_OUTPUT
|
|
||||||
print "installerIdent=${MACOS_SIGNING_IDENTITY_INSTALLER}" >> $GITHUB_OUTPUT
|
|
||||||
print "MACOS_KEYCHAIN_PASSWORD=${MACOS_KEYCHAIN_PASSWORD}" >> $GITHUB_ENV
|
|
||||||
print "codesignTeam=${team_id}" >> $GITHUB_OUTPUT
|
|
||||||
} else {
|
|
||||||
print 'haveCodesignIdent=false' >> $GITHUB_OUTPUT
|
|
||||||
}
|
|
||||||
|
|
||||||
- name: Provisioning Profile 👤
|
|
||||||
shell: zsh --no-rcs --errexit --pipefail {0}
|
|
||||||
id: provisioning
|
|
||||||
if: ${{ fromJSON(steps.codesign.outputs.haveCodesignIdent) }}
|
|
||||||
env:
|
|
||||||
MACOS_SIGNING_PROVISIONING_PROFILE: ${{ inputs.provisioningProfile }}
|
|
||||||
run: |
|
|
||||||
: Provisioning Profile 👤
|
|
||||||
if (( ${+RUNNER_DEBUG} )) setopt XTRACE
|
|
||||||
|
|
||||||
if [[ ${MACOS_SIGNING_PROVISIONING_PROFILE} ]] {
|
|
||||||
print 'haveProvisioningProfile=true' >> $GITHUB_OUTPUT
|
|
||||||
|
|
||||||
local -r profile_path="${RUNNER_TEMP}/build_profile.provisionprofile"
|
|
||||||
print -n "${MACOS_SIGNING_PROVISIONING_PROFILE}" \
|
|
||||||
| base64 --decode --output ${profile_path}
|
|
||||||
|
|
||||||
print '::group::Provisioning Profile Setup'
|
|
||||||
mkdir -p ~/Library/MobileDevice/Provisioning\ Profiles
|
|
||||||
security cms -D -i ${profile_path} -o ${RUNNER_TEMP}/build_profile.plist
|
|
||||||
local -r uuid="$(plutil -extract UUID raw ${RUNNER_TEMP}/build_profile.plist)"
|
|
||||||
local -r team_id="$(plutil -extract TeamIdentifier.0 raw -expect string ${RUNNER_TEMP}/build_profile.plist)"
|
|
||||||
|
|
||||||
if [[ ${team_id} != '${{ steps.codesign.codesignTeam }}' ]] {
|
|
||||||
print '::notice::Code Signing team in provisioning profile does not match certificate.'
|
|
||||||
}
|
|
||||||
|
|
||||||
cp ${profile_path} ~/Library/MobileDevice/Provisioning\ Profiles/${uuid}.provisionprofile
|
|
||||||
print "provisioningProfileUUID=${uuid}" >> $GITHUB_OUTPUT
|
|
||||||
print '::endgroup::'
|
|
||||||
} else {
|
|
||||||
print 'haveProvisioningProfile=false' >> $GITHUB_OUTPUT
|
|
||||||
}
|
|
||||||
|
|
||||||
- name: Notarization 🧑💼
|
|
||||||
shell: zsh --no-rcs --errexit --pipefail {0}
|
|
||||||
id: notarization
|
|
||||||
if: ${{ fromJSON(steps.codesign.outputs.haveCodesignIdent) }}
|
|
||||||
env:
|
|
||||||
MACOS_NOTARIZATION_USERNAME: ${{ inputs.notarizationUser }}
|
|
||||||
MACOS_NOTARIZATION_PASSWORD: ${{ inputs.notarizationPassword }}
|
|
||||||
run: |
|
|
||||||
: Notarization 🧑💼
|
|
||||||
if (( ${+RUNNER_DEBUG} )) setopt XTRACE
|
|
||||||
|
|
||||||
if [[ ${MACOS_NOTARIZATION_USERNAME} && ${MACOS_NOTARIZATION_PASSWORD} ]] {
|
|
||||||
print 'haveNotarizationUser=true' >> $GITHUB_OUTPUT
|
|
||||||
} else {
|
|
||||||
print 'haveNotarizationUser=false' >> $GITHUB_OUTPUT
|
|
||||||
}
|
|
||||||
13
.github/scripts/.Aptfile
vendored
13
.github/scripts/.Aptfile
vendored
@@ -1,13 +0,0 @@
|
|||||||
package 'cmake'
|
|
||||||
package 'ccache'
|
|
||||||
package 'git'
|
|
||||||
package 'jq'
|
|
||||||
package 'ninja-build', bin: 'ninja'
|
|
||||||
package 'pkg-config'
|
|
||||||
package 'libcurl4-openssl-dev'
|
|
||||||
package 'libxtst-dev'
|
|
||||||
package 'libxss-dev'
|
|
||||||
package 'libopencv-dev'
|
|
||||||
package 'libtesseract-dev'
|
|
||||||
package 'libproc2-dev'
|
|
||||||
package 'libusb-1.0-0-dev'
|
|
||||||
7
.github/scripts/.Brewfile
vendored
7
.github/scripts/.Brewfile
vendored
@@ -1,7 +0,0 @@
|
|||||||
brew "ccache"
|
|
||||||
brew "coreutils"
|
|
||||||
brew "cmake"
|
|
||||||
brew "jq"
|
|
||||||
brew "xcbeautify"
|
|
||||||
brew "automake"
|
|
||||||
brew "libtool"
|
|
||||||
4
.github/scripts/.Wingetfile
vendored
4
.github/scripts/.Wingetfile
vendored
@@ -1,4 +0,0 @@
|
|||||||
package 'cmake', path: 'Cmake\bin', bin: 'cmake'
|
|
||||||
package 'innosetup', path: 'Inno Setup 6', bin: 'iscc'
|
|
||||||
package 'OpenSSL', path: 'OpenSSL', bin: 'openssl'
|
|
||||||
package 'Microsoft.VisualStudio.Locator', path: 'vswhere', bin: 'vswhere'
|
|
||||||
488
.github/scripts/.build-deps.zsh
vendored
488
.github/scripts/.build-deps.zsh
vendored
@@ -1,488 +0,0 @@
|
|||||||
#!/usr/bin/env zsh
|
|
||||||
|
|
||||||
builtin emulate -L zsh
|
|
||||||
setopt EXTENDED_GLOB
|
|
||||||
setopt PUSHD_SILENT
|
|
||||||
setopt ERR_EXIT
|
|
||||||
setopt ERR_RETURN
|
|
||||||
setopt NO_UNSET
|
|
||||||
setopt PIPE_FAIL
|
|
||||||
setopt NO_AUTO_PUSHD
|
|
||||||
setopt NO_PUSHD_IGNORE_DUPS
|
|
||||||
setopt FUNCTION_ARGZERO
|
|
||||||
|
|
||||||
## Enable for script debugging
|
|
||||||
# setopt WARN_CREATE_GLOBAL
|
|
||||||
# setopt WARN_NESTED_VAR
|
|
||||||
# setopt XTRACE
|
|
||||||
|
|
||||||
autoload -Uz is-at-least && if ! is-at-least 5.2; then
|
|
||||||
print -u2 -PR "%F{1}${funcstack[1]##*/}:%f Running on Zsh version %B${ZSH_VERSION}%b, but Zsh %B5.2%b is the minimum supported version. Upgrade Zsh to fix this issue."
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
_trap_error() {
|
|
||||||
print -u2 -PR '%F{1} ✖︎ script execution error%f'
|
|
||||||
print -PR -e "
|
|
||||||
Callstack:
|
|
||||||
${(j:\n :)funcfiletrace}
|
|
||||||
"
|
|
||||||
exit 2
|
|
||||||
}
|
|
||||||
|
|
||||||
build() {
|
|
||||||
if (( ! ${+SCRIPT_HOME} )) typeset -g SCRIPT_HOME=${ZSH_ARGZERO:A:h}
|
|
||||||
local host_os=${${(s:-:)ZSH_ARGZERO:t:r}[3]}
|
|
||||||
local project_root=${SCRIPT_HOME:A:h:h}
|
|
||||||
local buildspec_file="${project_root}/buildspec.json"
|
|
||||||
|
|
||||||
trap '_trap_error' ZERR
|
|
||||||
|
|
||||||
fpath=("${SCRIPT_HOME}/utils.zsh" ${fpath})
|
|
||||||
autoload -Uz log_info log_error log_output set_loglevel check_${host_os} setup_${host_os} setup_obs setup_ccache
|
|
||||||
|
|
||||||
if [[ ! -r ${buildspec_file} ]] {
|
|
||||||
log_error \
|
|
||||||
'No buildspec.json found. Please create a build specification for your project.' \
|
|
||||||
'A buildspec.json.template file is provided in the repository to get you started.'
|
|
||||||
return 2
|
|
||||||
}
|
|
||||||
|
|
||||||
typeset -g -a skips=()
|
|
||||||
local -i _verbosity=1
|
|
||||||
local -r _version='1.0.0'
|
|
||||||
local -r -a _valid_targets=(
|
|
||||||
macos-universal
|
|
||||||
linux-x86_64
|
|
||||||
)
|
|
||||||
local -r -a _valid_configs=(Debug RelWithDebInfo Release MinSizeRel)
|
|
||||||
if [[ ${host_os} == 'macos' ]] {
|
|
||||||
local -r -a _valid_generators=(Xcode Ninja 'Unix Makefiles')
|
|
||||||
local generator="${${CI:+Ninja}:-Xcode}"
|
|
||||||
} else {
|
|
||||||
local -r -a _valid_generators=(Ninja 'Unix Makefiles')
|
|
||||||
local generator='Ninja'
|
|
||||||
}
|
|
||||||
local -r _usage="
|
|
||||||
Usage: %B${functrace[1]%:*}%b <option> [<options>]
|
|
||||||
|
|
||||||
%BOptions%b:
|
|
||||||
|
|
||||||
%F{yellow} Build configuration options%f
|
|
||||||
-----------------------------------------------------------------------------
|
|
||||||
%B-t | --target%b Specify target - default: %B%F{green}${host_os}-${CPUTYPE}%f%b
|
|
||||||
%B-c | --config%b Build configuration - default: %B%F{green}RelWithDebInfo%f%b
|
|
||||||
%B-o | --out%b Output directory - default: %B%F{green}RelWithDebInfo%f%b
|
|
||||||
%B--generator%b Specify build system to generate - default: %B%F{green}Ninja%f%b
|
|
||||||
Available generators:
|
|
||||||
- Ninja
|
|
||||||
- Unix Makefiles
|
|
||||||
- Xcode (macOS only)
|
|
||||||
|
|
||||||
%F{yellow} Output options%f
|
|
||||||
-----------------------------------------------------------------------------
|
|
||||||
%B-q | --quiet%b Quiet (error output only)
|
|
||||||
%B-v | --verbose%b Verbose (more detailed output)
|
|
||||||
%B--skip-[all|build|deps|unpack]%b Skip all|building OBS|checking for dependencies|unpacking dependencies
|
|
||||||
%B--debug%b Debug (very detailed and added output)
|
|
||||||
|
|
||||||
%F{yellow} General options%f
|
|
||||||
-----------------------------------------------------------------------------
|
|
||||||
%B-h | --help%b Print this usage help
|
|
||||||
%B-V | --version%b Print script version information"
|
|
||||||
|
|
||||||
local -a args
|
|
||||||
while (( # )) {
|
|
||||||
case ${1} {
|
|
||||||
-t|--target|-c|--config|--generator)
|
|
||||||
if (( # == 1 )) || [[ ${2:0:1} == '-' ]] {
|
|
||||||
log_error "Missing value for option %B${1}%b"
|
|
||||||
log_output ${_usage}
|
|
||||||
exit 2
|
|
||||||
}
|
|
||||||
;;
|
|
||||||
}
|
|
||||||
case ${1} {
|
|
||||||
--)
|
|
||||||
shift
|
|
||||||
args+=($@)
|
|
||||||
break
|
|
||||||
;;
|
|
||||||
-t|--target)
|
|
||||||
if (( ! ${_valid_targets[(Ie)${2}]} )) {
|
|
||||||
log_error "Invalid value %B${2}%b for option %B${1}%b"
|
|
||||||
log_output ${_usage}
|
|
||||||
exit 2
|
|
||||||
}
|
|
||||||
target=${2}
|
|
||||||
shift 2
|
|
||||||
;;
|
|
||||||
-c|--config)
|
|
||||||
if (( ! ${_valid_configs[(Ie)${2}]} )) {
|
|
||||||
log_error "Invalid value %B${2}%b for option %B${1}%b"
|
|
||||||
log_output ${_usage}
|
|
||||||
exit 2
|
|
||||||
}
|
|
||||||
config=${2}
|
|
||||||
shift 2
|
|
||||||
;;
|
|
||||||
-o|--out)
|
|
||||||
OUT_DIR="${2}"
|
|
||||||
shift 2
|
|
||||||
;;
|
|
||||||
-q|--quiet) (( _verbosity -= 1 )) || true; shift ;;
|
|
||||||
-v|--verbose) (( _verbosity += 1 )); shift ;;
|
|
||||||
-h|--help) log_output ${_usage}; exit 0 ;;
|
|
||||||
-V|--version) print -Pr "${_version}"; exit 0 ;;
|
|
||||||
--debug) _verbosity=3; shift ;;
|
|
||||||
--generator)
|
|
||||||
if (( ! ${_valid_generators[(Ie)${2}]} )) {
|
|
||||||
log_error "Invalid value %B${2}%b for option %B${1}%b"
|
|
||||||
log_output ${_usage}
|
|
||||||
exit 2
|
|
||||||
}
|
|
||||||
generator=${2}
|
|
||||||
shift 2
|
|
||||||
;;
|
|
||||||
--skip-*)
|
|
||||||
local _skip="${${(s:-:)1}[-1]}"
|
|
||||||
local _check=(all deps unpack build)
|
|
||||||
(( ${_check[(Ie)${_skip}]} )) || log_warning "Invalid skip mode %B${_skip}%b supplied"
|
|
||||||
typeset -g -a skips=(${skips} ${_skip})
|
|
||||||
shift
|
|
||||||
;;
|
|
||||||
*) log_error "Unknown option: %B${1}%b"; log_output ${_usage}; exit 2 ;;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
set -- ${(@)args}
|
|
||||||
set_loglevel ${_verbosity}
|
|
||||||
|
|
||||||
check_${host_os}
|
|
||||||
setup_ccache
|
|
||||||
|
|
||||||
local product_name
|
|
||||||
local product_version
|
|
||||||
local git_tag="$(git describe --tags)"
|
|
||||||
|
|
||||||
read -r product_name product_version <<< \
|
|
||||||
"$(jq -r '. | {name, version} | join(" ")' ${buildspec_file})"
|
|
||||||
|
|
||||||
if [[ "${git_tag}" =~ '^([0-9]+\.){0,2}(\*|[0-9]+)$' ]] {
|
|
||||||
log_info "Using git tag as version identifier '${git_tag}'"
|
|
||||||
product_version="${git_tag}"
|
|
||||||
} else {
|
|
||||||
log_info "Using buildspec.json version identifier '${product_version}'"
|
|
||||||
}
|
|
||||||
|
|
||||||
case ${host_os} {
|
|
||||||
macos)
|
|
||||||
sed -i '' \
|
|
||||||
"s/project(\(.*\) VERSION \(.*\))/project(${product_name} VERSION ${product_version})/" \
|
|
||||||
"${project_root}/CMakeLists.txt"
|
|
||||||
;;
|
|
||||||
linux)
|
|
||||||
sed -i'' \
|
|
||||||
"s/project(\(.*\) VERSION \(.*\))/project(${product_name} VERSION ${product_version})/"\
|
|
||||||
"${project_root}/CMakeLists.txt"
|
|
||||||
;;
|
|
||||||
}
|
|
||||||
|
|
||||||
log_info "Run plugin configure step to download OBS deps ..."
|
|
||||||
pushd ${project_root}
|
|
||||||
if (( ! (${skips[(Ie)all]} + ${skips[(Ie)build]}) )) {
|
|
||||||
log_group "Configuring ${product_name}..."
|
|
||||||
|
|
||||||
local -a cmake_args=()
|
|
||||||
local -a cmake_build_args=(--build)
|
|
||||||
local -a cmake_install_args=(--install)
|
|
||||||
|
|
||||||
case ${_loglevel} {
|
|
||||||
0) cmake_args+=(-Wno_deprecated -Wno-dev --log-level=ERROR) ;;
|
|
||||||
1) ;;
|
|
||||||
2) cmake_build_args+=(--verbose) ;;
|
|
||||||
*) cmake_args+=(--debug-output) ;;
|
|
||||||
}
|
|
||||||
|
|
||||||
local -r _preset="${target%%-*}${CI:+-ci}"
|
|
||||||
case ${target} {
|
|
||||||
macos-*)
|
|
||||||
if (( ${+CI} )) typeset -gx NSUnbufferedIO=YES
|
|
||||||
|
|
||||||
cmake_args+=(
|
|
||||||
-DENABLE_TWITCH_PLUGIN=OFF
|
|
||||||
--preset ${_preset}
|
|
||||||
)
|
|
||||||
|
|
||||||
if (( codesign )) {
|
|
||||||
autoload -Uz read_codesign_team && read_codesign_team
|
|
||||||
|
|
||||||
if [[ -z ${CODESIGN_TEAM} ]] {
|
|
||||||
autoload -Uz read_codesign && read_codesign
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
cmake_args+=(
|
|
||||||
-DCODESIGN_TEAM=${CODESIGN_TEAM:-}
|
|
||||||
-DCODESIGN_IDENTITY=${CODESIGN_IDENT:--}
|
|
||||||
)
|
|
||||||
|
|
||||||
cmake_build_args+=(--preset ${_preset} --parallel --config ${config} -- ONLY_ACTIVE_ARCH=NO -arch arm64 -arch x86_64)
|
|
||||||
cmake_install_args+=(build_macos --config ${config} --prefix "${project_root}/release/${config}")
|
|
||||||
|
|
||||||
local -a xcbeautify_opts=()
|
|
||||||
if (( _loglevel == 0 )) xcbeautify_opts+=(--quiet)
|
|
||||||
;;
|
|
||||||
linux-*)
|
|
||||||
cmake_args+=(
|
|
||||||
--preset ${_preset}-${target##*-}
|
|
||||||
-G "${generator}"
|
|
||||||
-DQT_VERSION=${QT_VERSION:-6}
|
|
||||||
-DCMAKE_BUILD_TYPE=${config}
|
|
||||||
)
|
|
||||||
|
|
||||||
local cmake_version
|
|
||||||
read -r _ _ cmake_version <<< "$(cmake --version)"
|
|
||||||
|
|
||||||
if [[ ${CPUTYPE} != ${target##*-} ]] {
|
|
||||||
if is-at-least 3.21.0 ${cmake_version}; then
|
|
||||||
cmake_args+=(--toolchain "${project_root}/cmake/linux/toolchains/${target##*-}-linux-gcc.cmake")
|
|
||||||
else
|
|
||||||
cmake_args+=(-D"CMAKE_TOOLCHAIN_FILE=${project_root}/cmake/linux/toolchains/${target##*-}-linux-gcc.cmake")
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
cmake_build_args+=(--preset ${_preset}-${target##*-} --config ${config})
|
|
||||||
if [[ ${generator} == 'Unix Makefiles' ]] {
|
|
||||||
cmake_build_args+=(--parallel $(( $(nproc) + 1 )))
|
|
||||||
} else {
|
|
||||||
cmake_build_args+=(--parallel)
|
|
||||||
}
|
|
||||||
|
|
||||||
cmake_install_args+=(build_${target##*-} --prefix ${project_root}/release/${config})
|
|
||||||
;;
|
|
||||||
}
|
|
||||||
|
|
||||||
log_debug "Attempting to configure with CMake arguments: ${cmake_args}"
|
|
||||||
|
|
||||||
cmake ${cmake_args}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
popd
|
|
||||||
log_group
|
|
||||||
|
|
||||||
if [[ -z "${OUT_DIR}" ]] {
|
|
||||||
OUT_DIR=".deps/advss-build-dependencies"
|
|
||||||
}
|
|
||||||
mkdir -p "${project_root}/${OUT_DIR}"
|
|
||||||
local advss_dep_path="$(realpath ${project_root}/${OUT_DIR})"
|
|
||||||
local deps_version=$(jq -r '.dependencies.prebuilt.version' ${buildspec_file})
|
|
||||||
local qt_deps_version=$(jq -r '.dependencies.qt6.version' ${buildspec_file})
|
|
||||||
local _plugin_deps="${project_root:h}/.deps/obs-deps-${deps_version}-${target##*-};${project_root:h}/.deps/obs-deps-qt6-${qt_deps_version}-${target##*-}"
|
|
||||||
|
|
||||||
case ${host_os} {
|
|
||||||
macos)
|
|
||||||
local opencv_dir="${project_root}/deps/opencv"
|
|
||||||
local opencv_build_dir="${opencv_dir}/build_${target##*-}"
|
|
||||||
|
|
||||||
local -a opencv_cmake_args=(
|
|
||||||
-DCMAKE_BUILD_TYPE=Release
|
|
||||||
-DBUILD_LIST=core,imgproc,objdetect
|
|
||||||
-DCMAKE_OSX_ARCHITECTURES=${${target##*-}//universal/x86_64;arm64}
|
|
||||||
-DCMAKE_OSX_DEPLOYMENT_TARGET=${DEPLOYMENT_TARGET:-10.15}
|
|
||||||
-DCMAKE_PREFIX_PATH="${advss_dep_path};${_plugin_deps}"
|
|
||||||
-DCMAKE_INSTALL_PREFIX="${advss_dep_path}"
|
|
||||||
)
|
|
||||||
|
|
||||||
if [ "${target}" != "macos-x86_64" ]; then
|
|
||||||
opencv_cmake_args+=(-DWITH_IPP=OFF)
|
|
||||||
fi
|
|
||||||
|
|
||||||
pushd ${opencv_dir}
|
|
||||||
log_info "Configure OpenCV ..."
|
|
||||||
cmake -S . -B ${opencv_build_dir} ${opencv_cmake_args}
|
|
||||||
|
|
||||||
log_info "Building OpenCV ..."
|
|
||||||
cmake --build ${opencv_build_dir} --config Release
|
|
||||||
|
|
||||||
log_info "Installing OpenCV ..."
|
|
||||||
cmake --install ${opencv_build_dir} --prefix "${advss_dep_path}" --config Release || true
|
|
||||||
popd
|
|
||||||
|
|
||||||
local leptonica_dir="${project_root}/deps/leptonica"
|
|
||||||
local leptonica_build_dir="${leptonica_dir}/build_${target##*-}"
|
|
||||||
|
|
||||||
local -a leptonica_cmake_args=(
|
|
||||||
-DCMAKE_BUILD_TYPE=Release
|
|
||||||
-DCMAKE_OSX_ARCHITECTURES=${${target##*-}//universal/x86_64;arm64}
|
|
||||||
-DCMAKE_OSX_DEPLOYMENT_TARGET=${DEPLOYMENT_TARGET:-10.15}
|
|
||||||
-DSW_BUILD=OFF
|
|
||||||
-DOPENJPEG_SUPPORT=OFF
|
|
||||||
-DLIBWEBP_SUPPORT=OFF
|
|
||||||
-DCMAKE_DISABLE_FIND_PACKAGE_GIF=TRUE
|
|
||||||
-DCMAKE_DISABLE_FIND_PACKAGE_JPEG=TRUE
|
|
||||||
-DCMAKE_DISABLE_FIND_PACKAGE_TIFF=TRUE
|
|
||||||
-DCMAKE_DISABLE_FIND_PACKAGE_PNG=TRUE
|
|
||||||
-DCMAKE_PREFIX_PATH="${advss_dep_path};${_plugin_deps}"
|
|
||||||
-DCMAKE_INSTALL_PREFIX="${advss_dep_path}"
|
|
||||||
)
|
|
||||||
|
|
||||||
pushd ${leptonica_dir}
|
|
||||||
log_info "Configure Leptonica ..."
|
|
||||||
cmake -S . -B ${leptonica_build_dir} ${leptonica_cmake_args}
|
|
||||||
|
|
||||||
log_info "Building Leptonica ..."
|
|
||||||
cmake --build ${leptonica_build_dir} --config Release
|
|
||||||
|
|
||||||
log_info "Installing Leptonica ..."
|
|
||||||
# Workaround for "unknown file attribute: H" errors when running install
|
|
||||||
cmake --install ${leptonica_build_dir} --prefix "${advss_dep_path}" --config Release || :
|
|
||||||
popd
|
|
||||||
|
|
||||||
local tesseract_dir="${project_root}/deps/tesseract"
|
|
||||||
local tesseract_build_dir_x86_64="${tesseract_dir}/build_x86_64"
|
|
||||||
|
|
||||||
pushd ${tesseract_dir}
|
|
||||||
log_info "Configure Tesseract (x86_64) ..."
|
|
||||||
|
|
||||||
local -a tesseract_cmake_args=(
|
|
||||||
-DCMAKE_BUILD_TYPE=Release
|
|
||||||
-DCMAKE_SYSTEM_NAME="Darwin"
|
|
||||||
-DCMAKE_OSX_ARCHITECTURES=x86_64
|
|
||||||
-DCMAKE_SYSTEM_PROCESSOR=x86_64
|
|
||||||
-DCMAKE_OSX_DEPLOYMENT_TARGET=${DEPLOYMENT_TARGET:-10.15}
|
|
||||||
-DSW_BUILD=OFF
|
|
||||||
-DBUILD_TRAINING_TOOLS=OFF
|
|
||||||
-DCMAKE_PREFIX_PATH="${advss_dep_path};${_plugin_deps}"
|
|
||||||
-DCMAKE_INSTALL_PREFIX="${advss_dep_path}"
|
|
||||||
)
|
|
||||||
|
|
||||||
cmake -S . -B ${tesseract_build_dir_x86_64} ${tesseract_cmake_args}
|
|
||||||
|
|
||||||
log_info "Building Tesseract (x86_64) ..."
|
|
||||||
cmake --build ${tesseract_build_dir_x86_64} --config Release
|
|
||||||
|
|
||||||
log_info "Configure Tesseract (arm64) ..."
|
|
||||||
|
|
||||||
git checkout .
|
|
||||||
|
|
||||||
local tesseract_build_dir_arm64="${tesseract_dir}/build_arm64"
|
|
||||||
local -a tesseract_cmake_args=(
|
|
||||||
-DCMAKE_BUILD_TYPE=Release
|
|
||||||
-DCMAKE_SYSTEM_NAME="Darwin"
|
|
||||||
-DCMAKE_OSX_ARCHITECTURES=arm64
|
|
||||||
-DCMAKE_SYSTEM_PROCESSOR=arm64
|
|
||||||
-DCMAKE_OSX_DEPLOYMENT_TARGET=${DEPLOYMENT_TARGET:-10.15}
|
|
||||||
-DSW_BUILD=OFF
|
|
||||||
-DBUILD_TRAINING_TOOLS=OFF
|
|
||||||
-DCMAKE_PREFIX_PATH="${advss_dep_path};${_plugin_deps}"
|
|
||||||
-DCMAKE_INSTALL_PREFIX="${advss_dep_path}"
|
|
||||||
)
|
|
||||||
|
|
||||||
cmake -S . -B ${tesseract_build_dir_arm64} ${tesseract_cmake_args}
|
|
||||||
|
|
||||||
log_info "Building Tesseract (arm64) ..."
|
|
||||||
cmake --build ${tesseract_build_dir_arm64} --config Release
|
|
||||||
|
|
||||||
log_info "Combine arm and x86 libtesseract binaries ..."
|
|
||||||
mv ${tesseract_build_dir_arm64}/libtesseract.a ${tesseract_build_dir_arm64}/libtesseract_arm.a
|
|
||||||
lipo -create ${tesseract_build_dir_x86_64}/libtesseract.a ${tesseract_build_dir_arm64}/libtesseract_arm.a -output ${tesseract_build_dir_arm64}/libtesseract.a
|
|
||||||
|
|
||||||
log_info "Installing Tesseract..."
|
|
||||||
cmake --install ${tesseract_build_dir_arm64} --prefix "${advss_dep_path}" --config Release
|
|
||||||
|
|
||||||
popd
|
|
||||||
|
|
||||||
pushd ${advss_dep_path}
|
|
||||||
log_info "Prepare openssl ..."
|
|
||||||
rm -rf openssl
|
|
||||||
git clone https://github.com/openssl/openssl.git --branch openssl-3.1.2 --depth 1
|
|
||||||
mv openssl openssl_x86
|
|
||||||
cp -r openssl_x86 openssl_arm
|
|
||||||
|
|
||||||
log_info "Building openssl x86 ..."
|
|
||||||
export MACOSX_DEPLOYMENT_TARGET=10.9
|
|
||||||
cd openssl_x86
|
|
||||||
./Configure darwin64-x86_64-cc shared
|
|
||||||
make
|
|
||||||
|
|
||||||
log_info "Building openssl arm ..."
|
|
||||||
export MACOSX_DEPLOYMENT_TARGET=10.15
|
|
||||||
cd ../openssl_arm
|
|
||||||
./Configure enable-rc5 zlib darwin64-arm64-cc no-asm
|
|
||||||
make
|
|
||||||
|
|
||||||
log_info "Combine arm and x86 openssl binaries ..."
|
|
||||||
cd ..
|
|
||||||
mkdir openssl-combined
|
|
||||||
lipo -create openssl_x86/libcrypto.a openssl_arm/libcrypto.a -output openssl-combined/libcrypto.a
|
|
||||||
lipo -create openssl_x86/libssl.a openssl_arm/libssl.a -output openssl-combined/libssl.a
|
|
||||||
|
|
||||||
log_info "Clean up openssl dir ..."
|
|
||||||
mv openssl_x86 openssl
|
|
||||||
rm -rf openssl_arm
|
|
||||||
popd
|
|
||||||
|
|
||||||
pushd ${project_root}/deps/libusb
|
|
||||||
|
|
||||||
log_info "Configure libusb x86 ..."
|
|
||||||
export SDKROOT=$(xcrun --sdk macosx --show-sdk-path)
|
|
||||||
export CC=$(xcrun --sdk macosx --find clang)
|
|
||||||
export CXX=$(xcrun --sdk macosx --find clang++)
|
|
||||||
export CFLAGS="-arch x86_64 -isysroot $SDKROOT"
|
|
||||||
export CXXFLAGS="-arch x86_64 -isysroot $SDKROOT"
|
|
||||||
export LDFLAGS="-arch x86_64 -isysroot $SDKROOT"
|
|
||||||
export MACOSX_DEPLOYMENT_TARGET=10.15
|
|
||||||
|
|
||||||
log_info "Building libusb x86 ..."
|
|
||||||
mkdir ${project_root}/deps/libusb/out_x86
|
|
||||||
./autogen.sh
|
|
||||||
./configure --host=x86_64-apple-darwin --prefix=${advss_dep_path}
|
|
||||||
make && make install
|
|
||||||
|
|
||||||
log_info "Configure libusb arm ..."
|
|
||||||
make clean
|
|
||||||
rm -r ${project_root}/deps/libusb/out_x86
|
|
||||||
mkdir ${project_root}/deps/libusb/out_x86
|
|
||||||
./configure --host=aarch64-apple-darwin --prefix=${project_root}/deps/libusb/out_x86
|
|
||||||
make && make install
|
|
||||||
|
|
||||||
log_info "Building libusb arm ..."
|
|
||||||
make clean
|
|
||||||
export SDKROOT=$(xcrun --sdk macosx --show-sdk-path)
|
|
||||||
export CC=$(xcrun --sdk macosx --find clang)
|
|
||||||
export CXX=$(xcrun --sdk macosx --find clang++)
|
|
||||||
export CFLAGS="-arch arm64 -isysroot $SDKROOT"
|
|
||||||
export CXXFLAGS="-arch arm64 -isysroot $SDKROOT"
|
|
||||||
export LDFLAGS="-arch arm64 -isysroot $SDKROOT"
|
|
||||||
export MACOSX_DEPLOYMENT_TARGET=10.15
|
|
||||||
mkdir ${project_root}/deps/libusb/out_arm
|
|
||||||
./configure --host=aarch64-apple-darwin --prefix=${project_root}/deps/libusb/out_arm
|
|
||||||
make && make install
|
|
||||||
|
|
||||||
log_info "Combine arm and x86 libusb binaries ..."
|
|
||||||
lipo -create ${project_root}/deps/libusb/out_x86/lib/libusb-1.0.0.dylib \
|
|
||||||
${project_root}/deps/libusb/out_arm/lib/libusb-1.0.0.dylib \
|
|
||||||
-output ${advss_dep_path}/lib/temp-libusb-1.0.0.dylib
|
|
||||||
mv ${advss_dep_path}/lib/temp-libusb-1.0.0.dylib ${advss_dep_path}/lib/libusb-1.0.0.dylib
|
|
||||||
install_name_tool -id @rpath/libusb-1.0.0.dylib ${advss_dep_path}/lib/libusb-1.0.0.dylib
|
|
||||||
log_info "Clean up libusb ..."
|
|
||||||
|
|
||||||
unset SDKROOT
|
|
||||||
unset CC
|
|
||||||
unset CXX
|
|
||||||
unset CFLAGS
|
|
||||||
unset CXXFLAGS
|
|
||||||
unset LDFLAGS
|
|
||||||
unset MACOSX_DEPLOYMENT_TARGET
|
|
||||||
|
|
||||||
popd
|
|
||||||
;;
|
|
||||||
linux)
|
|
||||||
# Nothing to do for now
|
|
||||||
;;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
build ${@}
|
|
||||||
338
.github/scripts/.build.zsh
vendored
338
.github/scripts/.build.zsh
vendored
@@ -1,338 +0,0 @@
|
|||||||
#!/usr/bin/env zsh
|
|
||||||
|
|
||||||
builtin emulate -L zsh
|
|
||||||
setopt EXTENDED_GLOB
|
|
||||||
setopt PUSHD_SILENT
|
|
||||||
setopt ERR_EXIT
|
|
||||||
setopt ERR_RETURN
|
|
||||||
setopt NO_UNSET
|
|
||||||
setopt PIPE_FAIL
|
|
||||||
setopt NO_AUTO_PUSHD
|
|
||||||
setopt NO_PUSHD_IGNORE_DUPS
|
|
||||||
setopt FUNCTION_ARGZERO
|
|
||||||
|
|
||||||
## Enable for script debugging
|
|
||||||
# setopt WARN_CREATE_GLOBAL
|
|
||||||
# setopt WARN_NESTED_VAR
|
|
||||||
# setopt XTRACE
|
|
||||||
|
|
||||||
autoload -Uz is-at-least && if ! is-at-least 5.2; then
|
|
||||||
print -u2 -PR "${CI:+::error::}%F{1}${funcstack[1]##*/}:%f Running on Zsh version %B${ZSH_VERSION}%b, but Zsh %B5.2%b is the minimum supported version. Upgrade Zsh to fix this issue."
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
TRAPEXIT() {
|
|
||||||
local return_value=$?
|
|
||||||
|
|
||||||
if (( ${+CI} )) unset NSUnbufferedIO
|
|
||||||
|
|
||||||
return ${return_value}
|
|
||||||
}
|
|
||||||
|
|
||||||
TRAPZERR() {
|
|
||||||
if (( ${_loglevel:-3} > 2 )) {
|
|
||||||
print -u2 -PR "${CI:+::error::}%F{1} ✖︎ script execution error%f"
|
|
||||||
print -PR -e "
|
|
||||||
Callstack:
|
|
||||||
${(j:\n :)funcfiletrace}
|
|
||||||
"
|
|
||||||
}
|
|
||||||
|
|
||||||
exit 2
|
|
||||||
}
|
|
||||||
|
|
||||||
build() {
|
|
||||||
if (( ! ${+SCRIPT_HOME} )) typeset -g SCRIPT_HOME=${ZSH_ARGZERO:A:h}
|
|
||||||
local host_os=${${(s:-:)ZSH_ARGZERO:t:r}[2]}
|
|
||||||
local project_root=${SCRIPT_HOME:A:h:h}
|
|
||||||
local buildspec_file=${project_root}/buildspec.json
|
|
||||||
local dep_dir=""
|
|
||||||
|
|
||||||
fpath=("${SCRIPT_HOME}/utils.zsh" ${fpath})
|
|
||||||
autoload -Uz log_group log_info log_error log_output set_loglevel check_${host_os} setup_ccache
|
|
||||||
|
|
||||||
if [[ ! -r ${buildspec_file} ]] {
|
|
||||||
log_error \
|
|
||||||
'No buildspec.json found. Please create a build specification for your project.'
|
|
||||||
return 2
|
|
||||||
}
|
|
||||||
|
|
||||||
typeset -g -a skips=()
|
|
||||||
local -i verbosity=1
|
|
||||||
local -r _version='2.0.0'
|
|
||||||
local -r -a _valid_targets=(
|
|
||||||
macos-universal
|
|
||||||
linux-x86_64
|
|
||||||
linux-aarch64
|
|
||||||
)
|
|
||||||
local target
|
|
||||||
local config='RelWithDebInfo'
|
|
||||||
local -r -a _valid_configs=(Debug RelWithDebInfo Release MinSizeRel)
|
|
||||||
local -i codesign=0
|
|
||||||
|
|
||||||
if [[ ${host_os} == linux ]] {
|
|
||||||
local -r -a _valid_generators=(Ninja 'Unix Makefiles')
|
|
||||||
local generator='Ninja'
|
|
||||||
local -r _usage_host="
|
|
||||||
%F{yellow} Additional options for Linux builds%f
|
|
||||||
-----------------------------------------------------------------------------
|
|
||||||
%B--generator%b Specify build system to generate
|
|
||||||
Available generators:
|
|
||||||
- Ninja
|
|
||||||
- Unix Makefiles"
|
|
||||||
} elif [[ ${host_os} == macos ]] {
|
|
||||||
local -r _usage_host="
|
|
||||||
%F{yellow} Additional options for macOS builds%f
|
|
||||||
-----------------------------------------------------------------------------
|
|
||||||
%B-s | --codesign%b Enable codesigning (macOS only)"
|
|
||||||
}
|
|
||||||
|
|
||||||
local -i print_config=0
|
|
||||||
local -r _usage="
|
|
||||||
Usage: %B${functrace[1]%:*}%b <option> [<options>]
|
|
||||||
|
|
||||||
%BOptions%b:
|
|
||||||
|
|
||||||
%F{yellow} Build configuration options%f
|
|
||||||
-----------------------------------------------------------------------------
|
|
||||||
%B-t | --target%b Specify target
|
|
||||||
%B-c | --config%b Build configuration
|
|
||||||
%B-p | --portable%b Enable portable mode (Linux only)
|
|
||||||
%B-d | --dep%b Dependency directory name - default: %B%F{green}advss-build-dependencies%f%b
|
|
||||||
%B--skip-[all|build|deps]%b Skip all|building|checking for dependencies
|
|
||||||
|
|
||||||
%F{yellow} Output options%f
|
|
||||||
-----------------------------------------------------------------------------
|
|
||||||
%B-q | --quiet%b Quiet (error output only)
|
|
||||||
%B-v | --verbose%b Verbose (more detailed output)
|
|
||||||
%B--debug%b Debug (very detailed and added output)
|
|
||||||
|
|
||||||
%F{yellow} General options%f
|
|
||||||
-----------------------------------------------------------------------------
|
|
||||||
%B-h | --help%b Print this usage help
|
|
||||||
%B-V | --version%b Print script version information
|
|
||||||
${_usage_host:-}"
|
|
||||||
|
|
||||||
local -a args
|
|
||||||
while (( # )) {
|
|
||||||
case ${1} {
|
|
||||||
-t|--target|-c|--config|--generator)
|
|
||||||
if (( # == 1 )) || [[ ${2:0:1} == '-' ]] {
|
|
||||||
log_error "Missing value for option %B${1}%b"
|
|
||||||
log_output ${_usage}
|
|
||||||
exit 2
|
|
||||||
}
|
|
||||||
;;
|
|
||||||
}
|
|
||||||
case ${1} {
|
|
||||||
--)
|
|
||||||
shift
|
|
||||||
args+=($@)
|
|
||||||
break
|
|
||||||
;;
|
|
||||||
-t|--target)
|
|
||||||
if (( ! ${_valid_targets[(Ie)${2}]} )) {
|
|
||||||
log_error "Invalid value %B${2}%b for option %B${1}%b"
|
|
||||||
log_output ${_usage}
|
|
||||||
exit 2
|
|
||||||
}
|
|
||||||
target=${2}
|
|
||||||
shift 2
|
|
||||||
;;
|
|
||||||
-c|--config)
|
|
||||||
if (( ! ${_valid_configs[(Ie)${2}]} )) {
|
|
||||||
log_error "Invalid value %B${2}%b for option %B${1}%b"
|
|
||||||
log_output ${_usage}
|
|
||||||
exit 2
|
|
||||||
}
|
|
||||||
config=${2}
|
|
||||||
shift 2
|
|
||||||
;;
|
|
||||||
-s|--codesign) codesign=1; shift ;;
|
|
||||||
-d|--dep)
|
|
||||||
dep_dir="${2}"
|
|
||||||
shift 2
|
|
||||||
;;
|
|
||||||
-p|--portable) typeset -g PORTABLE=1; shift ;;
|
|
||||||
-q|--quiet) (( verbosity -= 1 )) || true; shift ;;
|
|
||||||
-v|--verbose) (( verbosity += 1 )); shift ;;
|
|
||||||
-h|--help) log_output ${_usage}; exit 0 ;;
|
|
||||||
-V|--version) print -Pr "${_version}"; exit 0 ;;
|
|
||||||
--debug) verbosity=3; shift ;;
|
|
||||||
--generator)
|
|
||||||
if [[ ${host_os} == linux ]] {
|
|
||||||
if (( ! ${_valid_generators[(Ie)${2}]} )) {
|
|
||||||
log_error "Invalid value %B${2}%b for option %B${1}%b"
|
|
||||||
log_output ${_usage}
|
|
||||||
exit 2
|
|
||||||
}
|
|
||||||
generator=${2}
|
|
||||||
}
|
|
||||||
shift 2
|
|
||||||
;;
|
|
||||||
--print-config) print_config=1; skips+=(deps); shift ;;
|
|
||||||
--skip-*)
|
|
||||||
local -r _skip="${${(s:-:)1}[-1]}"
|
|
||||||
local -r -a _check=(all build deps)
|
|
||||||
(( ${_check[(Ie)${_skip}]} )) || log_warning "Invalid skip mode %B${_skip}%b supplied"
|
|
||||||
typeset -g -a skips=(${skips} ${_skip})
|
|
||||||
shift
|
|
||||||
;;
|
|
||||||
*) log_error "Unknown option: %B${1}%b"; log_output ${_usage}; exit 2 ;;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
: "${target:="${host_os}-${CPUTYPE}"}"
|
|
||||||
|
|
||||||
set -- ${(@)args}
|
|
||||||
set_loglevel ${verbosity}
|
|
||||||
|
|
||||||
if (( ! (${skips[(Ie)all]} + ${skips[(Ie)deps]}) )) {
|
|
||||||
check_${host_os}
|
|
||||||
setup_ccache
|
|
||||||
}
|
|
||||||
|
|
||||||
if [[ ${host_os} == linux ]] {
|
|
||||||
autoload -Uz setup_linux && setup_linux
|
|
||||||
}
|
|
||||||
|
|
||||||
local advss_deps_path
|
|
||||||
if [[ -z "${dep_dir}" ]] {
|
|
||||||
log_info "Building advss deps ..."
|
|
||||||
dep_dir=".deps/advss-build-dependencies"
|
|
||||||
${SCRIPT_HOME}/build-deps-${host_os}.zsh -c "${BUILD_CONFIG:-RelWithDebInfo}" -t "${target}" --generator "${generator}" -o "${dep_dir}"
|
|
||||||
}
|
|
||||||
advss_deps_path=$(realpath ${project_root}/${dep_dir})
|
|
||||||
log_info "Using advss deps at $advss_deps_path ..."
|
|
||||||
|
|
||||||
local product_name
|
|
||||||
local product_version
|
|
||||||
local git_tag="$(git describe --tags)"
|
|
||||||
read -r product_name product_version <<< \
|
|
||||||
"$(jq -r '. | {name, version} | join(" ")' ${buildspec_file})"
|
|
||||||
|
|
||||||
if [[ "${git_tag}" =~ '^([0-9]+\.){0,2}(\*|[0-9]+)$' ]] {
|
|
||||||
log_info "Using git tag as version identifier '${git_tag}'"
|
|
||||||
product_version="${git_tag}"
|
|
||||||
} else {
|
|
||||||
log_info "Using buildspec.json version identifier '${product_version}'"
|
|
||||||
}
|
|
||||||
|
|
||||||
case ${host_os} {
|
|
||||||
macos)
|
|
||||||
sed -i '' \
|
|
||||||
"s/project(\(.*\) VERSION \(.*\))/project(${product_name} VERSION ${product_version})/" \
|
|
||||||
"${project_root}/CMakeLists.txt"
|
|
||||||
;;
|
|
||||||
linux)
|
|
||||||
sed -i'' \
|
|
||||||
"s/project(\(.*\) VERSION \(.*\))/project(${product_name} VERSION ${product_version})/"\
|
|
||||||
"${project_root}/CMakeLists.txt"
|
|
||||||
;;
|
|
||||||
}
|
|
||||||
|
|
||||||
pushd ${project_root}
|
|
||||||
if (( ! (${skips[(Ie)all]} + ${skips[(Ie)build]}) )) {
|
|
||||||
log_group "Configuring ${product_name}..."
|
|
||||||
|
|
||||||
local -a cmake_args=(
|
|
||||||
-DCMAKE_PREFIX_PATH="${advss_deps_path}"
|
|
||||||
)
|
|
||||||
local -a cmake_build_args=(--build)
|
|
||||||
local -a cmake_install_args=(--install)
|
|
||||||
|
|
||||||
case ${_loglevel} {
|
|
||||||
0) cmake_args+=(-Wno_deprecated -Wno-dev --log-level=ERROR) ;;
|
|
||||||
1) ;;
|
|
||||||
2) cmake_build_args+=(--verbose) ;;
|
|
||||||
*) cmake_args+=(--debug-output) ;;
|
|
||||||
}
|
|
||||||
|
|
||||||
local -r _preset="${target%%-*}${CI:+-ci}"
|
|
||||||
case ${target} {
|
|
||||||
macos-*)
|
|
||||||
if (( ${+CI} )) typeset -gx NSUnbufferedIO=YES
|
|
||||||
|
|
||||||
local openssl_lib_dir="${advss_deps_path}/openssl-combined/"
|
|
||||||
local openssl_include_dir="${advss_deps_path}/openssl/include"
|
|
||||||
|
|
||||||
cmake_args+=(
|
|
||||||
-DOPENSSL_INCLUDE_DIR="${openssl_include_dir}"
|
|
||||||
-DOPENSSL_LIBRARIES="${openssl_lib_dir}/libcrypto.a;${openssl_lib_dir}/libssl.a"
|
|
||||||
--preset ${_preset}
|
|
||||||
)
|
|
||||||
|
|
||||||
if (( codesign )) {
|
|
||||||
autoload -Uz read_codesign_team && read_codesign_team
|
|
||||||
|
|
||||||
if [[ -z ${CODESIGN_TEAM} ]] {
|
|
||||||
autoload -Uz read_codesign && read_codesign
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
cmake_args+=(
|
|
||||||
-DCODESIGN_TEAM=${CODESIGN_TEAM:-}
|
|
||||||
-DCODESIGN_IDENTITY=${CODESIGN_IDENT:--}
|
|
||||||
)
|
|
||||||
|
|
||||||
cmake_build_args+=(--preset ${_preset} --parallel --config ${config} -- ONLY_ACTIVE_ARCH=NO -arch arm64 -arch x86_64)
|
|
||||||
cmake_install_args+=(build_macos --config ${config} --prefix "${project_root}/release/${config}")
|
|
||||||
|
|
||||||
local -a xcbeautify_opts=()
|
|
||||||
if (( _loglevel == 0 )) xcbeautify_opts+=(--quiet)
|
|
||||||
;;
|
|
||||||
linux-*)
|
|
||||||
cmake_args+=(
|
|
||||||
--preset ${_preset}-${target##*-}
|
|
||||||
-G "${generator}"
|
|
||||||
-DQT_VERSION=${QT_VERSION:-6}
|
|
||||||
-DCMAKE_BUILD_TYPE=${config}
|
|
||||||
-DCMAKE_INSTALL_PREFIX=/usr
|
|
||||||
)
|
|
||||||
|
|
||||||
local cmake_version
|
|
||||||
read -r _ _ cmake_version <<< "$(cmake --version)"
|
|
||||||
|
|
||||||
if [[ ${CPUTYPE} != ${target##*-} ]] {
|
|
||||||
if is-at-least 3.21.0 ${cmake_version}; then
|
|
||||||
cmake_args+=(--toolchain "${project_root}/cmake/linux/toolchains/${target##*-}-linux-gcc.cmake")
|
|
||||||
else
|
|
||||||
cmake_args+=(-D"CMAKE_TOOLCHAIN_FILE=${project_root}/cmake/linux/toolchains/${target##*-}-linux-gcc.cmake")
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
cmake_build_args+=(--preset ${_preset}-${target##*-} --config ${config})
|
|
||||||
if [[ ${generator} == 'Unix Makefiles' ]] {
|
|
||||||
cmake_build_args+=(--parallel $(( $(nproc) + 1 )))
|
|
||||||
} else {
|
|
||||||
cmake_build_args+=(--parallel)
|
|
||||||
}
|
|
||||||
|
|
||||||
cmake_install_args+=(build_${target##*-} --prefix ${project_root}/release/${config})
|
|
||||||
;;
|
|
||||||
}
|
|
||||||
|
|
||||||
log_debug "Attempting to configure with CMake arguments: ${cmake_args}"
|
|
||||||
|
|
||||||
cmake ${cmake_args}
|
|
||||||
|
|
||||||
log_group "Building ${product_name}..."
|
|
||||||
if [[ ${host_os} == macos ]] {
|
|
||||||
if (( _loglevel > 1 )) {
|
|
||||||
cmake ${cmake_build_args}
|
|
||||||
} else {
|
|
||||||
cmake ${cmake_build_args} 2>&1 | xcbeautify ${xcbeautify_opts}
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
cmake ${cmake_build_args}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
log_group "Installing ${product_name}..."
|
|
||||||
if (( _loglevel > 1 )) cmake_install_args+=(--verbose)
|
|
||||||
cmake ${cmake_install_args}
|
|
||||||
popd
|
|
||||||
log_group
|
|
||||||
}
|
|
||||||
|
|
||||||
build ${@}
|
|
||||||
280
.github/scripts/.package.zsh
vendored
280
.github/scripts/.package.zsh
vendored
@@ -1,280 +0,0 @@
|
|||||||
#!/usr/bin/env zsh
|
|
||||||
|
|
||||||
builtin emulate -L zsh
|
|
||||||
setopt EXTENDED_GLOB
|
|
||||||
setopt PUSHD_SILENT
|
|
||||||
setopt ERR_EXIT
|
|
||||||
setopt ERR_RETURN
|
|
||||||
setopt NO_UNSET
|
|
||||||
setopt PIPE_FAIL
|
|
||||||
setopt NO_AUTO_PUSHD
|
|
||||||
setopt NO_PUSHD_IGNORE_DUPS
|
|
||||||
setopt FUNCTION_ARGZERO
|
|
||||||
|
|
||||||
## Enable for script debugging
|
|
||||||
# setopt WARN_CREATE_GLOBAL
|
|
||||||
# setopt WARN_NESTED_VAR
|
|
||||||
# setopt XTRACE
|
|
||||||
|
|
||||||
autoload -Uz is-at-least && if ! is-at-least 5.2; then
|
|
||||||
print -u2 -PR "${CI:+::error::}%F{1}${funcstack[1]##*/}:%f Running on Zsh version %B${ZSH_VERSION}%b, but Zsh %B5.2%b is the minimum supported version. Upgrade Zsh to fix this issue."
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
TRAPEXIT() {
|
|
||||||
local return_value=$?
|
|
||||||
|
|
||||||
if (( ${+CI} )) {
|
|
||||||
unset NSUnbufferedIO
|
|
||||||
}
|
|
||||||
|
|
||||||
return ${return_value}
|
|
||||||
}
|
|
||||||
|
|
||||||
TRAPZERR() {
|
|
||||||
if (( ${_loglevel:-3} > 2 )) {
|
|
||||||
print -u2 -PR "${CI:+::error::}%F{1} ✖︎ script execution error%f"
|
|
||||||
print -PR -e "
|
|
||||||
Callstack:
|
|
||||||
${(j:\n :)funcfiletrace}
|
|
||||||
"
|
|
||||||
}
|
|
||||||
|
|
||||||
exit 2
|
|
||||||
}
|
|
||||||
|
|
||||||
package() {
|
|
||||||
if (( ! ${+SCRIPT_HOME} )) typeset -g SCRIPT_HOME=${ZSH_ARGZERO:A:h}
|
|
||||||
local host_os=${${(s:-:)ZSH_ARGZERO:t:r}[2]}
|
|
||||||
local project_root=${SCRIPT_HOME:A:h:h}
|
|
||||||
local buildspec_file=${project_root}/buildspec.json
|
|
||||||
|
|
||||||
fpath=("${SCRIPT_HOME}/utils.zsh" ${fpath})
|
|
||||||
autoload -Uz set_loglevel log_info log_group log_error log_output check_${host_os}
|
|
||||||
|
|
||||||
if [[ ! -r ${buildspec_file} ]] {
|
|
||||||
log_error \
|
|
||||||
'No buildspec.json found. Please create a build specification for your project.'
|
|
||||||
return 2
|
|
||||||
}
|
|
||||||
|
|
||||||
local -i verbosity=1
|
|
||||||
local -r _version='2.0.0'
|
|
||||||
local -r -a _valid_targets=(
|
|
||||||
macos-universal
|
|
||||||
linux-x86_64
|
|
||||||
)
|
|
||||||
local target
|
|
||||||
local config='RelWithDebInfo'
|
|
||||||
local -r -a _valid_configs=(Debug RelWithDebInfo Release MinSizeRel)
|
|
||||||
local -i codesign=0
|
|
||||||
local -i notarize=0
|
|
||||||
local -i package=0
|
|
||||||
local -i skip_deps=0
|
|
||||||
|
|
||||||
if [[ ${host_os} == macos ]] {
|
|
||||||
local -r _usage_host="
|
|
||||||
%F{yellow} Additional options for macOS builds%f
|
|
||||||
-----------------------------------------------------------------------------
|
|
||||||
%B-s | --codesign%b Enable codesigning (macOS only)
|
|
||||||
%B-n | --notarize%b Enable notarization (macOS only)
|
|
||||||
%B-p | --package%b Create package installer (macOS only)"
|
|
||||||
}
|
|
||||||
|
|
||||||
local -r _usage="
|
|
||||||
Usage: %B${functrace[1]%:*}%b <option> [<options>]
|
|
||||||
|
|
||||||
%BOptions%b:
|
|
||||||
|
|
||||||
%F{yellow} Package configuration options%f
|
|
||||||
-----------------------------------------------------------------------------
|
|
||||||
%B-t | --target%b Specify target
|
|
||||||
%B-c | --config%b Build configuration
|
|
||||||
%B--skip-deps%b Skip checking for dependencies
|
|
||||||
|
|
||||||
%F{yellow} Output options%f
|
|
||||||
-----------------------------------------------------------------------------
|
|
||||||
%B-q | --quiet%b Quiet (error output only)
|
|
||||||
%B-v | --verbose%b Verbose (more detailed output)
|
|
||||||
%B--debug%b Debug (very detailed and added output)
|
|
||||||
|
|
||||||
%F{yellow} General options%f
|
|
||||||
-----------------------------------------------------------------------------
|
|
||||||
%B-h | --help%b Print this usage help
|
|
||||||
%B-V | --version%b Print script version information
|
|
||||||
${_usage_host:-}"
|
|
||||||
|
|
||||||
local -a args
|
|
||||||
while (( # )) {
|
|
||||||
case ${1} {
|
|
||||||
-t|--target|-c|--config)
|
|
||||||
if (( # == 1 )) || [[ ${2:0:1} == '-' ]] {
|
|
||||||
log_error "Missing value for option %B${1}%b"
|
|
||||||
log_output ${_usage}
|
|
||||||
exit 2
|
|
||||||
}
|
|
||||||
;;
|
|
||||||
}
|
|
||||||
case ${1} {
|
|
||||||
--)
|
|
||||||
shift
|
|
||||||
args+=($@)
|
|
||||||
break
|
|
||||||
;;
|
|
||||||
-t|--target)
|
|
||||||
if (( ! ${_valid_targets[(Ie)${2}]} )) {
|
|
||||||
log_error "Invalid value %B${2}%b for option %B${1}%b"
|
|
||||||
log_output ${_usage}
|
|
||||||
exit 2
|
|
||||||
}
|
|
||||||
target=${2}
|
|
||||||
shift 2
|
|
||||||
;;
|
|
||||||
-c|--config)
|
|
||||||
if (( !${_valid_configs[(Ie)${2}]} )) {
|
|
||||||
log_error "Invalid value %B${2}%b for option %B${1}%b"
|
|
||||||
log_output ${_usage}
|
|
||||||
exit 2
|
|
||||||
}
|
|
||||||
config=${2}
|
|
||||||
shift 2
|
|
||||||
;;
|
|
||||||
-s|--codesign) typeset -g codesign=1; shift ;;
|
|
||||||
-n|--notarize) typeset -g notarize=1; typeset -g codesign=1; shift ;;
|
|
||||||
-p|--package) typeset -g package=1; shift ;;
|
|
||||||
--skip-deps) typeset -g skip_deps=1; shift ;;
|
|
||||||
-q|--quiet) (( verbosity -= 1 )) || true; shift ;;
|
|
||||||
-v|--verbose) (( verbosity += 1 )); shift ;;
|
|
||||||
-h|--help) log_output ${_usage}; exit 0 ;;
|
|
||||||
-V|--version) print -Pr "${_version}"; exit 0 ;;
|
|
||||||
--debug) verbosity=3; shift ;;
|
|
||||||
*) log_error "Unknown option: %B${1}%b"; log_output ${_usage}; exit 2 ;;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
: "${target:="${host_os}-${CPUTYPE}"}"
|
|
||||||
|
|
||||||
set -- ${(@)args}
|
|
||||||
set_loglevel ${verbosity}
|
|
||||||
|
|
||||||
if (( ! skip_deps )) {
|
|
||||||
check_${host_os}
|
|
||||||
}
|
|
||||||
|
|
||||||
local product_name
|
|
||||||
local product_version
|
|
||||||
local git_tag="$(git describe --tags)"
|
|
||||||
read -r product_name product_version <<< \
|
|
||||||
"$(jq -r '. | {name, version} | join(" ")' ${buildspec_file})"
|
|
||||||
|
|
||||||
log_info "Using git tag as version identifier '${git_tag}'"
|
|
||||||
product_version="${git_tag}"
|
|
||||||
|
|
||||||
if [[ ${host_os} == macos ]] {
|
|
||||||
autoload -Uz check_packages read_codesign read_codesign_installer read_codesign_pass
|
|
||||||
|
|
||||||
local output_name="${product_name}-${product_version}-${host_os}-universal"
|
|
||||||
|
|
||||||
if [[ ! -d ${project_root}/release/${config}/${product_name}.plugin ]] {
|
|
||||||
log_error 'No release artifact found. Run the build script or the CMake install procedure first.'
|
|
||||||
return 2
|
|
||||||
}
|
|
||||||
|
|
||||||
local _tarflags='cJf'
|
|
||||||
if (( _loglevel > 1 || ${+CI} )) _tarflags="v${_tarflags}"
|
|
||||||
|
|
||||||
if (( package )) {
|
|
||||||
if [[ ! -f ${project_root}/release/${config}/${product_name}.pkg ]] {
|
|
||||||
log_error 'Installer Package not found. Run the build script or the CMake build and install procedures first.'
|
|
||||||
return 2
|
|
||||||
}
|
|
||||||
|
|
||||||
log_group "Packaging ${product_name}..."
|
|
||||||
pushd ${project_root}
|
|
||||||
|
|
||||||
if (( codesign )) {
|
|
||||||
read_codesign_installer
|
|
||||||
productsign \
|
|
||||||
--sign "${CODESIGN_IDENT_INSTALLER}" \
|
|
||||||
${project_root}/release/${config}/${product_name}.pkg \
|
|
||||||
${project_root}/release/${output_name}.pkg
|
|
||||||
|
|
||||||
rm ${project_root}/release/${config}/${product_name}.pkg
|
|
||||||
} else {
|
|
||||||
mv ${project_root}/release/${config}/${product_name}.pkg \
|
|
||||||
${project_root}/release/${output_name}.pkg
|
|
||||||
}
|
|
||||||
|
|
||||||
if (( codesign && notarize )) {
|
|
||||||
if [[ ! -f ${project_root}/release/${output_name}.pkg ]] {
|
|
||||||
log_error "No package for notarization found."
|
|
||||||
return 2
|
|
||||||
}
|
|
||||||
|
|
||||||
read_codesign_installer
|
|
||||||
read_codesign_pass
|
|
||||||
|
|
||||||
xcrun notarytool submit ${project_root}/release/${output_name}.pkg \
|
|
||||||
--keychain-profile "OBS-Codesign-Password" --wait
|
|
||||||
|
|
||||||
local -i _status=0
|
|
||||||
|
|
||||||
xcrun stapler staple ${project_root}/release/${output_name}.pkg || _status=1
|
|
||||||
|
|
||||||
if (( _status )) {
|
|
||||||
log_error "Notarization failed. Use 'xcrun notarytool log <submission ID>' to check for errors."
|
|
||||||
return 2
|
|
||||||
}
|
|
||||||
}
|
|
||||||
popd
|
|
||||||
}
|
|
||||||
|
|
||||||
log_group "Archiving ${product_name}..."
|
|
||||||
pushd ${project_root}/release/${config}
|
|
||||||
XZ_OPT=-T0 tar "-${_tarflags}" ${project_root}/release/${output_name}.tar.xz ${product_name}.plugin
|
|
||||||
popd
|
|
||||||
|
|
||||||
if [[ ${config} == Release ]] {
|
|
||||||
log_group "Archiving ${product_name} Debug Symbols..."
|
|
||||||
pushd ${project_root}/release/${config}
|
|
||||||
XZ_OPT=-T0 tar "-${_tarflags}" ${project_root}/release/${output_name}-dSYMs.tar.xz ${product_name}.plugin.dSYM
|
|
||||||
popd
|
|
||||||
}
|
|
||||||
|
|
||||||
log_group
|
|
||||||
} elif [[ ${host_os} == linux ]] {
|
|
||||||
local -a cmake_args=()
|
|
||||||
if (( _loglevel > 1 )) cmake_args+=(--verbose)
|
|
||||||
|
|
||||||
log_group "Creating source tarball for ${product_name}..."
|
|
||||||
pushd ${project_root}
|
|
||||||
cmake --build build_${target##*-} --config ${config} -t package_source ${cmake_args}
|
|
||||||
popd
|
|
||||||
|
|
||||||
local output_name="${product_name}-${product_version}-${target##*-}-linux-gnu"
|
|
||||||
|
|
||||||
if (( package )) {
|
|
||||||
log_group "Packaging ${product_name}..."
|
|
||||||
pushd ${project_root}
|
|
||||||
cmake --build build_${target##*-} --config ${config} -t package ${cmake_args}
|
|
||||||
|
|
||||||
if [ ! -e ${project_root}/release/${output_name}.deb ]; then
|
|
||||||
mv ${project_root}/release/*.deb ${project_root}/release/${output_name}.deb
|
|
||||||
mv ${project_root}/release/*.ddeb ${project_root}/release/${output_name}.ddeb
|
|
||||||
fi
|
|
||||||
popd
|
|
||||||
}
|
|
||||||
|
|
||||||
log_group "Archiving ${product_name}..."
|
|
||||||
local _tarflags='cJf'
|
|
||||||
if (( _loglevel > 1 || ${+CI} )) _tarflags="v${_tarflags}"
|
|
||||||
|
|
||||||
pushd ${project_root}/release/${config}
|
|
||||||
XZ_OPT=-T0 tar "-${_tarflags}" ${project_root}/release/${output_name}.tar.xz (lib|share)
|
|
||||||
popd
|
|
||||||
|
|
||||||
log_group
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
package ${@}
|
|
||||||
224
.github/scripts/Build-Deps-Windows.ps1
vendored
224
.github/scripts/Build-Deps-Windows.ps1
vendored
@@ -1,224 +0,0 @@
|
|||||||
[CmdletBinding()]
|
|
||||||
param(
|
|
||||||
[ValidateSet('Debug', 'RelWithDebInfo', 'Release', 'MinSizeRel')]
|
|
||||||
[string] $Configuration = 'RelWithDebInfo',
|
|
||||||
[ValidateSet('x86', 'x64')]
|
|
||||||
[string] $Target,
|
|
||||||
[ValidateSet('Visual Studio 17 2022', 'Visual Studio 16 2019')]
|
|
||||||
[string] $CMakeGenerator,
|
|
||||||
[string] $OutDirName,
|
|
||||||
[switch] $SkipDeps,
|
|
||||||
[switch] $SkipUnpack
|
|
||||||
)
|
|
||||||
|
|
||||||
$ErrorActionPreference = 'Stop'
|
|
||||||
|
|
||||||
if (-not $Target) {
|
|
||||||
$Target = "x64"
|
|
||||||
}
|
|
||||||
|
|
||||||
if ( $DebugPreference -eq 'Continue' ) {
|
|
||||||
$VerbosePreference = 'Continue'
|
|
||||||
$InformationPreference = 'Continue'
|
|
||||||
}
|
|
||||||
|
|
||||||
if ( $PSVersionTable.PSVersion -lt '7.0.0' ) {
|
|
||||||
Write-Warning 'The obs-deps PowerShell build script requires PowerShell Core 7. Install or upgrade your PowerShell version: https://aka.ms/pscore6'
|
|
||||||
exit 2
|
|
||||||
}
|
|
||||||
|
|
||||||
function Build {
|
|
||||||
trap {
|
|
||||||
Pop-Location -Stack BuildTemp -ErrorAction 'SilentlyContinue'
|
|
||||||
Write-Error $_
|
|
||||||
exit 2
|
|
||||||
}
|
|
||||||
|
|
||||||
$ScriptHome = $PSScriptRoot
|
|
||||||
$ProjectRoot = Resolve-Path -Path "$PSScriptRoot/../.."
|
|
||||||
$BuildSpecFile = "${ProjectRoot}/buildspec.json"
|
|
||||||
|
|
||||||
$UtilityFunctions = Get-ChildItem -Path $PSScriptRoot/utils.pwsh/*.ps1 -Recurse
|
|
||||||
|
|
||||||
foreach ($Utility in $UtilityFunctions) {
|
|
||||||
Write-Debug "Loading $($Utility.FullName)"
|
|
||||||
. $Utility.FullName
|
|
||||||
}
|
|
||||||
|
|
||||||
if ( ! $SkipDeps ) {
|
|
||||||
Install-BuildDependencies -WingetFile "${ScriptHome}/.Wingetfile"
|
|
||||||
}
|
|
||||||
|
|
||||||
Log-Information "Run plugin configure step to download OBS deps ..."
|
|
||||||
Push-Location -Stack BuildTemp
|
|
||||||
if ( ! ( ( $SkipAll ) -or ( $SkipBuild ) ) ) {
|
|
||||||
Ensure-Location $ProjectRoot
|
|
||||||
|
|
||||||
$CmakeArgs = @(
|
|
||||||
"-DCMAKE_PREFIX_PATH:PATH=${ADVSSDepPath}"
|
|
||||||
)
|
|
||||||
$CmakeBuildArgs = @()
|
|
||||||
$CmakeInstallArgs = @()
|
|
||||||
|
|
||||||
if ( $VerbosePreference -eq 'Continue' ) {
|
|
||||||
$CmakeBuildArgs += ('--verbose')
|
|
||||||
$CmakeInstallArgs += ('--verbose')
|
|
||||||
}
|
|
||||||
|
|
||||||
if ( $DebugPreference -eq 'Continue' ) {
|
|
||||||
$CmakeArgs += ('--debug-output')
|
|
||||||
}
|
|
||||||
|
|
||||||
$Preset = "windows-$(if ( $Env:CI -ne $null ) { 'ci-' })${Target}"
|
|
||||||
|
|
||||||
$CmakeArgs += @(
|
|
||||||
'--preset', $Preset
|
|
||||||
)
|
|
||||||
|
|
||||||
$CmakeBuildArgs += @(
|
|
||||||
'--build'
|
|
||||||
'--preset', $Preset
|
|
||||||
'--config', $Configuration
|
|
||||||
'--parallel'
|
|
||||||
'--', '/consoleLoggerParameters:Summary', '/noLogo'
|
|
||||||
)
|
|
||||||
|
|
||||||
$CmakeInstallArgs += @(
|
|
||||||
'--install', "build_${Target}"
|
|
||||||
'--prefix', "${ProjectRoot}/release/${Configuration}"
|
|
||||||
'--config', $Configuration
|
|
||||||
)
|
|
||||||
|
|
||||||
Log-Group "Configuring ${ProductName}..."
|
|
||||||
Invoke-External cmake @CmakeArgs
|
|
||||||
}
|
|
||||||
|
|
||||||
$BuildSpec = Get-Content -Path ${BuildSpecFile} -Raw | ConvertFrom-Json
|
|
||||||
$depsVersion = $BuildSpec.dependencies.prebuilt.version
|
|
||||||
$qtDepsVersion = $BuildSpec.dependencies.qt6.version
|
|
||||||
$OBSDepPath = "$(Resolve-Path -Path ${ProjectRoot}/.deps/obs-deps-${depsVersion}-${Target});$(Resolve-Path -Path ${ProjectRoot}/.deps/obs-deps-qt6-${qtDepsVersion}-${Target})"
|
|
||||||
|
|
||||||
if ( $OutDirName -eq '' ) {
|
|
||||||
$OutDirName = ".deps/advss-build-dependencies"
|
|
||||||
}
|
|
||||||
New-Item -ItemType Directory -Force -Path ${ProjectRoot}/${OutDirName}
|
|
||||||
|
|
||||||
$ADVSSDepPath = "$(Resolve-Path -Path ${ProjectRoot}/${OutDirName})"
|
|
||||||
|
|
||||||
$OpenCVPath = "${ProjectRoot}/deps/opencv"
|
|
||||||
$OpenCVBuildPath = "${OpenCVPath}/build"
|
|
||||||
|
|
||||||
Push-Location -Stack BuildOpenCVTemp
|
|
||||||
Ensure-Location $ProjectRoot
|
|
||||||
|
|
||||||
$OpenCVCmakeArgs = @(
|
|
||||||
"-DCMAKE_BUILD_TYPE=Release"
|
|
||||||
"-DCMAKE_PREFIX_PATH:PATH=${OBSDepPath}"
|
|
||||||
"-DCMAKE_INSTALL_PREFIX:PATH=${ADVSSDepPath}"
|
|
||||||
"-DBUILD_LIST=core,imgproc,objdetect"
|
|
||||||
)
|
|
||||||
|
|
||||||
Log-Information "Configuring OpenCV..."
|
|
||||||
Invoke-External cmake -S ${OpenCVPath} -B ${OpenCVBuildPath} @OpenCVCmakeArgs
|
|
||||||
|
|
||||||
$OpenCVCmakeArgs = @(
|
|
||||||
'--config', "Release"
|
|
||||||
)
|
|
||||||
|
|
||||||
if ( $VerbosePreference -eq 'Continue' ) {
|
|
||||||
$OpenCVCmakeArgs += ('--verbose')
|
|
||||||
}
|
|
||||||
|
|
||||||
Log-Information "Building OpenCV..."
|
|
||||||
Invoke-External cmake --build "${OpenCVBuildPath}" @OpenCVCmakeArgs
|
|
||||||
Log-Information "Install OpenCV}..."
|
|
||||||
Invoke-External cmake --install "${OpenCVBuildPath}" --prefix "${ADVSSDepPath}" @OpenCVCmakeArgs
|
|
||||||
|
|
||||||
$LeptonicaPath = "${ProjectRoot}/deps/leptonica"
|
|
||||||
$LeptonicaBuildPath = "${LeptonicaPath}/build"
|
|
||||||
|
|
||||||
Push-Location -Stack BuildLeptonicaTemp
|
|
||||||
Ensure-Location $ProjectRoot
|
|
||||||
|
|
||||||
$LeptonicaCmakeArgs = @(
|
|
||||||
"-DCMAKE_BUILD_TYPE=${Configuration}"
|
|
||||||
"-DCMAKE_PREFIX_PATH:PATH=${OBSDepPath}"
|
|
||||||
"-DCMAKE_INSTALL_PREFIX:PATH=${ADVSSDepPath}"
|
|
||||||
"-DSW_BUILD=OFF"
|
|
||||||
"-DLIBWEBP_SUPPORT=OFF"
|
|
||||||
)
|
|
||||||
|
|
||||||
Log-Information "Configuring leptonica..."
|
|
||||||
Invoke-External cmake -S ${LeptonicaPath} -B ${LeptonicaBuildPath} @LeptonicaCmakeArgs
|
|
||||||
|
|
||||||
$LeptonicaCmakeArgs = @(
|
|
||||||
'--config', "${Configuration}"
|
|
||||||
)
|
|
||||||
|
|
||||||
if ( $VerbosePreference -eq 'Continue' ) {
|
|
||||||
$LeptonicaCmakeArgs += ('--verbose')
|
|
||||||
}
|
|
||||||
|
|
||||||
Log-Information "Building leptonica..."
|
|
||||||
Invoke-External cmake --build "${LeptonicaBuildPath}" @LeptonicaCmakeArgs
|
|
||||||
|
|
||||||
Log-Information "Install leptonica..."
|
|
||||||
Invoke-External cmake --install "${LeptonicaBuildPath}" --prefix "${ADVSSDepPath}" @LeptonicaCmakeArgs
|
|
||||||
|
|
||||||
Push-Location -Stack BuildTesseractTemp
|
|
||||||
Ensure-Location $ProjectRoot
|
|
||||||
|
|
||||||
$TesseractPath = "${ProjectRoot}/deps/tesseract"
|
|
||||||
$TesseractBuildPath = "${TesseractPath}/build"
|
|
||||||
|
|
||||||
# Explicitly disable PkgConfig and tiff as it will lead build errors
|
|
||||||
$TesseractCmakeArgs = @(
|
|
||||||
"-DCMAKE_BUILD_TYPE=${Configuration}"
|
|
||||||
"-DCMAKE_PREFIX_PATH:PATH=${OBSDepPath}"
|
|
||||||
"-DCMAKE_INSTALL_PREFIX:PATH=${ADVSSDepPath}"
|
|
||||||
"-DSW_BUILD=OFF"
|
|
||||||
"-DDISABLE_CURL=ON"
|
|
||||||
"-DBUILD_TRAINING_TOOLS=OFF"
|
|
||||||
"-DCMAKE_DISABLE_FIND_PACKAGE_TIFF=TRUE"
|
|
||||||
"-DCMAKE_DISABLE_FIND_PACKAGE_PkgConfig=TRUE"
|
|
||||||
)
|
|
||||||
|
|
||||||
Log-Information "Configuring tesseract..."
|
|
||||||
Invoke-External cmake -S ${TesseractPath} -B ${TesseractBuildPath} @TesseractCmakeArgs
|
|
||||||
|
|
||||||
$TesseractCmakeArgs = @(
|
|
||||||
'--config', "${Configuration}"
|
|
||||||
)
|
|
||||||
|
|
||||||
if ( $VerbosePreference -eq 'Continue' ) {
|
|
||||||
$TesseractCmakeArgs += ('--verbose')
|
|
||||||
}
|
|
||||||
|
|
||||||
Log-Information "Building tesseract..."
|
|
||||||
Invoke-External cmake --build "${TesseractBuildPath}" @TesseractCmakeArgs
|
|
||||||
|
|
||||||
Log-Information "Install tesseract..."
|
|
||||||
Invoke-External cmake --install "${TesseractBuildPath}" --prefix "${ADVSSDepPath}" @TesseractCmakeArgs
|
|
||||||
|
|
||||||
Push-Location -Stack BuildLibusbTemp
|
|
||||||
Ensure-Location $ProjectRoot
|
|
||||||
|
|
||||||
$LibusbPath = "${ProjectRoot}/deps/libusb"
|
|
||||||
|
|
||||||
Log-Information "Building libusb..."
|
|
||||||
$msbuildExe = vswhere -latest -requires Microsoft.Component.MSBuild -find MSBuild\**\Bin\MSBuild.exe | select-object -first 1
|
|
||||||
|
|
||||||
if ($msbuildExe) {
|
|
||||||
Invoke-External $msbuildExe "${LibusbPath}/msvc/libusb.sln" /property:Configuration=Release /property:Platform=x64
|
|
||||||
|
|
||||||
$libusbBuildResultDirectory = "${LibusbPath}/build/v143/x64/Release"
|
|
||||||
if (-not (Test-Path -Path $libusbBuildResultDirectory)) {
|
|
||||||
$libusbBuildResultDirectory = "${LibusbPath}/x64/Release/dll"
|
|
||||||
}
|
|
||||||
Copy-Item -Path "${libusbBuildResultDirectory}/*" -Destination ${ADVSSDepPath} -Recurse -Force
|
|
||||||
} else {
|
|
||||||
Log-Information "Failed to locate msbuild.exe - skipping libusb build"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Build
|
|
||||||
130
.github/scripts/Build-Windows.ps1
vendored
130
.github/scripts/Build-Windows.ps1
vendored
@@ -1,130 +0,0 @@
|
|||||||
[CmdletBinding()]
|
|
||||||
param(
|
|
||||||
[ValidateSet('x64')]
|
|
||||||
[string] $Target = 'x64',
|
|
||||||
[ValidateSet('Debug', 'RelWithDebInfo', 'Release', 'MinSizeRel')]
|
|
||||||
[string] $Configuration = 'RelWithDebInfo',
|
|
||||||
[switch] $SkipAll,
|
|
||||||
[switch] $SkipBuild,
|
|
||||||
[switch] $SkipDeps,
|
|
||||||
[string] $ADVSSDepName
|
|
||||||
)
|
|
||||||
|
|
||||||
$ErrorActionPreference = 'Stop'
|
|
||||||
|
|
||||||
if ( $DebugPreference -eq 'Continue' ) {
|
|
||||||
$VerbosePreference = 'Continue'
|
|
||||||
$InformationPreference = 'Continue'
|
|
||||||
}
|
|
||||||
|
|
||||||
if ( ! ( [System.Environment]::Is64BitOperatingSystem ) ) {
|
|
||||||
throw "A 64-bit system is required to build the project."
|
|
||||||
}
|
|
||||||
|
|
||||||
if ( $PSVersionTable.PSVersion -lt '7.0.0' ) {
|
|
||||||
Write-Warning 'The obs-deps PowerShell build script requires PowerShell Core 7. Install or upgrade your PowerShell version: https://aka.ms/pscore6'
|
|
||||||
exit 2
|
|
||||||
}
|
|
||||||
|
|
||||||
function Build {
|
|
||||||
trap {
|
|
||||||
Pop-Location -Stack BuildTemp -ErrorAction 'SilentlyContinue'
|
|
||||||
Write-Error $_
|
|
||||||
Log-Group
|
|
||||||
exit 2
|
|
||||||
}
|
|
||||||
|
|
||||||
$ScriptHome = $PSScriptRoot
|
|
||||||
$ProjectRoot = Resolve-Path -Path "$PSScriptRoot/../.."
|
|
||||||
$BuildSpecFile = "${ProjectRoot}/buildspec.json"
|
|
||||||
|
|
||||||
$UtilityFunctions = Get-ChildItem -Path $PSScriptRoot/utils.pwsh/*.ps1 -Recurse
|
|
||||||
|
|
||||||
foreach($Utility in $UtilityFunctions) {
|
|
||||||
Write-Debug "Loading $($Utility.FullName)"
|
|
||||||
. $Utility.FullName
|
|
||||||
}
|
|
||||||
|
|
||||||
$BuildSpec = Get-Content -Path ${BuildSpecFile} -Raw | ConvertFrom-Json
|
|
||||||
$ProductName = $BuildSpec.name
|
|
||||||
$ProductVersion = $BuildSpec.version
|
|
||||||
|
|
||||||
$GitOutput = git describe --tags
|
|
||||||
if ($GitOutput -match '^([0-9]+\.){0,2}(\*|[0-9]+)$') {
|
|
||||||
Log-Information "Using git tag as version identifier '${GitOutput}'"
|
|
||||||
$ProductVersion = $GitOutput
|
|
||||||
} else {
|
|
||||||
Log-Information "Using buildspec.json version identifier '${ProductVersion}'"
|
|
||||||
}
|
|
||||||
|
|
||||||
if ( ! $SkipDeps ) {
|
|
||||||
Install-BuildDependencies -WingetFile "${ScriptHome}/.Wingetfile"
|
|
||||||
}
|
|
||||||
|
|
||||||
if ( $ADVSSDepName -eq '' ) {
|
|
||||||
$ADVSSDepName = ".deps/advss-build-dependencies"
|
|
||||||
}
|
|
||||||
|
|
||||||
if ( -not (Test-Path -LiteralPath "${ProjectRoot}/${ADVSSDepName}") ) {
|
|
||||||
Log-Information "Building advss deps ${ProjectRoot}/${ADVSSDepName} ..."
|
|
||||||
invoke-expression -Command "$PSScriptRoot/Build-Deps-Windows.ps1 -Configuration $Configuration -Target $Target -OutDirName $ADVSSDepName"
|
|
||||||
}
|
|
||||||
$ADVSSDepPath = "$(Resolve-Path -Path ${ProjectRoot}/${ADVSSDepName})"
|
|
||||||
Log-Information "Using advss deps at $ADVSSDepPath ..."
|
|
||||||
|
|
||||||
(Get-Content -Path ${ProjectRoot}/CMakeLists.txt -Raw) `
|
|
||||||
-replace "project\((.*) VERSION (.*)\)", "project(${ProductName} VERSION ${ProductVersion})" `
|
|
||||||
| Out-File -Path ${ProjectRoot}/CMakeLists.txt -NoNewline
|
|
||||||
|
|
||||||
Push-Location -Stack BuildTemp
|
|
||||||
if ( ! ( ( $SkipAll ) -or ( $SkipBuild ) ) ) {
|
|
||||||
Ensure-Location $ProjectRoot
|
|
||||||
|
|
||||||
$CmakeArgs = @()
|
|
||||||
$CmakeBuildArgs = @()
|
|
||||||
$CmakeInstallArgs = @()
|
|
||||||
|
|
||||||
if ( $VerbosePreference -eq 'Continue' ) {
|
|
||||||
$CmakeBuildArgs += ('--verbose')
|
|
||||||
$CmakeInstallArgs += ('--verbose')
|
|
||||||
}
|
|
||||||
|
|
||||||
if ( $DebugPreference -eq 'Continue' ) {
|
|
||||||
$CmakeArgs += ('--debug-output')
|
|
||||||
}
|
|
||||||
|
|
||||||
$Preset = "windows-$(if ( $Env:CI -ne $null ) { 'ci-' })${Target}"
|
|
||||||
|
|
||||||
$CmakeArgs += @(
|
|
||||||
'--preset', $Preset
|
|
||||||
"-DCMAKE_PREFIX_PATH:PATH=${ADVSSDepPath}"
|
|
||||||
)
|
|
||||||
|
|
||||||
$CmakeBuildArgs += @(
|
|
||||||
'--build'
|
|
||||||
'--preset', $Preset
|
|
||||||
'--config', $Configuration
|
|
||||||
'--parallel'
|
|
||||||
'--', '/consoleLoggerParameters:Summary', '/noLogo'
|
|
||||||
)
|
|
||||||
|
|
||||||
$CmakeInstallArgs += @(
|
|
||||||
'--install', "build_${Target}"
|
|
||||||
'--prefix', "${ProjectRoot}/release/${Configuration}"
|
|
||||||
'--config', $Configuration
|
|
||||||
)
|
|
||||||
|
|
||||||
Log-Group "Configuring ${ProductName}..."
|
|
||||||
Invoke-External cmake @CmakeArgs
|
|
||||||
|
|
||||||
Log-Group "Building ${ProductName}..."
|
|
||||||
Invoke-External cmake @CmakeBuildArgs
|
|
||||||
}
|
|
||||||
Log-Group "Install ${ProductName}..."
|
|
||||||
Invoke-External cmake @CmakeInstallArgs
|
|
||||||
|
|
||||||
Pop-Location -Stack BuildTemp
|
|
||||||
Log-Group
|
|
||||||
}
|
|
||||||
|
|
||||||
Build
|
|
||||||
101
.github/scripts/Package-Windows.ps1
vendored
101
.github/scripts/Package-Windows.ps1
vendored
@@ -1,101 +0,0 @@
|
|||||||
[CmdletBinding()]
|
|
||||||
param(
|
|
||||||
[ValidateSet('x64')]
|
|
||||||
[string] $Target = 'x64',
|
|
||||||
[ValidateSet('Debug', 'RelWithDebInfo', 'Release', 'MinSizeRel')]
|
|
||||||
[string] $Configuration = 'RelWithDebInfo',
|
|
||||||
[switch] $BuildInstaller,
|
|
||||||
[switch] $SkipDeps
|
|
||||||
)
|
|
||||||
|
|
||||||
$ErrorActionPreference = 'Stop'
|
|
||||||
|
|
||||||
if ( $DebugPreference -eq 'Continue' ) {
|
|
||||||
$VerbosePreference = 'Continue'
|
|
||||||
$InformationPreference = 'Continue'
|
|
||||||
}
|
|
||||||
|
|
||||||
if ( ! ( [System.Environment]::Is64BitOperatingSystem ) ) {
|
|
||||||
throw "Packaging script requires a 64-bit system to build and run."
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
if ( $PSVersionTable.PSVersion -lt '7.0.0' ) {
|
|
||||||
Write-Warning 'The packaging script requires PowerShell Core 7. Install or upgrade your PowerShell version: https://aka.ms/pscore6'
|
|
||||||
exit 2
|
|
||||||
}
|
|
||||||
|
|
||||||
function Package {
|
|
||||||
trap {
|
|
||||||
Pop-Location -Stack BuildTemp -ErrorAction 'SilentlyContinue'
|
|
||||||
Write-Error $_
|
|
||||||
Log-Group
|
|
||||||
exit 2
|
|
||||||
}
|
|
||||||
|
|
||||||
$ScriptHome = $PSScriptRoot
|
|
||||||
$ProjectRoot = Resolve-Path -Path "$PSScriptRoot/../.."
|
|
||||||
$BuildSpecFile = "${ProjectRoot}/buildspec.json"
|
|
||||||
|
|
||||||
$UtilityFunctions = Get-ChildItem -Path $PSScriptRoot/utils.pwsh/*.ps1 -Recurse
|
|
||||||
|
|
||||||
foreach( $Utility in $UtilityFunctions ) {
|
|
||||||
Write-Debug "Loading $($Utility.FullName)"
|
|
||||||
. $Utility.FullName
|
|
||||||
}
|
|
||||||
|
|
||||||
$BuildSpec = Get-Content -Path ${BuildSpecFile} -Raw | ConvertFrom-Json
|
|
||||||
$ProductName = $BuildSpec.name
|
|
||||||
$ProductVersion = $BuildSpec.version
|
|
||||||
|
|
||||||
$GitOutput = git describe --tags
|
|
||||||
Log-Information "Using git tag as version identifier '${GitOutput}'"
|
|
||||||
$ProductVersion = $GitOutput
|
|
||||||
|
|
||||||
$OutputName = "${ProductName}-${ProductVersion}-windows-${Target}"
|
|
||||||
|
|
||||||
if ( ! $SkipDeps ) {
|
|
||||||
Install-BuildDependencies -WingetFile "${ScriptHome}/.Wingetfile"
|
|
||||||
}
|
|
||||||
|
|
||||||
$RemoveArgs = @{
|
|
||||||
ErrorAction = 'SilentlyContinue'
|
|
||||||
Path = @(
|
|
||||||
"${ProjectRoot}/release/${ProductName}-*-windows-*.zip"
|
|
||||||
"${ProjectRoot}/release/${ProductName}-*-windows-*.exe"
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
Remove-Item @RemoveArgs
|
|
||||||
|
|
||||||
Log-Group "Archiving ${ProductName}..."
|
|
||||||
$CompressArgs = @{
|
|
||||||
Path = (Get-ChildItem -Path "${ProjectRoot}/release/${Configuration}" -Exclude "${OutputName}*.*")
|
|
||||||
CompressionLevel = 'Optimal'
|
|
||||||
DestinationPath = "${ProjectRoot}/release/${OutputName}.zip"
|
|
||||||
Verbose = ($Env:CI -ne $null)
|
|
||||||
}
|
|
||||||
Compress-Archive -Force @CompressArgs
|
|
||||||
Log-Group
|
|
||||||
|
|
||||||
if ( ( $BuildInstaller ) ) {
|
|
||||||
Log-Group "Packaging ${ProductName}..."
|
|
||||||
|
|
||||||
$IsccFile = "${ProjectRoot}/build_${Target}/installer-Windows.generated.iss"
|
|
||||||
if ( ! ( Test-Path -Path $IsccFile ) ) {
|
|
||||||
throw 'InnoSetup install script not found. Run the build script or the CMake build and install procedures first.'
|
|
||||||
}
|
|
||||||
|
|
||||||
Log-Information 'Creating InnoSetup installer...'
|
|
||||||
Push-Location -Stack BuildTemp
|
|
||||||
Ensure-Location -Path "${ProjectRoot}/release"
|
|
||||||
Copy-Item -Path ${Configuration} -Destination Package -Recurse
|
|
||||||
Invoke-External iscc ${IsccFile} /O"${ProjectRoot}/release" /F"${OutputName}-Installer"
|
|
||||||
Remove-Item -Path Package -Recurse
|
|
||||||
Pop-Location -Stack BuildTemp
|
|
||||||
|
|
||||||
Log-Group
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Package
|
|
||||||
13
.github/scripts/build-deps-linux.sh
vendored
13
.github/scripts/build-deps-linux.sh
vendored
@@ -1,13 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
|
|
||||||
if ! type zsh > /dev/null 2>&1; then
|
|
||||||
echo ' => Installing script dependency Zsh.'
|
|
||||||
|
|
||||||
sudo apt-get -y update
|
|
||||||
sudo apt-get -y install zsh
|
|
||||||
fi
|
|
||||||
|
|
||||||
SCRIPT=$(readlink -f "${0}")
|
|
||||||
SCRIPT_DIR=$(dirname "${SCRIPT}")
|
|
||||||
|
|
||||||
zsh ${SCRIPT_DIR}/build-deps-linux.zsh "${@}"
|
|
||||||
1
.github/scripts/build-deps-linux.zsh
vendored
1
.github/scripts/build-deps-linux.zsh
vendored
@@ -1 +0,0 @@
|
|||||||
.build-deps.zsh
|
|
||||||
1
.github/scripts/build-deps-macos.zsh
vendored
1
.github/scripts/build-deps-macos.zsh
vendored
@@ -1 +0,0 @@
|
|||||||
.build-deps.zsh
|
|
||||||
1
.github/scripts/build-linux
vendored
1
.github/scripts/build-linux
vendored
@@ -1 +0,0 @@
|
|||||||
.build.zsh
|
|
||||||
1
.github/scripts/build-macos
vendored
1
.github/scripts/build-macos
vendored
@@ -1 +0,0 @@
|
|||||||
.build.zsh
|
|
||||||
1
.github/scripts/package-linux
vendored
1
.github/scripts/package-linux
vendored
@@ -1 +0,0 @@
|
|||||||
.package.zsh
|
|
||||||
1
.github/scripts/package-macos
vendored
1
.github/scripts/package-macos
vendored
@@ -1 +0,0 @@
|
|||||||
.package.zsh
|
|
||||||
29
.github/scripts/utils.pwsh/Ensure-Location.ps1
vendored
29
.github/scripts/utils.pwsh/Ensure-Location.ps1
vendored
@@ -1,29 +0,0 @@
|
|||||||
function Ensure-Location {
|
|
||||||
<#
|
|
||||||
.SYNOPSIS
|
|
||||||
Ensures current location to be set to specified directory.
|
|
||||||
.DESCRIPTION
|
|
||||||
If specified directory exists, switch to it. Otherwise create it,
|
|
||||||
then switch.
|
|
||||||
.EXAMPLE
|
|
||||||
Ensure-Location "My-Directory"
|
|
||||||
Ensure-Location -Path "Path-To-My-Directory"
|
|
||||||
#>
|
|
||||||
|
|
||||||
param(
|
|
||||||
[Parameter(Mandatory)]
|
|
||||||
[string] $Path
|
|
||||||
)
|
|
||||||
|
|
||||||
if ( ! ( Test-Path $Path ) ) {
|
|
||||||
$_Params = @{
|
|
||||||
ItemType = "Directory"
|
|
||||||
Path = ${Path}
|
|
||||||
ErrorAction = "SilentlyContinue"
|
|
||||||
}
|
|
||||||
|
|
||||||
New-Item @_Params | Set-Location
|
|
||||||
} else {
|
|
||||||
Set-Location -Path ${Path}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
70
.github/scripts/utils.pwsh/Expand-ArchiveExt.ps1
vendored
70
.github/scripts/utils.pwsh/Expand-ArchiveExt.ps1
vendored
@@ -1,70 +0,0 @@
|
|||||||
function Expand-ArchiveExt {
|
|
||||||
<#
|
|
||||||
.SYNOPSIS
|
|
||||||
Expands archive files.
|
|
||||||
.DESCRIPTION
|
|
||||||
Allows extraction of zip, 7z, gz, and xz archives.
|
|
||||||
Requires tar and 7-zip to be available on the system.
|
|
||||||
Archives ending with .zip but created using LZMA compression are
|
|
||||||
expanded using 7-zip as a fallback.
|
|
||||||
.EXAMPLE
|
|
||||||
Expand-ArchiveExt -Path <Path-To-Your-Archive>
|
|
||||||
Expand-ArchiveExt -Path <Path-To-Your-Archive> -DestinationPath <Expansion-Path>
|
|
||||||
#>
|
|
||||||
|
|
||||||
param(
|
|
||||||
[Parameter(Mandatory)]
|
|
||||||
[string] $Path,
|
|
||||||
[string] $DestinationPath = [System.IO.Path]::GetFileNameWithoutExtension($Path),
|
|
||||||
[switch] $Force
|
|
||||||
)
|
|
||||||
|
|
||||||
switch ( [System.IO.Path]::GetExtension($Path) ) {
|
|
||||||
.zip {
|
|
||||||
try {
|
|
||||||
Expand-Archive -Path $Path -DestinationPath $DestinationPath -Force:$Force
|
|
||||||
} catch {
|
|
||||||
if ( Get-Command 7z ) {
|
|
||||||
Invoke-External 7z x -y $Path "-o${DestinationPath}"
|
|
||||||
} else {
|
|
||||||
throw "Fallback utility 7-zip not found. Please install 7-zip first."
|
|
||||||
}
|
|
||||||
}
|
|
||||||
break
|
|
||||||
}
|
|
||||||
{ ( $_ -eq ".7z" ) -or ( $_ -eq ".exe" ) } {
|
|
||||||
if ( Get-Command 7z ) {
|
|
||||||
Invoke-External 7z x -y $Path "-o${DestinationPath}"
|
|
||||||
} else {
|
|
||||||
throw "Extraction utility 7-zip not found. Please install 7-zip first."
|
|
||||||
}
|
|
||||||
break
|
|
||||||
}
|
|
||||||
.gz {
|
|
||||||
try {
|
|
||||||
Invoke-External tar -x -o $DestinationPath -f $Path
|
|
||||||
} catch {
|
|
||||||
if ( Get-Command 7z ) {
|
|
||||||
Invoke-External 7z x -y $Path "-o${DestinationPath}"
|
|
||||||
} else {
|
|
||||||
throw "Fallback utility 7-zip not found. Please install 7-zip first."
|
|
||||||
}
|
|
||||||
}
|
|
||||||
break
|
|
||||||
}
|
|
||||||
.xz {
|
|
||||||
try {
|
|
||||||
Invoke-External tar -x -o $DestinationPath -f $Path
|
|
||||||
} catch {
|
|
||||||
if ( Get-Command 7z ) {
|
|
||||||
Invoke-External 7z x -y $Path "-o${DestinationPath}"
|
|
||||||
} else {
|
|
||||||
throw "Fallback utility 7-zip not found. Please install 7-zip first."
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
default {
|
|
||||||
throw "Unsupported archive extension provided."
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,70 +0,0 @@
|
|||||||
function Install-BuildDependencies {
|
|
||||||
<#
|
|
||||||
.SYNOPSIS
|
|
||||||
Installs required build dependencies.
|
|
||||||
.DESCRIPTION
|
|
||||||
Additional packages might be needed for successful builds. This module contains additional
|
|
||||||
dependencies available for installation via winget and, if possible, adds their locations
|
|
||||||
to the environment path for future invocation.
|
|
||||||
.EXAMPLE
|
|
||||||
Install-BuildDependencies
|
|
||||||
#>
|
|
||||||
|
|
||||||
param(
|
|
||||||
[string] $WingetFile = "$PSScriptRoot/.Wingetfile"
|
|
||||||
)
|
|
||||||
|
|
||||||
if ( ! ( Test-Path function:Log-Warning ) ) {
|
|
||||||
. $PSScriptRoot/Logger.ps1
|
|
||||||
}
|
|
||||||
|
|
||||||
$Prefixes = @{
|
|
||||||
'x64' = ${Env:ProgramFiles}
|
|
||||||
'x86' = ${Env:ProgramFiles(x86)}
|
|
||||||
'arm64' = ${Env:ProgramFiles(arm)}
|
|
||||||
}
|
|
||||||
|
|
||||||
$Paths = $Env:Path -split [System.IO.Path]::PathSeparator
|
|
||||||
|
|
||||||
$WingetOptions = @('install', '--accept-package-agreements', '--accept-source-agreements')
|
|
||||||
|
|
||||||
if ( $script:Quiet ) {
|
|
||||||
$WingetOptions += '--silent'
|
|
||||||
}
|
|
||||||
|
|
||||||
Log-Group 'Check Windows build requirements'
|
|
||||||
Get-Content $WingetFile | ForEach-Object {
|
|
||||||
$_, $Package, $_, $Path, $_, $Binary, $_, $Version = $_ -replace ',','' -split " +(?=(?:[^\']*\'[^\']*\')*[^\']*$)" -replace "'",''
|
|
||||||
|
|
||||||
$Prefixes.GetEnumerator() | ForEach-Object {
|
|
||||||
$Prefix = $_.value
|
|
||||||
$FullPath = "${Prefix}\${Path}"
|
|
||||||
if ( ( Test-Path $FullPath ) -and ! ( $Paths -contains $FullPath ) ) {
|
|
||||||
$Paths = @($FullPath) + $Paths
|
|
||||||
$Env:Path = $Paths -join [System.IO.Path]::PathSeparator
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Log-Debug "Checking for command ${Binary}"
|
|
||||||
$Found = Get-Command -ErrorAction SilentlyContinue $Binary
|
|
||||||
|
|
||||||
if ( $Found ) {
|
|
||||||
Log-Status "Found dependency ${Binary} as $($Found.Source)"
|
|
||||||
} else {
|
|
||||||
Log-Status "Installing package ${Package} $(if ( $Version -ne $null ) { "Version: ${Version}" } )"
|
|
||||||
|
|
||||||
if ( $Version -ne $null ) {
|
|
||||||
$WingetOptions += @('--version', ${Version})
|
|
||||||
}
|
|
||||||
|
|
||||||
try {
|
|
||||||
$Params = $WingetOptions + $Package
|
|
||||||
|
|
||||||
winget @Params
|
|
||||||
} catch {
|
|
||||||
throw "Error while installing winget package ${Package}: $_"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Log-Group
|
|
||||||
}
|
|
||||||
40
.github/scripts/utils.pwsh/Invoke-External.ps1
vendored
40
.github/scripts/utils.pwsh/Invoke-External.ps1
vendored
@@ -1,40 +0,0 @@
|
|||||||
function Invoke-External {
|
|
||||||
<#
|
|
||||||
.SYNOPSIS
|
|
||||||
Invokes a non-PowerShell command.
|
|
||||||
.DESCRIPTION
|
|
||||||
Runs a non-PowerShell command, and captures its return code.
|
|
||||||
Throws an exception if the command returns non-zero.
|
|
||||||
.EXAMPLE
|
|
||||||
Invoke-External 7z x $MyArchive
|
|
||||||
#>
|
|
||||||
|
|
||||||
if ( $args.Count -eq 0 ) {
|
|
||||||
throw 'Invoke-External called without arguments.'
|
|
||||||
}
|
|
||||||
|
|
||||||
if ( ! ( Test-Path function:Log-Information ) ) {
|
|
||||||
. $PSScriptRoot/Logger.ps1
|
|
||||||
}
|
|
||||||
|
|
||||||
$Command = $args[0]
|
|
||||||
$CommandArgs = @()
|
|
||||||
|
|
||||||
if ( $args.Count -gt 1) {
|
|
||||||
$CommandArgs = $args[1..($args.Count - 1)]
|
|
||||||
}
|
|
||||||
|
|
||||||
$_EAP = $ErrorActionPreference
|
|
||||||
$ErrorActionPreference = "Continue"
|
|
||||||
|
|
||||||
Log-Debug "Invoke-External: ${Command} ${CommandArgs}"
|
|
||||||
|
|
||||||
& $command $commandArgs
|
|
||||||
$Result = $LASTEXITCODE
|
|
||||||
|
|
||||||
$ErrorActionPreference = $_EAP
|
|
||||||
|
|
||||||
if ( $Result -ne 0 ) {
|
|
||||||
throw "${Command} ${CommandArgs} exited with non-zero code ${Result}."
|
|
||||||
}
|
|
||||||
}
|
|
||||||
149
.github/scripts/utils.pwsh/Logger.ps1
vendored
149
.github/scripts/utils.pwsh/Logger.ps1
vendored
@@ -1,149 +0,0 @@
|
|||||||
function Log-Debug {
|
|
||||||
[CmdletBinding()]
|
|
||||||
param(
|
|
||||||
[Parameter(Mandatory,ValueFromPipeline)]
|
|
||||||
[ValidateNotNullOrEmpty()]
|
|
||||||
[string[]] $Message
|
|
||||||
)
|
|
||||||
|
|
||||||
Process {
|
|
||||||
foreach($m in $Message) {
|
|
||||||
Write-Debug "$(if ( $env:CI -ne $null ) { '::debug::' })$m"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function Log-Verbose {
|
|
||||||
[CmdletBinding()]
|
|
||||||
param(
|
|
||||||
[Parameter(Mandatory,ValueFromPipeline)]
|
|
||||||
[ValidateNotNullOrEmpty()]
|
|
||||||
[string[]] $Message
|
|
||||||
)
|
|
||||||
|
|
||||||
Process {
|
|
||||||
foreach($m in $Message) {
|
|
||||||
Write-Verbose $m
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function Log-Warning {
|
|
||||||
[CmdletBinding()]
|
|
||||||
param(
|
|
||||||
[Parameter(Mandatory,ValueFromPipeline)]
|
|
||||||
[ValidateNotNullOrEmpty()]
|
|
||||||
[string[]] $Message
|
|
||||||
)
|
|
||||||
|
|
||||||
Process {
|
|
||||||
foreach($m in $Message) {
|
|
||||||
Write-Warning "$(if ( $env:CI -ne $null ) { '::warning::' })$m"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function Log-Error {
|
|
||||||
[CmdletBinding()]
|
|
||||||
param(
|
|
||||||
[Parameter(Mandatory,ValueFromPipeline)]
|
|
||||||
[ValidateNotNullOrEmpty()]
|
|
||||||
[string[]] $Message
|
|
||||||
)
|
|
||||||
|
|
||||||
Process {
|
|
||||||
foreach($m in $Message) {
|
|
||||||
Write-Error "$(if ( $env:CI -ne $null ) { '::error::' })$m"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function Log-Information {
|
|
||||||
[CmdletBinding()]
|
|
||||||
param(
|
|
||||||
[Parameter(Mandatory,ValueFromPipeline)]
|
|
||||||
[ValidateNotNullOrEmpty()]
|
|
||||||
[string[]] $Message
|
|
||||||
)
|
|
||||||
|
|
||||||
Process {
|
|
||||||
if ( ! ( $script:Quiet ) ) {
|
|
||||||
$StageName = $( if ( $script:StageName -ne $null ) { $script:StageName } else { '' })
|
|
||||||
$Icon = ' =>'
|
|
||||||
|
|
||||||
foreach($m in $Message) {
|
|
||||||
Write-Host -NoNewLine -ForegroundColor Blue " ${StageName} $($Icon.PadRight(5)) "
|
|
||||||
Write-Host "${m}"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function Log-Group {
|
|
||||||
[CmdletBinding()]
|
|
||||||
param(
|
|
||||||
[Parameter(ValueFromPipeline)]
|
|
||||||
[string[]] $Message
|
|
||||||
)
|
|
||||||
|
|
||||||
Process {
|
|
||||||
if ( $Env:CI -ne $null ) {
|
|
||||||
if ( $script:LogGroup ) {
|
|
||||||
Write-Output '::endgroup::'
|
|
||||||
$script:LogGroup = $false
|
|
||||||
}
|
|
||||||
|
|
||||||
if ( $Message.count -ge 1 ) {
|
|
||||||
Write-Output "::group::$($Message -join ' ')"
|
|
||||||
$script:LogGroup = $true
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
if ( $Message.count -ge 1 ) {
|
|
||||||
Log-Information $Message
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function Log-Status {
|
|
||||||
[CmdletBinding()]
|
|
||||||
param(
|
|
||||||
[Parameter(Mandatory,ValueFromPipeline)]
|
|
||||||
[ValidateNotNullOrEmpty()]
|
|
||||||
[string[]] $Message
|
|
||||||
)
|
|
||||||
|
|
||||||
Process {
|
|
||||||
if ( ! ( $script:Quiet ) ) {
|
|
||||||
$StageName = $( if ( $StageName -ne $null ) { $StageName } else { '' })
|
|
||||||
$Icon = ' >'
|
|
||||||
|
|
||||||
foreach($m in $Message) {
|
|
||||||
Write-Host -NoNewLine -ForegroundColor Green " ${StageName} $($Icon.PadRight(5)) "
|
|
||||||
Write-Host "${m}"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function Log-Output {
|
|
||||||
[CmdletBinding()]
|
|
||||||
param(
|
|
||||||
[Parameter(Mandatory,ValueFromPipeline)]
|
|
||||||
[ValidateNotNullOrEmpty()]
|
|
||||||
[string[]] $Message
|
|
||||||
)
|
|
||||||
|
|
||||||
Process {
|
|
||||||
if ( ! ( $script:Quiet ) ) {
|
|
||||||
$StageName = $( if ( $script:StageName -ne $null ) { $script:StageName } else { '' })
|
|
||||||
$Icon = ''
|
|
||||||
|
|
||||||
foreach($m in $Message) {
|
|
||||||
Write-Output " ${StageName} $($Icon.PadRight(5)) ${m}"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
$Columns = (Get-Host).UI.RawUI.WindowSize.Width - 5
|
|
||||||
61
.github/scripts/utils.zsh/check_linux
vendored
61
.github/scripts/utils.zsh/check_linux
vendored
@@ -1,61 +0,0 @@
|
|||||||
autoload -Uz log_info log_status log_error log_debug log_warning log_group
|
|
||||||
|
|
||||||
log_group 'Check Linux build requirements'
|
|
||||||
log_debug 'Checking Linux distribution name and version...'
|
|
||||||
|
|
||||||
# Check for Ubuntu version 22.10 or later, which have srt and librist available via apt-get
|
|
||||||
typeset -g -i UBUNTU_2210_OR_LATER=0
|
|
||||||
if [[ -f /etc/os_release ]] {
|
|
||||||
local dist_name
|
|
||||||
local dist_version
|
|
||||||
read -r dist_name dist_version <<< "$(source /etc/os_release; print "${NAME} ${VERSION_ID}")"
|
|
||||||
|
|
||||||
autoload -Uz is-at-least
|
|
||||||
if [[ ${dist_name} == Ubuntu ]] && is-at-least 22.10 ${dist_version}; then
|
|
||||||
typeset -g -i UBUNTU_2210_OR_LATER=1
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
log_debug 'Checking for apt-get...'
|
|
||||||
if (( ! ${+commands[apt-get]} )) {
|
|
||||||
log_error 'No apt-get command found. Please install apt'
|
|
||||||
return 2
|
|
||||||
} else {
|
|
||||||
log_debug "Apt-get located at ${commands[apt-get]}"
|
|
||||||
}
|
|
||||||
|
|
||||||
local -a dependencies=("${(fA)$(<${SCRIPT_HOME}/.Aptfile)}")
|
|
||||||
local -a install_list
|
|
||||||
local binary
|
|
||||||
|
|
||||||
sudo apt-get update -qq
|
|
||||||
|
|
||||||
for dependency (${dependencies}) {
|
|
||||||
local -a tokens=(${=dependency//(,|:|\')/})
|
|
||||||
|
|
||||||
if [[ ! ${tokens[1]} == 'package' ]] continue
|
|
||||||
|
|
||||||
if [[ ${#tokens} -gt 2 && ${tokens[3]} == 'bin' ]] {
|
|
||||||
binary=${tokens[4]}
|
|
||||||
} else {
|
|
||||||
binary=${tokens[2]}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (( ! ${+commands[${binary}]} )) install_list+=(${tokens[2]})
|
|
||||||
}
|
|
||||||
|
|
||||||
log_debug "List of dependencies to install: ${install_list}"
|
|
||||||
if (( ${#install_list} )) {
|
|
||||||
if (( ! ${+CI} )) log_warning 'Dependency installation via apt may require elevated privileges'
|
|
||||||
|
|
||||||
local -a apt_args=(
|
|
||||||
${CI:+-y}
|
|
||||||
--no-install-recommends
|
|
||||||
)
|
|
||||||
if (( _loglevel == 0 )) apt_args+=(--quiet)
|
|
||||||
|
|
||||||
sudo apt-get ${apt_args} install ${install_list}
|
|
||||||
}
|
|
||||||
|
|
||||||
rehash
|
|
||||||
log_group
|
|
||||||
22
.github/scripts/utils.zsh/check_macos
vendored
22
.github/scripts/utils.zsh/check_macos
vendored
@@ -1,22 +0,0 @@
|
|||||||
autoload -Uz is-at-least log_group log_info log_error log_status read_codesign
|
|
||||||
|
|
||||||
local macos_version=$(sw_vers -productVersion)
|
|
||||||
|
|
||||||
log_group 'Install macOS build requirements'
|
|
||||||
log_info 'Checking macOS version...'
|
|
||||||
if ! is-at-least 11.0 ${macos_version}; then
|
|
||||||
log_error "Minimum required macOS version is 11.0, but running on macOS ${macos_version}"
|
|
||||||
return 2
|
|
||||||
else
|
|
||||||
log_status "macOS ${macos_version} is recent"
|
|
||||||
fi
|
|
||||||
|
|
||||||
log_info 'Checking for Homebrew...'
|
|
||||||
if (( ! ${+commands[brew]} )) {
|
|
||||||
log_error 'No Homebrew command found. Please install Homebrew (https://brew.sh)'
|
|
||||||
return 2
|
|
||||||
}
|
|
||||||
|
|
||||||
brew bundle --file ${SCRIPT_HOME}/.Brewfile
|
|
||||||
rehash
|
|
||||||
log_group
|
|
||||||
3
.github/scripts/utils.zsh/log_debug
vendored
3
.github/scripts/utils.zsh/log_debug
vendored
@@ -1,3 +0,0 @@
|
|||||||
if (( ! ${+_loglevel} )) typeset -g _loglevel=1
|
|
||||||
|
|
||||||
if (( _loglevel > 2 )) print -PR -e -- "${CI:+::debug::}%F{220}DEBUG: ${@}%f"
|
|
||||||
3
.github/scripts/utils.zsh/log_error
vendored
3
.github/scripts/utils.zsh/log_error
vendored
@@ -1,3 +0,0 @@
|
|||||||
local icon=' ✖︎ '
|
|
||||||
|
|
||||||
print -u2 -PR "${CI:+::error::}%F{1} ${icon} %f ${@}"
|
|
||||||
16
.github/scripts/utils.zsh/log_group
vendored
16
.github/scripts/utils.zsh/log_group
vendored
@@ -1,16 +0,0 @@
|
|||||||
autoload -Uz log_info
|
|
||||||
|
|
||||||
if (( ! ${+_log_group} )) typeset -g _log_group=0
|
|
||||||
|
|
||||||
if (( ${+CI} )) {
|
|
||||||
if (( _log_group )) {
|
|
||||||
print "::endgroup::"
|
|
||||||
typeset -g _log_group=0
|
|
||||||
}
|
|
||||||
if (( # )) {
|
|
||||||
print "::group::${@}"
|
|
||||||
typeset -g _log_group=1
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
if (( # )) log_info ${@}
|
|
||||||
}
|
|
||||||
7
.github/scripts/utils.zsh/log_info
vendored
7
.github/scripts/utils.zsh/log_info
vendored
@@ -1,7 +0,0 @@
|
|||||||
if (( ! ${+_loglevel} )) typeset -g _loglevel=1
|
|
||||||
|
|
||||||
if (( _loglevel > 0 )) {
|
|
||||||
local icon=' =>'
|
|
||||||
|
|
||||||
print -PR "%F{4} ${(r:5:)icon}%f %B${@}%b"
|
|
||||||
}
|
|
||||||
7
.github/scripts/utils.zsh/log_output
vendored
7
.github/scripts/utils.zsh/log_output
vendored
@@ -1,7 +0,0 @@
|
|||||||
if (( ! ${+_loglevel} )) typeset -g _loglevel=1
|
|
||||||
|
|
||||||
if (( _loglevel > 0 )) {
|
|
||||||
local icon=''
|
|
||||||
|
|
||||||
print -PR " ${(r:5:)icon} ${@}"
|
|
||||||
}
|
|
||||||
7
.github/scripts/utils.zsh/log_status
vendored
7
.github/scripts/utils.zsh/log_status
vendored
@@ -1,7 +0,0 @@
|
|||||||
if (( ! ${+_loglevel} )) typeset -g _loglevel=1
|
|
||||||
|
|
||||||
if (( _loglevel > 0 )) {
|
|
||||||
local icon=' >'
|
|
||||||
|
|
||||||
print -PR "%F{2} ${(r:5:)icon}%f ${@}"
|
|
||||||
}
|
|
||||||
5
.github/scripts/utils.zsh/log_warning
vendored
5
.github/scripts/utils.zsh/log_warning
vendored
@@ -1,5 +0,0 @@
|
|||||||
if (( _loglevel > 0 )) {
|
|
||||||
local icon=' =>'
|
|
||||||
|
|
||||||
print -PR "${CI:+::warning::}%F{3} ${(r:5:)icon} ${@}%f"
|
|
||||||
}
|
|
||||||
1
.github/scripts/utils.zsh/mkcd
vendored
1
.github/scripts/utils.zsh/mkcd
vendored
@@ -1 +0,0 @@
|
|||||||
[[ -n ${1} ]] && mkdir -p ${1} && builtin cd ${1}
|
|
||||||
9
.github/scripts/utils.zsh/read_codesign
vendored
9
.github/scripts/utils.zsh/read_codesign
vendored
@@ -1,9 +0,0 @@
|
|||||||
autoload -Uz log_info
|
|
||||||
|
|
||||||
if (( ! ${+CODESIGN_IDENT} )) {
|
|
||||||
typeset -g CODESIGN_IDENT
|
|
||||||
log_info 'Setting up Apple Developer ID for application codesigning...'
|
|
||||||
read CODESIGN_IDENT'?Apple Developer Application ID: '
|
|
||||||
}
|
|
||||||
|
|
||||||
typeset -g CODESIGN_TEAM=$(print "${CODESIGN_IDENT}" | /usr/bin/sed -En 's/.+\((.+)\)/\1/p')
|
|
||||||
@@ -1,7 +0,0 @@
|
|||||||
autoload -Uz log_info
|
|
||||||
|
|
||||||
if (( ! ${+CODESIGN_IDENT_INSTALLER} )) {
|
|
||||||
typeset -g CODESIGN_IDENT_INSTALLER
|
|
||||||
log_info 'Setting up Apple Developer Installer ID for installer package codesigning...'
|
|
||||||
read CODESIGN_IDENT_INSTALLER'?Apple Developer Installer ID: '
|
|
||||||
}
|
|
||||||
38
.github/scripts/utils.zsh/read_codesign_pass
vendored
38
.github/scripts/utils.zsh/read_codesign_pass
vendored
@@ -1,38 +0,0 @@
|
|||||||
##############################################################################
|
|
||||||
# Apple Developer credentials necessary:
|
|
||||||
#
|
|
||||||
# + Signing for distribution and notarization require an active Apple
|
|
||||||
# Developer membership
|
|
||||||
# + An Apple Development identity is needed for code signing
|
|
||||||
# (i.e. 'Apple Development: YOUR APPLE ID (PROVIDER)')
|
|
||||||
# + Your Apple developer ID is needed for notarization
|
|
||||||
# + An app-specific password is necessary for notarization from CLI
|
|
||||||
# + This password will be stored in your macOS keychain under the identifier
|
|
||||||
# 'OBS-Codesign-Password'with access Apple's 'altool' only.
|
|
||||||
##############################################################################
|
|
||||||
|
|
||||||
autoload -Uz read_codesign read_codesign_user log_info log_warning
|
|
||||||
|
|
||||||
if (( ! ${+CODESIGN_IDENT} )) {
|
|
||||||
read_codesign
|
|
||||||
}
|
|
||||||
|
|
||||||
if (( ! ${+CODESIGN_IDENT_USER} )) {
|
|
||||||
read_codesign_user
|
|
||||||
}
|
|
||||||
|
|
||||||
log_info 'Setting up password for notarization keychain...'
|
|
||||||
if (( ! ${+CODESIGN_IDENT_PASS} )) {
|
|
||||||
read -s CODESIGN_IDENT_PASS'?Apple Developer ID password: '
|
|
||||||
}
|
|
||||||
|
|
||||||
print ''
|
|
||||||
log_info 'Setting up notarization keychain...'
|
|
||||||
log_warning "
|
|
||||||
+ Your Apple ID and an app-specific password is necessary for notarization from CLI
|
|
||||||
+ This password will be stored in your macOS keychain under the identifier
|
|
||||||
'OBS-Codesign-Password' with access Apple's 'altool' only.
|
|
||||||
|
|
||||||
"
|
|
||||||
xcrun notarytool store-credentials 'OBS-Codesign-Password' --apple-id "${CODESIGN_IDENT_USER}" --team-id "${CODESIGN_TEAM}" --password "${CODESIGN_IDENT_PASS}"
|
|
||||||
|
|
||||||
7
.github/scripts/utils.zsh/read_codesign_team
vendored
7
.github/scripts/utils.zsh/read_codesign_team
vendored
@@ -1,7 +0,0 @@
|
|||||||
autoload -Uz log_info
|
|
||||||
|
|
||||||
if (( ! ${+CODESIGN_TEAM} )) {
|
|
||||||
typeset -g CODESIGN_TEAM
|
|
||||||
log_info 'Setting up Apple Developer Team ID for codesigning...'
|
|
||||||
read CODESIGN_TEAM'?Apple Developer Team ID (leave empty to use Apple Developer ID instead): '
|
|
||||||
}
|
|
||||||
7
.github/scripts/utils.zsh/read_codesign_user
vendored
7
.github/scripts/utils.zsh/read_codesign_user
vendored
@@ -1,7 +0,0 @@
|
|||||||
autoload -Uz log_info
|
|
||||||
|
|
||||||
if (( ! ${+CODESIGN_IDENT_USER} )) {
|
|
||||||
typeset -g CODESIGN_IDENT_USER
|
|
||||||
log_info 'Setting up Apple ID for notarization...'
|
|
||||||
read CODESIGN_IDENT_USER'?Apple ID: '
|
|
||||||
}
|
|
||||||
17
.github/scripts/utils.zsh/set_loglevel
vendored
17
.github/scripts/utils.zsh/set_loglevel
vendored
@@ -1,17 +0,0 @@
|
|||||||
autoload -Uz log_debug log_error
|
|
||||||
|
|
||||||
local -r _usage="Usage: %B${0}%b <loglevel>
|
|
||||||
|
|
||||||
Set log level, following levels are supported: 0 (quiet), 1 (normal), 2 (verbose), 3 (debug)"
|
|
||||||
|
|
||||||
if (( ! # )); then
|
|
||||||
log_error 'Called without arguments.'
|
|
||||||
log_output ${_usage}
|
|
||||||
return 2
|
|
||||||
elif (( ${1} >= 4 )); then
|
|
||||||
log_error 'Called with loglevel > 3.'
|
|
||||||
log_output ${_usage}
|
|
||||||
fi
|
|
||||||
|
|
||||||
typeset -g -i -r _loglevel=${1}
|
|
||||||
log_debug "Log level set to '${1}'"
|
|
||||||
42
.github/scripts/utils.zsh/setup_ccache
vendored
42
.github/scripts/utils.zsh/setup_ccache
vendored
@@ -1,42 +0,0 @@
|
|||||||
autoload -Uz log_debug log_warning
|
|
||||||
|
|
||||||
if (( ! ${+project_root} )) {
|
|
||||||
log_error "'project_root' not set. Please set before running ${0}."
|
|
||||||
return 2
|
|
||||||
}
|
|
||||||
|
|
||||||
if (( ${+commands[ccache]} )) {
|
|
||||||
log_debug "Found ccache at ${commands[ccache]}"
|
|
||||||
|
|
||||||
typeset -gx CCACHE_CONFIGPATH="${project_root}/.ccache.conf"
|
|
||||||
|
|
||||||
ccache --set-config=run_second_cpp=true
|
|
||||||
ccache --set-config=direct_mode=true
|
|
||||||
ccache --set-config=inode_cache=true
|
|
||||||
ccache --set-config=compiler_check=content
|
|
||||||
ccache --set-config=file_clone=true
|
|
||||||
|
|
||||||
local -a sloppiness=(
|
|
||||||
include_file_mtime
|
|
||||||
include_file_ctime
|
|
||||||
file_stat_matches
|
|
||||||
system_headers
|
|
||||||
)
|
|
||||||
|
|
||||||
if [[ ${host_os} == macos ]] {
|
|
||||||
sloppiness+=(
|
|
||||||
modules
|
|
||||||
clang_index_store
|
|
||||||
)
|
|
||||||
|
|
||||||
ccache --set-config=sloppiness=${(j:,:)sloppiness}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (( ${+CI} )) {
|
|
||||||
ccache --set-config=cache_dir="${GITHUB_WORKSPACE:-${HOME}}/.ccache"
|
|
||||||
ccache --set-config=max_size="${CCACHE_SIZE:-1G}"
|
|
||||||
ccache -z > /dev/null
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
log_warning "No ccache found on the system"
|
|
||||||
}
|
|
||||||
65
.github/scripts/utils.zsh/setup_linux
vendored
65
.github/scripts/utils.zsh/setup_linux
vendored
@@ -1,65 +0,0 @@
|
|||||||
autoload -Uz log_error log_status log_info mkcd
|
|
||||||
|
|
||||||
if (( ! ${+project_root} )) {
|
|
||||||
log_error "'project_root' not set. Please set before running ${0}."
|
|
||||||
return 2
|
|
||||||
}
|
|
||||||
|
|
||||||
if (( ! ${+target} )) {
|
|
||||||
log_error "'target' not set. Please set before running ${0}."
|
|
||||||
return 2
|
|
||||||
}
|
|
||||||
|
|
||||||
pushd ${project_root}
|
|
||||||
|
|
||||||
typeset -g QT_VERSION
|
|
||||||
|
|
||||||
local -a apt_args=(
|
|
||||||
${CI:+-y}
|
|
||||||
--no-install-recommends
|
|
||||||
)
|
|
||||||
if (( _loglevel == 0 )) apt_args+=(--quiet)
|
|
||||||
|
|
||||||
if (( ! (${skips[(Ie)all]} + ${skips[(Ie)deps]}) )) {
|
|
||||||
log_group 'Installing obs-studio build dependencies...'
|
|
||||||
|
|
||||||
local suffix
|
|
||||||
if [[ ${CPUTYPE} != "${target##*-}" ]] {
|
|
||||||
local -A arch_mappings=(
|
|
||||||
aarch64 arm64
|
|
||||||
x86_64 amd64
|
|
||||||
)
|
|
||||||
|
|
||||||
suffix=":${arch_mappings[${target##*-}]}"
|
|
||||||
|
|
||||||
sudo apt-get install ${apt_args} gcc-${${target##*-}//_/-}-linux-gnu g++-${${target##*-}//_/-}-linux-gnu
|
|
||||||
}
|
|
||||||
|
|
||||||
sudo add-apt-repository --yes ppa:obsproject/obs-studio
|
|
||||||
sudo apt update
|
|
||||||
|
|
||||||
sudo apt-get install ${apt_args} \
|
|
||||||
build-essential \
|
|
||||||
libgles2-mesa-dev \
|
|
||||||
obs-studio
|
|
||||||
|
|
||||||
local -a _qt_packages=()
|
|
||||||
|
|
||||||
if (( QT_VERSION == 5 )) {
|
|
||||||
_qt_packages+=(
|
|
||||||
qtbase5-dev${suffix}
|
|
||||||
libqt5svg5-dev${suffix}
|
|
||||||
qtbase5-private-dev${suffix}
|
|
||||||
libqt5x11extras5-dev${suffix}
|
|
||||||
)
|
|
||||||
} else {
|
|
||||||
_qt_packages+=(
|
|
||||||
qt6-base-dev${suffix}
|
|
||||||
libqt6svg6-dev${suffix}
|
|
||||||
qt6-base-private-dev${suffix}
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
sudo apt-get install ${apt_args} ${_qt_packages}
|
|
||||||
log_group
|
|
||||||
}
|
|
||||||
39
.github/workflows/build-debian.yml
vendored
39
.github/workflows/build-debian.yml
vendored
@@ -1,56 +1,55 @@
|
|||||||
name: debian-build
|
name: debian-build
|
||||||
|
|
||||||
on:
|
on: [push, pull_request]
|
||||||
push:
|
|
||||||
paths-ignore:
|
|
||||||
- '**.md'
|
|
||||||
- 'data/locale/**'
|
|
||||||
branches:
|
|
||||||
- master
|
|
||||||
tags:
|
|
||||||
- '*'
|
|
||||||
pull_request:
|
|
||||||
paths-ignore:
|
|
||||||
- '**.md'
|
|
||||||
- 'data/locale/**'
|
|
||||||
branches:
|
|
||||||
- master
|
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
build:
|
build:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v2
|
||||||
with:
|
with:
|
||||||
submodules: "recursive"
|
submodules: "recursive"
|
||||||
- name: check_libobs_revision
|
- name: check_libobs_revision
|
||||||
run: |
|
run: |
|
||||||
sudo apt update
|
sudo apt update
|
||||||
sudo apt install devscripts libobs-dev
|
sudo apt install libobs-dev
|
||||||
mkdir source
|
mkdir source
|
||||||
cd source
|
cd source
|
||||||
dpkg -l libobs-dev | tr -s " "| grep libobs | cut -d" " -f3 > libobs.rev
|
dpkg -l libobs-dev | tr -s " "| grep libobs | cut -d" " -f3 > libobs.rev
|
||||||
|
- name: install_frontend_header
|
||||||
|
run: |
|
||||||
|
[ -e /usr/include/obs/obs-frontend-api.h ] && { echo "ERROR: obs-frontend-api.h already in system. Maybe the package libobs-dev is installing it."; exit 1; }
|
||||||
|
cd source
|
||||||
|
LIBOBSREV=$(cat libobs.rev)
|
||||||
|
sudo apt update
|
||||||
|
sudo apt install devscripts
|
||||||
|
dget -u http://archive.ubuntu.com/ubuntu/pool/universe/o/obs-studio/obs-studio_$LIBOBSREV.dsc
|
||||||
|
cd ..
|
||||||
|
sudo find -name obs-frontend-api.h -exec cp {} /usr/include/obs/ \;
|
||||||
|
egrep '#include <obs.h>' /usr/include/obs/obs-frontend-api.h || { echo "ERROR: check if the sed commands are needed from now."; exit 1; }
|
||||||
|
sudo sed -i 's/#include <obs.h>/#include <obs\/obs.h>/' /usr/include/obs/obs-frontend-api.h
|
||||||
|
sudo sed -i 's/#include <util\/darray.h>/#include <obs\/util\/darray.h>/' /usr/include/obs/obs-frontend-api.h
|
||||||
- name: create_tarball
|
- name: create_tarball
|
||||||
run: |
|
run: |
|
||||||
cd ..
|
cd ..
|
||||||
tar --exclude=.git -cvzf obs-scene-switcher_0.1+testonly.orig.tar.gz SceneSwitcher
|
tar --exclude=.git -cvzf obs-scene-switcher_0.1+testonly.orig.tar.gz SceneSwitcher
|
||||||
- name: create_debian_dir
|
- name: create_debian_dir
|
||||||
run: |
|
run: |
|
||||||
cp -a build-aux/CI/linux/debian .
|
cp -a CI/linux/debian .
|
||||||
- name: install_dependencies
|
- name: install_dependencies
|
||||||
run: |
|
run: |
|
||||||
# devscripts and libobs-dev are needed but they were already installed
|
# devscripts and libobs-dev are needed but they were already installed
|
||||||
# from check_libobs_revision and install_frontend_header sections.
|
# from check_libobs_revision and install_frontend_header sections.
|
||||||
sudo apt update
|
sudo apt update
|
||||||
sudo apt install build-essential cmake debhelper libcurl4-openssl-dev libxss-dev libxtst-dev qt6-base-dev libopencv-dev libproc2-dev
|
sudo apt install cmake debhelper libcurl4-openssl-dev libxss-dev libxtst-dev qtbase5-dev libopencv-dev libprocps-dev
|
||||||
- name: build
|
- name: build
|
||||||
run: |
|
run: |
|
||||||
debuild --no-lintian --no-sign
|
debuild --no-lintian --no-sign
|
||||||
mv ../*.deb .
|
mv ../*.deb .
|
||||||
- name: Publish
|
- name: Publish
|
||||||
if: success()
|
if: success()
|
||||||
uses: actions/upload-artifact@v4
|
uses: actions/upload-artifact@v2.2.1
|
||||||
with:
|
with:
|
||||||
name: "obs-scene-switcher.deb"
|
name: "obs-scene-switcher.deb"
|
||||||
path: ${{ github.workspace }}/*.deb
|
path: ${{ github.workspace }}/*.deb
|
||||||
|
|||||||
312
.github/workflows/build-project.yaml
vendored
312
.github/workflows/build-project.yaml
vendored
@@ -1,312 +0,0 @@
|
|||||||
name: Build Project
|
|
||||||
on:
|
|
||||||
workflow_call:
|
|
||||||
outputs:
|
|
||||||
pluginName:
|
|
||||||
description: "Project name detected by parsing build spec file"
|
|
||||||
value: ${{ jobs.check-event.outputs.pluginName }}
|
|
||||||
env:
|
|
||||||
DEP_DIR: .deps/advss-build-dependencies
|
|
||||||
jobs:
|
|
||||||
check-event:
|
|
||||||
name: Check GitHub Event Data 🔎
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
defaults:
|
|
||||||
run:
|
|
||||||
shell: bash
|
|
||||||
outputs:
|
|
||||||
package: ${{ steps.setup.outputs.package }}
|
|
||||||
codesign: ${{ steps.setup.outputs.codesign }}
|
|
||||||
notarize: ${{ steps.setup.outputs.notarize }}
|
|
||||||
config: ${{ steps.setup.outputs.config }}
|
|
||||||
commitHash: ${{ steps.setup.outputs.commitHash }}
|
|
||||||
pluginName: ${{ steps.setup.outputs.pluginName }}
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v4
|
|
||||||
with:
|
|
||||||
fetch-depth: 0
|
|
||||||
- name: Check Event Data ☑️
|
|
||||||
id: setup
|
|
||||||
env:
|
|
||||||
GH_TOKEN: ${{ github.token }}
|
|
||||||
run: |
|
|
||||||
: Check Event Data ☑️
|
|
||||||
if [[ "${RUNNER_DEBUG}" ]]; then set -x; fi
|
|
||||||
|
|
||||||
case "${GITHUB_EVENT_NAME}" in
|
|
||||||
pull_request)
|
|
||||||
config_data=('codesign:false' 'notarize:false' 'package:true' 'config:RelWithDebInfo')
|
|
||||||
if gh pr view ${{ github.event.number }} --json labels \
|
|
||||||
| jq -e -r '.labels[] | select(.name == "Seeking Testers")' > /dev/null; then
|
|
||||||
config_data[0]='codesign:true'
|
|
||||||
config_data[2]='package:true'
|
|
||||||
fi
|
|
||||||
;;
|
|
||||||
push)
|
|
||||||
config_data=('codesign:true' 'notarize:false' 'package:true' 'config:RelWithDebInfo')
|
|
||||||
if [[ ${GITHUB_REF_NAME} =~ [0-9]+.[0-9]+.[0-9]+(-(rc|beta).+)? ]]; then
|
|
||||||
config_data[1]='notarize:false'
|
|
||||||
config_data[3]='config:RelWithDebInfo'
|
|
||||||
fi
|
|
||||||
;;
|
|
||||||
workflow_dispatch)
|
|
||||||
config_data=('codesign:true' 'notarize:false' 'package:true' 'config:RelWithDebInfo')
|
|
||||||
;;
|
|
||||||
schedule)
|
|
||||||
config_data=('codesign:true' 'notarize:false' 'package:true' 'config:RelWithDebInfo')
|
|
||||||
;;
|
|
||||||
*) ;;
|
|
||||||
esac
|
|
||||||
|
|
||||||
for config in "${config_data[@]}"; do
|
|
||||||
IFS=':' read -r key value <<< "${config}"
|
|
||||||
echo "${key}=${value}" >> $GITHUB_OUTPUT
|
|
||||||
done
|
|
||||||
echo "commitHash=${GITHUB_SHA:0:9}" >> $GITHUB_OUTPUT
|
|
||||||
|
|
||||||
plugin_name="$(grep 'name' buildspec.json | sed -E -e 's/^.+"name":[^"]+"(.+)",?$/\1/g')"
|
|
||||||
plugin_display_name="$(grep 'displayName' buildspec.json | sed -E -e 's/^.+"displayName":[^"]+"(.+)",?$/\1/g' || echo "")"
|
|
||||||
|
|
||||||
if [[ "${plugin_display_name}" ]]; then
|
|
||||||
echo "pluginName=${plugin_display_name}" >> $GITHUB_OUTPUT
|
|
||||||
else
|
|
||||||
echo "pluginName=${plugin_name}" >> $GITHUB_OUTPUT
|
|
||||||
fi
|
|
||||||
|
|
||||||
macos-build:
|
|
||||||
name: Build for macOS 🍏
|
|
||||||
runs-on: macos-14
|
|
||||||
needs: check-event
|
|
||||||
defaults:
|
|
||||||
run:
|
|
||||||
shell: zsh --no-rcs --errexit --pipefail {0}
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v4
|
|
||||||
with:
|
|
||||||
submodules: recursive
|
|
||||||
fetch-depth: 0
|
|
||||||
|
|
||||||
- name: Set Up Environment 🔧
|
|
||||||
id: setup
|
|
||||||
run: |
|
|
||||||
: Set Up Environment 🔧
|
|
||||||
if (( ${+RUNNER_DEBUG} )) setopt XTRACE
|
|
||||||
|
|
||||||
print '::group::Clean Homebrew Environment'
|
|
||||||
local -a to_remove=()
|
|
||||||
|
|
||||||
if (( #to_remove )) brew uninstall --ignore-dependencies ${to_remove}
|
|
||||||
print '::endgroup::'
|
|
||||||
|
|
||||||
local product_name
|
|
||||||
local product_version
|
|
||||||
read -r product_name product_version <<< \
|
|
||||||
"$(jq -r '. | {name, version} | join(" ")' buildspec.json)"
|
|
||||||
local git_tag="$(git describe --tags)"
|
|
||||||
|
|
||||||
print "pluginName=${product_name}" >> $GITHUB_OUTPUT
|
|
||||||
print "pluginVersion=${git_tag}" >> $GITHUB_OUTPUT
|
|
||||||
|
|
||||||
print '::group::Enable Xcode 15.2'
|
|
||||||
sudo xcode-select --switch /Applications/Xcode_15.2.app/Contents/Developer
|
|
||||||
print '::endgroup::'
|
|
||||||
|
|
||||||
- uses: actions/cache@v4
|
|
||||||
id: ccache-cache
|
|
||||||
with:
|
|
||||||
path: ${{ github.workspace }}/.ccache
|
|
||||||
key: ${{ runner.os }}-ccache-${{ needs.check-event.outputs.config }}
|
|
||||||
restore-keys: |
|
|
||||||
${{ runner.os }}-ccache-
|
|
||||||
|
|
||||||
- name: Build Dependencies 🏗️
|
|
||||||
uses: ./.github/actions/build-dependencies
|
|
||||||
with:
|
|
||||||
workingDirectory: ${{ github.workspace }}/plugin
|
|
||||||
target: macos-universal
|
|
||||||
config: ${{ needs.check-event.outputs.config }}
|
|
||||||
|
|
||||||
- name: Set Up Codesigning 🔑
|
|
||||||
uses: ./.github/actions/setup-macos-codesigning
|
|
||||||
if: fromJSON(needs.check-event.outputs.codesign)
|
|
||||||
id: codesign
|
|
||||||
with:
|
|
||||||
codesignIdentity: ${{ secrets.MACOS_SIGNING_APPLICATION_IDENTITY }}
|
|
||||||
installerIdentity: ${{ secrets.MACOS_SIGNING_INSTALLER_IDENTITY }}
|
|
||||||
codesignCertificate: ${{ secrets.MACOS_SIGNING_CERT }}
|
|
||||||
certificatePassword: ${{ secrets.MACOS_SIGNING_CERT_PASSWORD }}
|
|
||||||
keychainPassword: ${{ secrets.MACOS_KEYCHAIN_PASSWORD }}
|
|
||||||
provisioningProfile: ${{ secrets.MACOS_SIGNING_PROVISIONING_PROFILE }}
|
|
||||||
notarizationUser: ${{ secrets.MACOS_NOTARIZATION_USERNAME }}
|
|
||||||
notarizationPassword: ${{ secrets.MACOS_NOTARIZATION_PASSWORD }}
|
|
||||||
|
|
||||||
- name: Build Plugin 🧱
|
|
||||||
uses: ./.github/actions/build-plugin
|
|
||||||
with:
|
|
||||||
target: macos-universal
|
|
||||||
config: ${{ needs.check-event.outputs.config }}
|
|
||||||
codesign: ${{ fromJSON(needs.check-event.outputs.codesign) }}
|
|
||||||
codesignIdent: ${{ steps.codesign.outputs.codesignIdent }}
|
|
||||||
|
|
||||||
- name: Package Plugin 📀
|
|
||||||
uses: ./.github/actions/package-plugin
|
|
||||||
with:
|
|
||||||
target: macos-universal
|
|
||||||
config: ${{ needs.check-event.outputs.config }}
|
|
||||||
package: ${{ fromJSON(needs.check-event.outputs.package) }}
|
|
||||||
codesign: ${{ fromJSON(needs.check-event.outputs.codesign) && fromJSON(steps.codesign.outputs.haveCodesignIdent) }}
|
|
||||||
codesignIdent: ${{ steps.codesign.outputs.codesignIdent }}
|
|
||||||
installerIdent: ${{ steps.codesign.outputs.installerIdent }}
|
|
||||||
codesignTeam: ${{ steps.codesign.outputs.codesignTeam }}
|
|
||||||
notarize: ${{ fromJSON(needs.check-event.outputs.notarize) && fromJSON(steps.codesign.outputs.haveNotarizationUser) }}
|
|
||||||
codesignUser: ${{ secrets.MACOS_NOTARIZATION_USERNAME }}
|
|
||||||
codesignPass: ${{ secrets.MACOS_NOTARIZATION_PASSWORD }}
|
|
||||||
|
|
||||||
- name: Upload Artifacts 📡
|
|
||||||
uses: actions/upload-artifact@v4
|
|
||||||
with:
|
|
||||||
name: ${{ steps.setup.outputs.pluginName }}-${{ steps.setup.outputs.pluginVersion }}-macos-universal-${{ needs.check-event.outputs.commitHash }}
|
|
||||||
path: ${{ github.workspace }}/release/${{ steps.setup.outputs.pluginName }}-*-macos-universal.*
|
|
||||||
|
|
||||||
- name: Upload Debug Symbol Artifacts 🪲
|
|
||||||
uses: actions/upload-artifact@v4
|
|
||||||
if: ${{ needs.check-event.outputs.config == 'Release' }}
|
|
||||||
with:
|
|
||||||
name: ${{ steps.setup.outputs.pluginName }}-${{ steps.setup.outputs.pluginVersion }}-macos-universal-${{ needs.check-event.outputs.commitHash }}-dSYMs
|
|
||||||
path: ${{ github.workspace }}/release/${{ steps.setup.outputs.pluginName }}-*-macos-universal-dSYMs.*
|
|
||||||
|
|
||||||
ubuntu-build:
|
|
||||||
name: Build for Ubuntu 🐧
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
needs: check-event
|
|
||||||
defaults:
|
|
||||||
run:
|
|
||||||
shell: bash
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v4
|
|
||||||
with:
|
|
||||||
submodules: recursive
|
|
||||||
fetch-depth: 0
|
|
||||||
|
|
||||||
- name: Set Up Environment 🔧
|
|
||||||
id: setup
|
|
||||||
run: |
|
|
||||||
: Set Up Environment 🔧
|
|
||||||
if [[ "${RUNNER_DEBUG}" ]]; then set -x; fi
|
|
||||||
|
|
||||||
git_tag="$(git describe --tags)"
|
|
||||||
|
|
||||||
read -r product_name product_version <<< \
|
|
||||||
"$(jq -r '. | {name, version} | join(" ")' buildspec.json)"
|
|
||||||
|
|
||||||
echo "pluginName=${product_name}" >> $GITHUB_OUTPUT
|
|
||||||
echo "pluginVersion=${git_tag}" >> $GITHUB_OUTPUT
|
|
||||||
|
|
||||||
- uses: actions/cache@v4
|
|
||||||
id: ccache-cache
|
|
||||||
with:
|
|
||||||
path: ${{ github.workspace }}/.ccache
|
|
||||||
key: ${{ runner.os }}-ccache-x86_64-${{ needs.check-event.outputs.config }}
|
|
||||||
restore-keys: |
|
|
||||||
${{ runner.os }}-ccache-x86_64-
|
|
||||||
|
|
||||||
- name: Set up Homebrew 🍺
|
|
||||||
uses: Homebrew/actions/setup-homebrew@master
|
|
||||||
|
|
||||||
- name: Build Plugin 🧱
|
|
||||||
uses: ./.github/actions/build-plugin
|
|
||||||
with:
|
|
||||||
target: x86_64
|
|
||||||
config: ${{ needs.check-event.outputs.config }}
|
|
||||||
|
|
||||||
- name: Run tests
|
|
||||||
uses: ./.github/actions/run-tests
|
|
||||||
with:
|
|
||||||
target: x86_64
|
|
||||||
config: ${{ needs.check-event.outputs.config }}
|
|
||||||
|
|
||||||
- name: Package Plugin 📀
|
|
||||||
uses: ./.github/actions/package-plugin
|
|
||||||
with:
|
|
||||||
package: ${{ fromJSON(needs.check-event.outputs.package) }}
|
|
||||||
target: x86_64
|
|
||||||
config: ${{ needs.check-event.outputs.config }}
|
|
||||||
|
|
||||||
- name: Upload Source Tarball 🗜️
|
|
||||||
uses: actions/upload-artifact@v4
|
|
||||||
with:
|
|
||||||
name: ${{ steps.setup.outputs.pluginName }}-${{ steps.setup.outputs.pluginVersion }}-sources-${{ needs.check-event.outputs.commitHash }}
|
|
||||||
path: ${{ github.workspace }}/release/${{ steps.setup.outputs.pluginName }}-*-source.*
|
|
||||||
|
|
||||||
- name: Upload Artifacts 📡
|
|
||||||
uses: actions/upload-artifact@v4
|
|
||||||
with:
|
|
||||||
name: ${{ steps.setup.outputs.pluginName }}-${{ steps.setup.outputs.pluginVersion }}-ubuntu-24.04-x86_64-${{ needs.check-event.outputs.commitHash }}
|
|
||||||
path: ${{ github.workspace }}/release/${{ steps.setup.outputs.pluginName }}-*-x86_64*.*
|
|
||||||
|
|
||||||
- name: Upload debug symbol artifacts 🪲
|
|
||||||
uses: actions/upload-artifact@v4
|
|
||||||
if: ${{ fromJSON(needs.check-event.outputs.package) }}
|
|
||||||
with:
|
|
||||||
name: ${{ steps.setup.outputs.pluginName }}-${{ steps.setup.outputs.pluginVersion }}-ubuntu-24.04-x86_64-${{ needs.check-event.outputs.commitHash }}-dbgsym
|
|
||||||
path: ${{ github.workspace }}/release/${{ steps.setup.outputs.pluginName }}-*-x86_64*-dbgsym.ddeb
|
|
||||||
|
|
||||||
windows-build:
|
|
||||||
name: Build for Windows 🪟
|
|
||||||
runs-on: windows-2022
|
|
||||||
needs: check-event
|
|
||||||
defaults:
|
|
||||||
run:
|
|
||||||
shell: pwsh
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v4
|
|
||||||
with:
|
|
||||||
submodules: recursive
|
|
||||||
fetch-depth: 0
|
|
||||||
|
|
||||||
- name: Set Up Environment 🔧
|
|
||||||
id: setup
|
|
||||||
run: |
|
|
||||||
# Set Up Environment 🔧
|
|
||||||
if ( $Env:RUNNER_DEBUG -ne $null ) {
|
|
||||||
Set-PSDebug -Trace 1
|
|
||||||
}
|
|
||||||
|
|
||||||
$BuildSpec = Get-Content -Path buildspec.json -Raw | ConvertFrom-Json
|
|
||||||
$ProductName = $BuildSpec.name
|
|
||||||
$GitOutput = git describe --tags
|
|
||||||
|
|
||||||
"pluginName=${ProductName}" >> $env:GITHUB_OUTPUT
|
|
||||||
"pluginVersion=${GitOutput}" >> $env:GITHUB_OUTPUT
|
|
||||||
|
|
||||||
- name: Build Dependencies 🏗️
|
|
||||||
uses: ./.github/actions/build-dependencies
|
|
||||||
with:
|
|
||||||
workingDirectory: ${{ github.workspace }}/plugin
|
|
||||||
target: x64
|
|
||||||
config: ${{ needs.check-event.outputs.config }}
|
|
||||||
|
|
||||||
- name: Build Plugin 🧱
|
|
||||||
uses: ./.github/actions/build-plugin
|
|
||||||
with:
|
|
||||||
target: x64
|
|
||||||
config: ${{ needs.check-event.outputs.config }}
|
|
||||||
|
|
||||||
- name: Run tests
|
|
||||||
uses: ./.github/actions/run-tests
|
|
||||||
with:
|
|
||||||
target: x64
|
|
||||||
config: ${{ needs.check-event.outputs.config }}
|
|
||||||
|
|
||||||
- name: Package Plugin 📀
|
|
||||||
uses: ./.github/actions/package-plugin
|
|
||||||
with:
|
|
||||||
target: x64
|
|
||||||
config: ${{ needs.check-event.outputs.config }}
|
|
||||||
package: ${{ fromJSON(needs.check-event.outputs.package) }}
|
|
||||||
|
|
||||||
- name: Upload Artifacts 📡
|
|
||||||
uses: actions/upload-artifact@v4
|
|
||||||
with:
|
|
||||||
name: ${{ steps.setup.outputs.pluginName }}-${{ steps.setup.outputs.pluginVersion }}-windows-x64-${{ needs.check-event.outputs.commitHash }}
|
|
||||||
path: ${{ github.workspace }}/release/${{ steps.setup.outputs.pluginName }}-*-windows-x64*.*
|
|
||||||
380
.github/workflows/build.yml
vendored
Normal file
380
.github/workflows/build.yml
vendored
Normal file
@@ -0,0 +1,380 @@
|
|||||||
|
name: build obs plugin
|
||||||
|
|
||||||
|
on: [push, pull_request, workflow_dispatch]
|
||||||
|
|
||||||
|
env:
|
||||||
|
PLUGIN_NAME: SceneSwitcher
|
||||||
|
LIB_NAME: advanced-scene-switcher
|
||||||
|
OBS_TAG: 27.2.0
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
macos64:
|
||||||
|
name: "macOS 64-bit"
|
||||||
|
runs-on: [macos-latest]
|
||||||
|
env:
|
||||||
|
QT_VERSION: "5.15.2"
|
||||||
|
MACOS_DEPS_VERSION: "2020-12-11"
|
||||||
|
steps:
|
||||||
|
- name: Checkout
|
||||||
|
uses: actions/checkout@v2.3.4
|
||||||
|
with:
|
||||||
|
repository: obsproject/obs-studio
|
||||||
|
submodules: "recursive"
|
||||||
|
ref: "refs/tags/${{ env.OBS_TAG }}"
|
||||||
|
- name: "Checkout plugin"
|
||||||
|
uses: actions/checkout@v2.3.4
|
||||||
|
with:
|
||||||
|
path: UI/frontend-plugins/${{ env.PLUGIN_NAME }}
|
||||||
|
submodules: "recursive"
|
||||||
|
- name: Fetch Git Tags
|
||||||
|
run: |
|
||||||
|
cd UI/frontend-plugins/${{ env.PLUGIN_NAME }}
|
||||||
|
git fetch --prune --tags --unshallow
|
||||||
|
- name: "Install prerequisites (Homebrew)"
|
||||||
|
shell: bash
|
||||||
|
run: |
|
||||||
|
if [ -d /usr/local/opt/openssl@1.0.2t ]; then
|
||||||
|
brew uninstall openssl@1.0.2t
|
||||||
|
brew untap local/openssl
|
||||||
|
fi
|
||||||
|
if [ -d /usr/local/opt/python@2.7.17 ]; then
|
||||||
|
brew uninstall python@2.7.17
|
||||||
|
brew untap local/python2
|
||||||
|
fi
|
||||||
|
brew bundle --file ./CI/scripts/macos/Brewfile
|
||||||
|
- name: "Install prerequisite: Pre-built dependencies"
|
||||||
|
if: steps.deps-cache.outputs.cache-hit != 'true'
|
||||||
|
shell: bash
|
||||||
|
run: |
|
||||||
|
curl -L -O https://github.com/obsproject/obs-deps/releases/download/${{ env.MACOS_DEPS_VERSION }}/macos-deps-${{ env.MACOS_DEPS_VERSION }}.tar.gz
|
||||||
|
tar -xf ./macos-deps-${{ env.MACOS_DEPS_VERSION }}.tar.gz -C "/tmp"
|
||||||
|
- name: "Install prerequisite: Pre-built dependency Qt"
|
||||||
|
if: steps.deps-qt-cache.outputs.cache-hit != 'true'
|
||||||
|
shell: bash
|
||||||
|
run: |
|
||||||
|
curl -L -O https://github.com/obsproject/obs-deps/releases/download/${{ env.MACOS_DEPS_VERSION }}/macos-qt-${{ env.QT_VERSION }}-${{ env.MACOS_DEPS_VERSION }}.tar.gz
|
||||||
|
tar -xf ./macos-qt-${{ env.QT_VERSION }}-${{ env.MACOS_DEPS_VERSION }}.tar.gz -C "/tmp"
|
||||||
|
xattr -r -d com.apple.quarantine /tmp/obsdeps
|
||||||
|
- name: "Build prerequisite: OpenCV"
|
||||||
|
shell: bash
|
||||||
|
run: |
|
||||||
|
cd UI/frontend-plugins/${{ env.PLUGIN_NAME }}/deps/opencv
|
||||||
|
mkdir build
|
||||||
|
cd build
|
||||||
|
cmake -DBUILD_LIST="core,imgproc,objdetect" ..
|
||||||
|
make -j4
|
||||||
|
make install
|
||||||
|
- name: Configure
|
||||||
|
shell: bash
|
||||||
|
run: |
|
||||||
|
echo "add_subdirectory(${{ env.PLUGIN_NAME }})" >> UI/frontend-plugins/CMakeLists.txt
|
||||||
|
mkdir ./build
|
||||||
|
cd ./build
|
||||||
|
cmake -DBUILD_BROWSER=OFF -DCMAKE_OSX_DEPLOYMENT_TARGET=10.13 -DDISABLE_PYTHON=ON -DDepsPath="/tmp/obsdeps" -DQTDIR="/tmp/obsdeps" ..
|
||||||
|
cd -
|
||||||
|
- name: Build
|
||||||
|
shell: bash
|
||||||
|
run: |
|
||||||
|
set -e
|
||||||
|
cd ./build
|
||||||
|
make -j4
|
||||||
|
cd -
|
||||||
|
- name: "Install prerequisite: Packages app"
|
||||||
|
if: success()
|
||||||
|
shell: bash
|
||||||
|
run: |
|
||||||
|
curl -L -O http://s.sudre.free.fr/Software/files/Packages.dmg
|
||||||
|
sudo hdiutil attach ./Packages.dmg
|
||||||
|
sudo installer -pkg /Volumes/Packages\ 1.2.10/Install\ Packages.pkg -target /
|
||||||
|
- name: Package
|
||||||
|
if: success()
|
||||||
|
shell: bash
|
||||||
|
run: |
|
||||||
|
fix_linker_paths() {
|
||||||
|
install_name_tool -change @rpath/libobs-frontend-api.dylib @executable_path/../Frameworks/libobs-frontend-api.dylib $1
|
||||||
|
install_name_tool -change @rpath/libobs.0.dylib @executable_path/../Frameworks/libobs.0.dylib $1
|
||||||
|
install_name_tool -change /tmp/obsdeps/lib/QtWidgets.framework/Versions/5/QtWidgets @executable_path/../Frameworks/QtWidgets.framework/Versions/5/QtWidgets $1
|
||||||
|
install_name_tool -change /tmp/obsdeps/lib/QtGui.framework/Versions/5/QtGui @executable_path/../Frameworks/QtGui.framework/Versions/5/QtGui $1
|
||||||
|
install_name_tool -change /tmp/obsdeps/lib/QtCore.framework/Versions/5/QtCore @executable_path/../Frameworks/QtCore.framework/Versions/5/QtCore $1
|
||||||
|
}
|
||||||
|
cd UI/frontend-plugins/${{ env.PLUGIN_NAME }}
|
||||||
|
fix_linker_paths ../../../build/UI/frontend-plugins/SceneSwitcher/advanced-scene-switcher.so
|
||||||
|
fix_linker_paths ../../../build/UI/frontend-plugins/SceneSwitcher/src/external-macro-modules/opencv/advanced-scene-switcher-opencv.so
|
||||||
|
FILE_DATE=$(date +%Y-%m-%d)
|
||||||
|
FILE_NAME=${{ env.PLUGIN_NAME }}-$FILE_DATE-${{ github.sha }}-macos.pkg
|
||||||
|
echo "FILE_NAME=${FILE_NAME}" >> $GITHUB_ENV
|
||||||
|
packagesbuild ./CI/macos/${{ env.PLUGIN_NAME }}.pkgproj
|
||||||
|
cd -
|
||||||
|
mkdir ./nightly
|
||||||
|
mv UI/frontend-plugins/${{ env.PLUGIN_NAME }}/${{ env.PLUGIN_NAME }}.pkg ./nightly/${FILE_NAME}
|
||||||
|
- name: Publish
|
||||||
|
if: success()
|
||||||
|
uses: actions/upload-artifact@v2.2.1
|
||||||
|
with:
|
||||||
|
name: "${{ env.FILE_NAME }}"
|
||||||
|
path: ./nightly/*.pkg
|
||||||
|
ubuntu64:
|
||||||
|
name: "Linux/Ubuntu 64-bit"
|
||||||
|
runs-on: [ubuntu-latest]
|
||||||
|
steps:
|
||||||
|
- name: Checkout
|
||||||
|
uses: actions/checkout@v2.3.4
|
||||||
|
with:
|
||||||
|
repository: obsproject/obs-studio
|
||||||
|
submodules: "recursive"
|
||||||
|
ref: "refs/tags/${{ env.OBS_TAG }}"
|
||||||
|
- name: "Checkout plugin"
|
||||||
|
uses: actions/checkout@v2.3.4
|
||||||
|
with:
|
||||||
|
path: UI/frontend-plugins/${{ env.PLUGIN_NAME }}
|
||||||
|
submodules: "recursive"
|
||||||
|
- name: Add plugin to obs cmake
|
||||||
|
shell: bash
|
||||||
|
run: echo "add_subdirectory(${{ env.PLUGIN_NAME }})" >> UI/frontend-plugins/CMakeLists.txt
|
||||||
|
- name: Fetch Git Tags
|
||||||
|
run: git fetch --prune --tags --unshallow
|
||||||
|
- name: Install prerequisites (Apt)
|
||||||
|
shell: bash
|
||||||
|
run: |
|
||||||
|
sudo dpkg --add-architecture amd64
|
||||||
|
sudo apt-get -qq update
|
||||||
|
sudo apt-get install -y \
|
||||||
|
build-essential \
|
||||||
|
checkinstall \
|
||||||
|
cmake \
|
||||||
|
libasound2-dev \
|
||||||
|
libavcodec-dev \
|
||||||
|
libavdevice-dev \
|
||||||
|
libavfilter-dev \
|
||||||
|
libavformat-dev \
|
||||||
|
libavutil-dev \
|
||||||
|
libcurl4-openssl-dev \
|
||||||
|
libfdk-aac-dev \
|
||||||
|
libfontconfig-dev \
|
||||||
|
libfreetype6-dev \
|
||||||
|
libgl1-mesa-dev \
|
||||||
|
libjack-jackd2-dev \
|
||||||
|
libjansson-dev \
|
||||||
|
libluajit-5.1-dev \
|
||||||
|
libpulse-dev \
|
||||||
|
libqt5x11extras5-dev \
|
||||||
|
libspeexdsp-dev \
|
||||||
|
libswresample-dev \
|
||||||
|
libswscale-dev \
|
||||||
|
libudev-dev \
|
||||||
|
libv4l-dev \
|
||||||
|
libva-dev \
|
||||||
|
libvlc-dev \
|
||||||
|
libx11-dev \
|
||||||
|
libx264-dev \
|
||||||
|
libxcb-randr0-dev \
|
||||||
|
libxcb-shm0-dev \
|
||||||
|
libxcb-xinerama0-dev \
|
||||||
|
libxcomposite-dev \
|
||||||
|
libxinerama-dev \
|
||||||
|
libxtst-dev \
|
||||||
|
libmbedtls-dev \
|
||||||
|
pkg-config \
|
||||||
|
python3-dev \
|
||||||
|
qtbase5-dev \
|
||||||
|
qtbase5-private-dev \
|
||||||
|
libqt5svg5-dev \
|
||||||
|
swig \
|
||||||
|
libxss-dev \
|
||||||
|
libx11-xcb-dev \
|
||||||
|
libxcb-xfixes0-dev \
|
||||||
|
libopencv-dev \
|
||||||
|
libprocps-dev \
|
||||||
|
libpci-dev
|
||||||
|
- name: "Configure"
|
||||||
|
shell: bash
|
||||||
|
run: |
|
||||||
|
mkdir ./build
|
||||||
|
cd ./build
|
||||||
|
cmake -DENABLE_PIPEWIRE=OFF -DUNIX_STRUCTURE=0 -DCMAKE_INSTALL_PREFIX="${{ github.workspace }}/obs-studio-portable" -DWITH_RTMPS=OFF -DBUILD_BROWSER=OFF ..
|
||||||
|
- name: "Build"
|
||||||
|
shell: bash
|
||||||
|
working-directory: ${{ github.workspace }}/build
|
||||||
|
run: make -j4
|
||||||
|
- name: "Package"
|
||||||
|
shell: bash
|
||||||
|
run: |
|
||||||
|
FILE_DATE=$(date +%Y-%m-%d)
|
||||||
|
FILE_NAME=${{ env.PLUGIN_NAME }}-$FILE_DATE-${{ github.sha }}-linux64.tar.gz
|
||||||
|
echo "FILE_NAME=${FILE_NAME}" >> $GITHUB_ENV
|
||||||
|
mkdir -p ./${{ env.LIB_NAME }}/bin/64bit/
|
||||||
|
strip -d ./build/UI/frontend-plugins/${{ env.PLUGIN_NAME }}/${{ env.LIB_NAME }}.so
|
||||||
|
mv ./build/UI/frontend-plugins/${{ env.PLUGIN_NAME }}/${{ env.LIB_NAME }}.so ./${{ env.LIB_NAME }}/bin/64bit/${{ env.LIB_NAME }}.so
|
||||||
|
mv ./UI/frontend-plugins/${{ env.PLUGIN_NAME }}/data ./${{ env.LIB_NAME }}/data
|
||||||
|
# Macro modules
|
||||||
|
mkdir -p ./${{ env.LIB_NAME }}/bin/64bit/adv-ss-plugins
|
||||||
|
strip -d ./build/UI/frontend-plugins/${{ env.PLUGIN_NAME }}/src/external-macro-modules/opencv/advanced-scene-switcher-opencv.so
|
||||||
|
mv ./build/UI/frontend-plugins/${{ env.PLUGIN_NAME }}/src/external-macro-modules/opencv/advanced-scene-switcher-opencv.so ./${{ env.LIB_NAME }}/bin/64bit/adv-ss-plugins
|
||||||
|
tar -cvzf "${FILE_NAME}" ${{ env.LIB_NAME }}
|
||||||
|
- name: "Publish"
|
||||||
|
uses: actions/upload-artifact@v2.2.1
|
||||||
|
with:
|
||||||
|
name: "${{ env.FILE_NAME }}"
|
||||||
|
path: "*.tar.gz"
|
||||||
|
windows:
|
||||||
|
name: Windows
|
||||||
|
runs-on: [windows-latest]
|
||||||
|
strategy:
|
||||||
|
matrix:
|
||||||
|
arch: [32, 64]
|
||||||
|
env:
|
||||||
|
QT_VERSION: 5.15.2
|
||||||
|
CMAKE_GENERATOR: "Visual Studio 17 2022"
|
||||||
|
CMAKE_SYSTEM_VERSION: "10.0.18363.657"
|
||||||
|
WINDOWS_DEPS_VERSION: "2019"
|
||||||
|
steps:
|
||||||
|
- name: Add msbuild to PATH
|
||||||
|
uses: microsoft/setup-msbuild@v1.0.2
|
||||||
|
- name: Checkout obs
|
||||||
|
uses: actions/checkout@v2.3.4
|
||||||
|
with:
|
||||||
|
repository: obsproject/obs-studio
|
||||||
|
submodules: "recursive"
|
||||||
|
ref: "refs/tags/${{ env.OBS_TAG }}"
|
||||||
|
- name: Checkout plugin
|
||||||
|
uses: actions/checkout@v2.3.4
|
||||||
|
with:
|
||||||
|
path: UI/frontend-plugins/${{ env.PLUGIN_NAME}}
|
||||||
|
submodules: "recursive"
|
||||||
|
- name: Add plugin to obs cmake
|
||||||
|
shell: cmd
|
||||||
|
run: echo add_subdirectory(${{ env.PLUGIN_NAME }}) >> UI/frontend-plugins/CMakeLists.txt
|
||||||
|
- name: Fetch Git Tags
|
||||||
|
run: git fetch --prune --tags --unshallow
|
||||||
|
- name: "Install prerequisite: QT"
|
||||||
|
run: |
|
||||||
|
curl -kLO https://cdn-fastly.obsproject.com/downloads/Qt_${{ env.QT_VERSION }}.7z -f --retry 5 -C -
|
||||||
|
7z x Qt_${{ env.QT_VERSION }}.7z -o"${{ github.workspace }}/cmbuild/QT"
|
||||||
|
- name: "Install prerequisite: Pre-built dependencies"
|
||||||
|
run: |
|
||||||
|
curl -kLO https://cdn-fastly.obsproject.com/downloads/dependencies${{ env.WINDOWS_DEPS_VERSION }}.zip -f --retry 5 -C -
|
||||||
|
7z x dependencies${{ env.WINDOWS_DEPS_VERSION }}.zip -o"${{ github.workspace }}/cmbuild/deps"
|
||||||
|
- name: "Build prerequisite: OpenCV"
|
||||||
|
run: |
|
||||||
|
cd UI/frontend-plugins/${{ env.PLUGIN_NAME }}/deps/opencv
|
||||||
|
mkdir build
|
||||||
|
cd build
|
||||||
|
if ( ${{ matrix.arch }} -eq 32 )
|
||||||
|
{
|
||||||
|
cmake -G"${{ env.CMAKE_GENERATOR }}" -A"Win32" -DBUILD_LIST="core,imgproc,objdetect" ..
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
cmake -G"${{ env.CMAKE_GENERATOR }}" -A"x64" -DBUILD_LIST="core,imgproc,objdetect" ..
|
||||||
|
}
|
||||||
|
msbuild /m /p:Configuration=Release OpenCV.sln
|
||||||
|
msbuild INSTALL.vcxproj
|
||||||
|
- name: Configure
|
||||||
|
run: |
|
||||||
|
mkdir ./package
|
||||||
|
mkdir ./build${{ matrix.arch }}
|
||||||
|
cd ./build${{ matrix.arch }}
|
||||||
|
Get-Location
|
||||||
|
if ( ${{ matrix.arch }} -eq 32 )
|
||||||
|
{
|
||||||
|
cmake -G"${{ env.CMAKE_GENERATOR }}" -A"Win32" -DOpenCV_DIR="${{ github.workspace }}/UI/frontend-plugins/SceneSwitcher/deps/opencv/build/" -DCMAKE_SYSTEM_VERSION="${{ env.CMAKE_SYSTEM_VERSION }}" -DBUILD_BROWSER=false -DBUILD_CAPTIONS=false -DCOMPILE_D3D12_HOOK=false -DDepsPath="${{ github.workspace }}/cmbuild/deps/win32" -DQTDIR="${{ github.workspace }}/cmbuild/QT/${{ env.QT_VERSION }}/msvc2019" -DCOPIED_DEPENDENCIES=FALSE -DCOPY_DEPENDENCIES=TRUE ..
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
cmake -G"${{ env.CMAKE_GENERATOR }}" -A"x64" -DOpenCV_DIR="${{ github.workspace }}/UI/frontend-plugins/SceneSwitcher/deps/opencv/build/" -DCMAKE_SYSTEM_VERSION="${{ env.CMAKE_SYSTEM_VERSION }}" -DBUILD_BROWSER=false -DBUILD_CAPTIONS=false -DCOMPILE_D3D12_HOOK=false -DDepsPath="${{ github.workspace }}/cmbuild/deps/win64" -DQTDIR="${{ github.workspace }}/cmbuild/QT/${{ env.QT_VERSION }}/msvc2019_64" -DCOPIED_DEPENDENCIES=FALSE -DCOPY_DEPENDENCIES=TRUE ..
|
||||||
|
}
|
||||||
|
- name: Build
|
||||||
|
run: |
|
||||||
|
msbuild /m /p:Configuration=RelWithDebInfo .\build${{ matrix.arch }}\obs-studio.sln
|
||||||
|
- name: Package
|
||||||
|
if: success()
|
||||||
|
run: |
|
||||||
|
$env:FILE_DATE=(Get-Date -UFormat "%F")
|
||||||
|
$env:FILE_NAME="${{ env.PLUGIN_NAME }}-${env:FILE_DATE}-${{ github.sha }}-windows"
|
||||||
|
echo "FILE_NAME=${env:FILE_NAME}" >> ${env:GITHUB_ENV}
|
||||||
|
robocopy .\build${{ matrix.arch }}\rundir\RelWithDebInfo\obs-plugins\${{ matrix.arch }}bit\ .\package\obs-plugins\${{ matrix.arch }}bit ${{ env.LIB_NAME }}* /E /XF .gitignore
|
||||||
|
robocopy .\build${{ matrix.arch }}\rundir\RelWithDebInfo\obs-plugins\${{ matrix.arch }}bit\ .\package\obs-plugins\${{ matrix.arch }}bit adv-ss-plugins /E /XF .gitignore
|
||||||
|
robocopy .\build${{ matrix.arch }}\rundir\RelWithDebInfo\data\obs-plugins\${{ env.LIB_NAME }}\ .\package\data\obs-plugins\${{ env.LIB_NAME }}\ /E /XF .gitignore
|
||||||
|
cp UI/frontend-plugins/${{ env.PLUGIN_NAME }}/deps/opencv/build/bin/Release/*dll package/obs-plugins/${{ matrix.arch }}bit/adv-ss-plugins
|
||||||
|
cp UI/frontend-plugins/${{ env.PLUGIN_NAME }}/deps/openvr/bin/win${{ matrix.arch }}/*dll package/obs-plugins/${{ matrix.arch }}bit/adv-ss-plugins
|
||||||
|
exit 0
|
||||||
|
- name: Publish zip
|
||||||
|
if: success()
|
||||||
|
uses: actions/upload-artifact@v2.2.1
|
||||||
|
with:
|
||||||
|
name: "${{ env.FILE_NAME }}-${{ matrix.arch }}bit"
|
||||||
|
path: package/*
|
||||||
|
windows-installer:
|
||||||
|
needs: [windows]
|
||||||
|
name: "Create Windows Installer"
|
||||||
|
runs-on: [windows-latest]
|
||||||
|
steps:
|
||||||
|
- name: "Checkout plugin"
|
||||||
|
uses: actions/checkout@v2.3.4
|
||||||
|
- name: Add msbuild to PATH
|
||||||
|
uses: microsoft/setup-msbuild@v1.0.2
|
||||||
|
- name: "Prepare innosetup"
|
||||||
|
run: |
|
||||||
|
curl "-kL" "https://files.jrsoftware.org/is/6/innosetup-6.0.3.exe" "-f" "--retry" "5" "-o" "inno.exe"
|
||||||
|
.\inno.exe /VERYSILENT /SP- /SUPPRESSMSGBOXES /NORESTART
|
||||||
|
mkdir build
|
||||||
|
cd build
|
||||||
|
cmake ..
|
||||||
|
continue-on-error: true
|
||||||
|
- name: Download artifacts
|
||||||
|
uses: actions/download-artifact@v2
|
||||||
|
with:
|
||||||
|
path: artifacts
|
||||||
|
- name: "Prepare package dir"
|
||||||
|
run: |
|
||||||
|
curl "-kL" "https://github.com/Xaymar/msvc-redist-helper/releases/download/0.1/msvc-redist-helper-64.exe" "-f" "--retry" "5" "-o" "msvc-redist-helper-64.exe"
|
||||||
|
curl "-kL" "https://github.com/Xaymar/msvc-redist-helper/releases/download/0.1/msvc-redist-helper-32.exe" "-f" "--retry" "5" "-o" "msvc-redist-helper-32.exe"
|
||||||
|
$env:FILE_DATE=(Get-Date -UFormat "%F")
|
||||||
|
$env:FILE_NAME="${{ env.PLUGIN_NAME }}-${env:FILE_DATE}-${{ github.sha }}-windows"
|
||||||
|
echo "FILE_NAME=${env:FILE_NAME}" >> ${env:GITHUB_ENV}
|
||||||
|
mkdir package
|
||||||
|
cd package
|
||||||
|
cp -r ../artifacts/${env:FILE_NAME}-32bit/* .
|
||||||
|
cp -r ../artifacts/${env:FILE_NAME}-64bit/obs-plugins/* obs-plugins
|
||||||
|
- name: "Compile"
|
||||||
|
run: |
|
||||||
|
& 'C:\Program Files (x86)\Inno Setup 6\ISCC.exe' /Qp ".\build\CI\windows\setup.iss"
|
||||||
|
- name: "Publish"
|
||||||
|
if: success()
|
||||||
|
uses: actions/upload-artifact@v2.2.0
|
||||||
|
with:
|
||||||
|
name: "${{ env.FILE_NAME }}-installer"
|
||||||
|
path: build/CI/windows/Output/*.exe
|
||||||
|
release:
|
||||||
|
needs: [macos64, ubuntu64, windows, windows-installer]
|
||||||
|
name: "Create Release"
|
||||||
|
runs-on: [ubuntu-latest]
|
||||||
|
steps:
|
||||||
|
- name: "Checkout plugin"
|
||||||
|
uses: actions/checkout@v2.3.4
|
||||||
|
with:
|
||||||
|
path: plugin/${{ env.PLUGIN_NAME }}
|
||||||
|
- name: Download artifacts
|
||||||
|
uses: actions/download-artifact@v2
|
||||||
|
with:
|
||||||
|
path: artifacts
|
||||||
|
- name: "Package"
|
||||||
|
shell: bash
|
||||||
|
run: |
|
||||||
|
mkdir -p ${{ env.PLUGIN_NAME }}/Linux ${{ env.PLUGIN_NAME }}/MacOs ${{ env.PLUGIN_NAME }}/Windows
|
||||||
|
tar xf artifacts/${{ env.PLUGIN_NAME }}*-linux64.tar.gz/${{ env.PLUGIN_NAME }}*-linux64.tar.gz -C ${{ env.PLUGIN_NAME }}/Linux/
|
||||||
|
mv artifacts/${{ env.PLUGIN_NAME }}*-macos.pkg/${{ env.PLUGIN_NAME }}*-macos.pkg ${{ env.PLUGIN_NAME }}/MacOs/${{ env.PLUGIN_NAME }}.pkg
|
||||||
|
mv ./artifacts/${{ env.PLUGIN_NAME }}*-windows-32bit/* ${{ env.PLUGIN_NAME }}/Windows/
|
||||||
|
mv ./artifacts/${{ env.PLUGIN_NAME }}*-windows-64bit/obs-plugins/* ${{ env.PLUGIN_NAME }}/Windows/obs-plugins
|
||||||
|
mv ./artifacts/${{ env.PLUGIN_NAME }}*-windows-installer/*.exe ${{ env.PLUGIN_NAME }}/Windows/
|
||||||
|
rm ${{ env.PLUGIN_NAME }}/Windows/obs-plugins/32bit/advanced-scene-switcher.pdb
|
||||||
|
rm ${{ env.PLUGIN_NAME }}/Windows/obs-plugins/64bit/advanced-scene-switcher.pdb
|
||||||
|
cp plugin/${{ env.PLUGIN_NAME }}/CI/release/README.txt ${{ env.PLUGIN_NAME }}/
|
||||||
|
FILE_NAME=${{ env.PLUGIN_NAME }}.zip
|
||||||
|
zip -r ${FILE_NAME} ${{ env.PLUGIN_NAME }}/
|
||||||
|
- name: Publish
|
||||||
|
if: success()
|
||||||
|
uses: actions/upload-artifact@v2.2.1
|
||||||
|
with:
|
||||||
|
name: "Release"
|
||||||
|
path: "*.zip"
|
||||||
27
.github/workflows/check-format.yaml
vendored
27
.github/workflows/check-format.yaml
vendored
@@ -1,27 +0,0 @@
|
|||||||
name: Check Code Formatting 🛠️
|
|
||||||
on:
|
|
||||||
workflow_call:
|
|
||||||
jobs:
|
|
||||||
clang-format:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v4
|
|
||||||
with:
|
|
||||||
fetch-depth: 0
|
|
||||||
- name: clang-format check 🐉
|
|
||||||
id: clang-format
|
|
||||||
uses: ./.github/actions/run-clang-format
|
|
||||||
with:
|
|
||||||
failCondition: error
|
|
||||||
|
|
||||||
cmake-format:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v4
|
|
||||||
with:
|
|
||||||
fetch-depth: 0
|
|
||||||
- name: cmake-format check 🎛️
|
|
||||||
id: cmake-format
|
|
||||||
uses: ./.github/actions/run-cmake-format
|
|
||||||
with:
|
|
||||||
failCondition: error
|
|
||||||
19
.github/workflows/clang-format.yml
vendored
Normal file
19
.github/workflows/clang-format.yml
vendored
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
name: Clang Format Check
|
||||||
|
|
||||||
|
on: [push, pull_request]
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
ubuntu64:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- name: Checkout
|
||||||
|
uses: actions/checkout@v2
|
||||||
|
|
||||||
|
- name: Install clang format
|
||||||
|
run: |
|
||||||
|
sudo apt-get install -y clang-format-10
|
||||||
|
|
||||||
|
- name: Check the Formatting
|
||||||
|
run: |
|
||||||
|
./CI/formatcode.sh
|
||||||
|
./CI/check-format.sh
|
||||||
107
.github/workflows/codeql.yml
vendored
Normal file
107
.github/workflows/codeql.yml
vendored
Normal file
@@ -0,0 +1,107 @@
|
|||||||
|
name: "CodeQL"
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches: [master]
|
||||||
|
pull_request:
|
||||||
|
# The branches below must be a subset of the branches above
|
||||||
|
branches: [master]
|
||||||
|
|
||||||
|
env:
|
||||||
|
OBS_TAG: 27.2.0
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
analyze:
|
||||||
|
name: Analyze
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
permissions:
|
||||||
|
actions: read
|
||||||
|
contents: read
|
||||||
|
security-events: write
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: Checkout
|
||||||
|
uses: actions/checkout@v2.3.4
|
||||||
|
with:
|
||||||
|
repository: obsproject/obs-studio
|
||||||
|
submodules: "recursive"
|
||||||
|
ref: "refs/tags/${{ env.OBS_TAG }}"
|
||||||
|
- name: "Checkout plugin"
|
||||||
|
uses: actions/checkout@v2.3.4
|
||||||
|
with:
|
||||||
|
path: UI/frontend-plugins/SceneSwitcher
|
||||||
|
submodules: "recursive"
|
||||||
|
- name: Initialize CodeQL
|
||||||
|
uses: github/codeql-action/init@v1
|
||||||
|
with:
|
||||||
|
languages: cpp
|
||||||
|
- name: Add plugin to obs cmake
|
||||||
|
shell: bash
|
||||||
|
run: echo "add_subdirectory(SceneSwitcher)" >> UI/frontend-plugins/CMakeLists.txt
|
||||||
|
- name: Fetch Git Tags
|
||||||
|
run: git fetch --prune --tags --unshallow
|
||||||
|
- name: Install prerequisites (Apt)
|
||||||
|
shell: bash
|
||||||
|
run: |
|
||||||
|
sudo dpkg --add-architecture amd64
|
||||||
|
sudo apt-get -qq update
|
||||||
|
sudo apt-get install -y \
|
||||||
|
build-essential \
|
||||||
|
checkinstall \
|
||||||
|
cmake \
|
||||||
|
libasound2-dev \
|
||||||
|
libavcodec-dev \
|
||||||
|
libavdevice-dev \
|
||||||
|
libavfilter-dev \
|
||||||
|
libavformat-dev \
|
||||||
|
libavutil-dev \
|
||||||
|
libcurl4-openssl-dev \
|
||||||
|
libfdk-aac-dev \
|
||||||
|
libfontconfig-dev \
|
||||||
|
libfreetype6-dev \
|
||||||
|
libgl1-mesa-dev \
|
||||||
|
libjack-jackd2-dev \
|
||||||
|
libjansson-dev \
|
||||||
|
libluajit-5.1-dev \
|
||||||
|
libpulse-dev \
|
||||||
|
libqt5x11extras5-dev \
|
||||||
|
libspeexdsp-dev \
|
||||||
|
libswresample-dev \
|
||||||
|
libswscale-dev \
|
||||||
|
libudev-dev \
|
||||||
|
libv4l-dev \
|
||||||
|
libva-dev \
|
||||||
|
libvlc-dev \
|
||||||
|
libx11-dev \
|
||||||
|
libx264-dev \
|
||||||
|
libxcb-randr0-dev \
|
||||||
|
libxcb-shm0-dev \
|
||||||
|
libxcb-xinerama0-dev \
|
||||||
|
libxcomposite-dev \
|
||||||
|
libxinerama-dev \
|
||||||
|
libxtst-dev \
|
||||||
|
libmbedtls-dev \
|
||||||
|
pkg-config \
|
||||||
|
python3-dev \
|
||||||
|
qtbase5-dev \
|
||||||
|
qtbase5-private-dev \
|
||||||
|
libqt5svg5-dev \
|
||||||
|
swig \
|
||||||
|
libxss-dev \
|
||||||
|
libx11-xcb-dev \
|
||||||
|
libxcb-xfixes0-dev \
|
||||||
|
libopencv-dev \
|
||||||
|
libprocps-dev \
|
||||||
|
libpci-dev
|
||||||
|
- name: "Configure"
|
||||||
|
shell: bash
|
||||||
|
run: |
|
||||||
|
mkdir ./build
|
||||||
|
cd ./build
|
||||||
|
cmake -DENABLE_PIPEWIRE=OFF -DUNIX_STRUCTURE=0 -DCMAKE_INSTALL_PREFIX="${{ github.workspace }}/obs-studio-portable" -DWITH_RTMPS=OFF -DBUILD_BROWSER=OFF ..
|
||||||
|
- name: "Build"
|
||||||
|
shell: bash
|
||||||
|
working-directory: ${{ github.workspace }}/build
|
||||||
|
run: make -j4
|
||||||
|
- name: Perform CodeQL Analysis
|
||||||
|
uses: github/codeql-action/analyze@v1
|
||||||
18
.github/workflows/dispatch.yaml
vendored
18
.github/workflows/dispatch.yaml
vendored
@@ -1,18 +0,0 @@
|
|||||||
name: Dispatch
|
|
||||||
run-name: Dispatched Repository Actions - ${{ inputs.job }} ⌛️
|
|
||||||
on:
|
|
||||||
workflow_dispatch:
|
|
||||||
inputs:
|
|
||||||
job:
|
|
||||||
description: Dispatch job to run
|
|
||||||
required: true
|
|
||||||
type: choice
|
|
||||||
options:
|
|
||||||
- build
|
|
||||||
permissions:
|
|
||||||
contents: write
|
|
||||||
jobs:
|
|
||||||
check-and-build:
|
|
||||||
if: inputs.job == 'build'
|
|
||||||
uses: ./.github/workflows/build-project.yaml
|
|
||||||
secrets: inherit
|
|
||||||
18
.github/workflows/locale-check.yml
vendored
18
.github/workflows/locale-check.yml
vendored
@@ -1,26 +1,14 @@
|
|||||||
name: Check locale
|
name: Check locale
|
||||||
|
|
||||||
on:
|
on: [push, pull_request]
|
||||||
push:
|
|
||||||
branches:
|
|
||||||
- master
|
|
||||||
tags:
|
|
||||||
- '*'
|
|
||||||
paths:
|
|
||||||
- 'data/locale/**'
|
|
||||||
pull_request:
|
|
||||||
branches:
|
|
||||||
- master
|
|
||||||
paths:
|
|
||||||
- 'data/locale/**'
|
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
ubuntu64:
|
ubuntu64:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v2
|
||||||
|
|
||||||
- name: Check locale files
|
- name: Check locale files
|
||||||
run: |
|
run: |
|
||||||
python3 ./build-aux/CI/check-locale.py -p data/locale/
|
python3 ./CI/checkLocale.py -p data/locale/
|
||||||
|
|||||||
27
.github/workflows/pr-pull.yaml
vendored
27
.github/workflows/pr-pull.yaml
vendored
@@ -1,27 +0,0 @@
|
|||||||
name: Pull Request
|
|
||||||
run-name: ${{ github.event.pull_request.title }} pull request run 🚀
|
|
||||||
on:
|
|
||||||
workflow_dispatch:
|
|
||||||
pull_request:
|
|
||||||
paths-ignore:
|
|
||||||
- '**.md'
|
|
||||||
branches: [master, main]
|
|
||||||
types: [ opened, synchronize, reopened ]
|
|
||||||
permissions:
|
|
||||||
contents: read
|
|
||||||
concurrency:
|
|
||||||
group: '${{ github.workflow }} @ ${{ github.event.pull_request.head.label || github.head_ref || github.ref }}'
|
|
||||||
cancel-in-progress: true
|
|
||||||
jobs:
|
|
||||||
check-format:
|
|
||||||
name: Check Formatting 🔍
|
|
||||||
uses: ./.github/workflows/check-format.yaml
|
|
||||||
permissions:
|
|
||||||
contents: read
|
|
||||||
|
|
||||||
build-project:
|
|
||||||
name: Build Project 🧱
|
|
||||||
uses: ./.github/workflows/build-project.yaml
|
|
||||||
secrets: inherit
|
|
||||||
permissions:
|
|
||||||
contents: read
|
|
||||||
122
.github/workflows/push.yaml
vendored
122
.github/workflows/push.yaml
vendored
@@ -1,122 +0,0 @@
|
|||||||
name: Push to master
|
|
||||||
run-name: ${{ github.ref_name }} push run 🚀
|
|
||||||
on:
|
|
||||||
push:
|
|
||||||
branches:
|
|
||||||
- master
|
|
||||||
- main
|
|
||||||
- 'release/**'
|
|
||||||
tags:
|
|
||||||
- '*'
|
|
||||||
permissions:
|
|
||||||
contents: write
|
|
||||||
concurrency:
|
|
||||||
group: '${{ github.workflow }} @ ${{ github.ref }}'
|
|
||||||
cancel-in-progress: ${{ github.ref_type == 'tag' }}
|
|
||||||
jobs:
|
|
||||||
check-format:
|
|
||||||
name: Check Formatting 🔍
|
|
||||||
if: github.ref_name == 'master'
|
|
||||||
uses: ./.github/workflows/check-format.yaml
|
|
||||||
permissions:
|
|
||||||
contents: read
|
|
||||||
|
|
||||||
build-project:
|
|
||||||
name: Build Project 🧱
|
|
||||||
uses: ./.github/workflows/build-project.yaml
|
|
||||||
secrets: inherit
|
|
||||||
permissions:
|
|
||||||
contents: read
|
|
||||||
|
|
||||||
create-release:
|
|
||||||
name: Create Release 🛫
|
|
||||||
if: github.ref_type == 'tag'
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
needs: build-project
|
|
||||||
defaults:
|
|
||||||
run:
|
|
||||||
shell: bash
|
|
||||||
steps:
|
|
||||||
- name: Check Release Tag ☑️
|
|
||||||
id: check
|
|
||||||
run: |
|
|
||||||
: Check Release Tag ☑️
|
|
||||||
if [[ "${RUNNER_DEBUG}" ]]; then set -x; fi
|
|
||||||
shopt -s extglob
|
|
||||||
|
|
||||||
case "${GITHUB_REF_NAME}" in
|
|
||||||
+([0-9]).+([0-9]).+([0-9]) )
|
|
||||||
echo 'validTag=true' >> $GITHUB_OUTPUT
|
|
||||||
echo 'prerelease=false' >> $GITHUB_OUTPUT
|
|
||||||
echo "version=${GITHUB_REF_NAME}" >> $GITHUB_OUTPUT
|
|
||||||
;;
|
|
||||||
+([0-9]).+([0-9]).+([0-9])-@(beta|rc)*([0-9]) )
|
|
||||||
echo 'validTag=true' >> $GITHUB_OUTPUT
|
|
||||||
echo 'prerelease=true' >> $GITHUB_OUTPUT
|
|
||||||
echo "version=${GITHUB_REF_NAME}" >> $GITHUB_OUTPUT
|
|
||||||
;;
|
|
||||||
*) echo 'validTag=false' >> $GITHUB_OUTPUT ;;
|
|
||||||
esac
|
|
||||||
|
|
||||||
- name: Download Build Artifacts 📥
|
|
||||||
uses: actions/download-artifact@v4
|
|
||||||
if: fromJSON(steps.check.outputs.validTag)
|
|
||||||
id: download
|
|
||||||
|
|
||||||
- name: Rename Files 🏷️
|
|
||||||
if: fromJSON(steps.check.outputs.validTag)
|
|
||||||
run: |
|
|
||||||
: Rename Files 🏷️
|
|
||||||
if [[ "${RUNNER_DEBUG}" ]]; then set -x; fi
|
|
||||||
shopt -s extglob
|
|
||||||
shopt -s nullglob
|
|
||||||
|
|
||||||
root_dir="$(pwd)"
|
|
||||||
commit_hash="${GITHUB_SHA:0:9}"
|
|
||||||
|
|
||||||
variants=(
|
|
||||||
'windows-x64;zip|exe'
|
|
||||||
'macos-universal;tar.xz|pkg'
|
|
||||||
'ubuntu-24.04-x86_64;tar.xz|deb|ddeb'
|
|
||||||
'sources;tar.xz'
|
|
||||||
)
|
|
||||||
|
|
||||||
for variant_data in "${variants[@]}"; do
|
|
||||||
IFS=';' read -r variant suffix <<< "${variant_data}"
|
|
||||||
|
|
||||||
candidates=(*-${variant}-${commit_hash}/@(*|*-dbgsym).@(${suffix}))
|
|
||||||
|
|
||||||
for candidate in "${candidates[@]}"; do
|
|
||||||
mv "${candidate}" "${root_dir}"
|
|
||||||
done
|
|
||||||
done
|
|
||||||
|
|
||||||
- name: Generate Checksums 🪪
|
|
||||||
if: fromJSON(steps.check.outputs.validTag)
|
|
||||||
run: |
|
|
||||||
: Generate Checksums 🪪
|
|
||||||
if [[ "${RUNNER_DEBUG}" ]]; then set -x; fi
|
|
||||||
shopt -s extglob
|
|
||||||
|
|
||||||
echo "### Checksums" > ${{ github.workspace }}/CHECKSUMS.txt
|
|
||||||
for file in ${{ github.workspace }}/@(*.exe|*.deb|*.ddeb|*.pkg|*.tar.xz|*.zip); do
|
|
||||||
echo " ${file##*/}: $(sha256sum "${file}" | cut -d " " -f 1)" >> ${{ github.workspace }}/CHECKSUMS.txt
|
|
||||||
done
|
|
||||||
|
|
||||||
- name: Create Release 🛫
|
|
||||||
if: fromJSON(steps.check.outputs.validTag)
|
|
||||||
id: create_release
|
|
||||||
uses: softprops/action-gh-release@d4e8205d7e959a9107da6396278b2f1f07af0f9b
|
|
||||||
with:
|
|
||||||
draft: true
|
|
||||||
prerelease: ${{ fromJSON(steps.check.outputs.prerelease) }}
|
|
||||||
tag_name: ${{ steps.check.outputs.version }}
|
|
||||||
name: ${{ needs.build-project.outputs.pluginName }} ${{ steps.check.outputs.version }}
|
|
||||||
body_path: ${{ github.workspace }}/CHECKSUMS.txt
|
|
||||||
files: |
|
|
||||||
${{ github.workspace }}/*.exe
|
|
||||||
${{ github.workspace }}/*.zip
|
|
||||||
${{ github.workspace }}/*.pkg
|
|
||||||
${{ github.workspace }}/*.deb
|
|
||||||
${{ github.workspace }}/*.ddeb
|
|
||||||
${{ github.workspace }}/*.tar.xz
|
|
||||||
134
.gitignore
vendored
134
.gitignore
vendored
@@ -1,41 +1,107 @@
|
|||||||
# Exclude everything
|
# Prerequisites #
|
||||||
/*
|
#################
|
||||||
|
*.d
|
||||||
|
|
||||||
# Except for default project files
|
# Object files #
|
||||||
!/.github
|
################
|
||||||
!/build-aux
|
*.o
|
||||||
!/cmake
|
*.ko
|
||||||
!/data
|
*.obj
|
||||||
!/deps
|
*.elf
|
||||||
!/scripting
|
*.slo
|
||||||
!/forms
|
*.lo
|
||||||
!/lib
|
*.obj
|
||||||
!/module
|
|
||||||
!/plugins
|
|
||||||
!/tests
|
|
||||||
!.clang-format
|
|
||||||
!.cmake-format.json
|
|
||||||
!.gitattributes
|
|
||||||
!.gitignore
|
|
||||||
!.pre-commit-config.yaml
|
|
||||||
!BUILDING.md
|
|
||||||
!buildspec.json
|
|
||||||
!CMakeLists.txt
|
|
||||||
!CMakePresets.json
|
|
||||||
!LICENSE
|
|
||||||
!README.md
|
|
||||||
|
|
||||||
# Exclude .orig leftovers
|
# Linker output #
|
||||||
*.orig
|
#################
|
||||||
|
*.ilk
|
||||||
|
*.map
|
||||||
|
*.exp
|
||||||
|
|
||||||
# Exclude lock files
|
# Precompiled Headers #
|
||||||
*.lock.json
|
#######################
|
||||||
|
*.gch
|
||||||
|
*.pch
|
||||||
|
|
||||||
# Exclude macOS legacy resource forks
|
# Libraries #
|
||||||
|
#############
|
||||||
|
*.lib
|
||||||
|
*.a
|
||||||
|
*.la
|
||||||
|
*.lo
|
||||||
|
*.lai
|
||||||
|
|
||||||
|
# Shared objects (inc. Windows DLLs) #
|
||||||
|
######################################
|
||||||
|
*.dll
|
||||||
|
*.so
|
||||||
|
*.so.*
|
||||||
|
*.dylib
|
||||||
|
|
||||||
|
# Executables #
|
||||||
|
###############
|
||||||
|
*.exe
|
||||||
|
*.out
|
||||||
|
*.app
|
||||||
|
*.i*86
|
||||||
|
*.x86_64
|
||||||
|
*.hex
|
||||||
|
|
||||||
|
# Debug files #
|
||||||
|
###############
|
||||||
|
*.dSYM/
|
||||||
|
*.su
|
||||||
|
*.idb
|
||||||
|
*.pdb
|
||||||
|
|
||||||
|
# CMake temp files #
|
||||||
|
####################
|
||||||
|
CMakeLists.txt.user
|
||||||
|
CMakeCache.txt
|
||||||
|
CMakeFiles
|
||||||
|
CMakeScripts
|
||||||
|
Testing
|
||||||
|
Makefile
|
||||||
|
cmake_install.cmake
|
||||||
|
install_manifest.txt
|
||||||
|
compile_commands.json
|
||||||
|
CTestTestfile.cmake_install
|
||||||
|
|
||||||
|
# OS generated files #
|
||||||
|
######################
|
||||||
.DS_Store
|
.DS_Store
|
||||||
|
.DS_Store?
|
||||||
|
._*
|
||||||
|
.Spotlight-V100
|
||||||
|
.Trashes
|
||||||
|
ehthumbs.db
|
||||||
|
Thumbs.db
|
||||||
|
*.directory
|
||||||
|
|
||||||
# Exclude CMake build number cache
|
# backup text files generated by an editor #
|
||||||
/cmake/.CMakeBuildNumber
|
############################################
|
||||||
|
**/*~
|
||||||
|
|
||||||
# Exclude python caches
|
# Various IDE Files #
|
||||||
/**/__pycache__
|
#####################
|
||||||
|
.classpath
|
||||||
|
.project
|
||||||
|
.settings
|
||||||
|
.idea
|
||||||
|
.metadata
|
||||||
|
*.iml
|
||||||
|
*.ipr
|
||||||
|
*.sublime*
|
||||||
|
.vscode/*
|
||||||
|
!.vscode/settings.json
|
||||||
|
!.vscode/tasks.json
|
||||||
|
!.vscode/launch.json
|
||||||
|
!.vscode/extensions.json
|
||||||
|
!.vscode/*.code-snippets
|
||||||
|
.history/
|
||||||
|
*.vsix
|
||||||
|
forms/advanced-scene-switcher.ui.autosave
|
||||||
|
|
||||||
|
# Directories #
|
||||||
|
###############
|
||||||
|
build/
|
||||||
|
|||||||
18
.gitmodules
vendored
18
.gitmodules
vendored
@@ -10,21 +10,3 @@
|
|||||||
[submodule "deps/openvr"]
|
[submodule "deps/openvr"]
|
||||||
path = deps/openvr
|
path = deps/openvr
|
||||||
url = https://github.com/ValveSoftware/openvr.git
|
url = https://github.com/ValveSoftware/openvr.git
|
||||||
[submodule "deps/leptonica"]
|
|
||||||
path = deps/leptonica
|
|
||||||
url = https://github.com/DanBloomberg/leptonica.git
|
|
||||||
[submodule "deps/tesseract"]
|
|
||||||
path = deps/tesseract
|
|
||||||
url = https://github.com/tesseract-ocr/tesseract.git
|
|
||||||
[submodule "deps/libremidi"]
|
|
||||||
path = deps/libremidi
|
|
||||||
url = https://github.com/jcelerier/libremidi.git
|
|
||||||
[submodule "deps/cpp-httplib"]
|
|
||||||
path = deps/cpp-httplib
|
|
||||||
url = https://github.com/yhirose/cpp-httplib.git
|
|
||||||
[submodule "deps/json"]
|
|
||||||
path = deps/json
|
|
||||||
url = https://github.com/nlohmann/json.git
|
|
||||||
[submodule "deps/libusb"]
|
|
||||||
path = deps/libusb
|
|
||||||
url = https://github.com/libusb/libusb.git
|
|
||||||
|
|||||||
@@ -1,24 +0,0 @@
|
|||||||
repos:
|
|
||||||
- repo: https://github.com/pre-commit/mirrors-clang-format
|
|
||||||
rev: v16.0.6
|
|
||||||
hooks:
|
|
||||||
- id: clang-format
|
|
||||||
args: [-fallback-style=none]
|
|
||||||
types_or: [c++, c]
|
|
||||||
exclude: |
|
|
||||||
(?x)^(
|
|
||||||
deps/.*|
|
|
||||||
tests/catch\.hpp|
|
|
||||||
.*\.mm
|
|
||||||
)$
|
|
||||||
|
|
||||||
- repo: https://github.com/cheshirekow/cmake-format-precommit
|
|
||||||
rev: v0.6.13
|
|
||||||
hooks:
|
|
||||||
- id: cmake-format
|
|
||||||
|
|
||||||
- repo: https://github.com/astral-sh/ruff-pre-commit
|
|
||||||
rev: v0.3.2
|
|
||||||
hooks:
|
|
||||||
- id: ruff-format
|
|
||||||
types_or: [python]
|
|
||||||
265
BUILDING.md
265
BUILDING.md
@@ -4,218 +4,149 @@ You have the option to ...
|
|||||||
- either add the plugin to the OBS source tree directly and build the plugin while building OBS itself. (**in tree**)
|
- either add the plugin to the OBS source tree directly and build the plugin while building OBS itself. (**in tree**)
|
||||||
- or you can move the sources of this plugin outside of the OBS source tree and build it separately from OBS. (**out of tree**)
|
- or you can move the sources of this plugin outside of the OBS source tree and build it separately from OBS. (**out of tree**)
|
||||||
|
|
||||||
Both methods require [CMake](https://cmake.org/download/).
|
As both methods require you to have a working [OBS Studio development environment](https://obsproject.com/wiki/install-instructions), [Qt](https://download.qt.io/official_releases/qt/5.15/5.15.2/) and [CMake](https://cmake.org/download/) it is recommended to build the plugin in tree as it is easier to set up and will enable straightforward debugging.
|
||||||
|
|
||||||
The plugin can be compiled for OBS 27 and above, although using the latest version of OBS is recommended to support all features.
|
Note that your Qt install must include the QtConcurrent module.
|
||||||
|
|
||||||
## Compiling in tree (recommended for development)
|
|
||||||
This section assumes that you have a working [OBS Studio development environment](https://obsproject.com/wiki/Building-OBS-Studio).
|
|
||||||
|
|
||||||
|
## Compiling in tree (recommended)
|
||||||
Add the "SceneSwitcher" source directory to your obs-studio source directory under obs-studio/UI/frontend-plugins/:
|
Add the "SceneSwitcher" source directory to your obs-studio source directory under obs-studio/UI/frontend-plugins/:
|
||||||
```
|
```
|
||||||
cd obs-studio/UI/frontend-plugins/
|
cd obs-studio/UI/frontend-plugins/
|
||||||
git clone --recursive https://github.com/WarmUpTill/SceneSwitcher.git
|
git clone --recursive https://github.com/WarmUpTill/SceneSwitcher.git
|
||||||
```
|
```
|
||||||
|
|
||||||
Then modify the obs-studio/UI/frontend-plugins/CMakeLists.txt Example and add an entry for the scene switcher:
|
Then modify the obs-studio/UI/frontend-plugins/CMakeLists.txt file and add an entry for the scene switcher:
|
||||||
```
|
```
|
||||||
add_subdirectory(SceneSwitcher)
|
add_subdirectory(SceneSwitcher)
|
||||||
```
|
```
|
||||||
|
|
||||||
Now follow the [build instructions for obs-studio](https://obsproject.com/wiki/Building-OBS-Studio) for your particular platform.
|
Now follow the [build instructions for obs-studio](https://obsproject.com/wiki/install-instructions) for your particular platform.
|
||||||
|
|
||||||
### Dependencies for plugins
|
|
||||||
|
|
||||||
Note that on Linux systems it might be necessary to additionally install the following packages to fulfill the dependencies to `XTest`, `XScreensaver` and `OpenCV` - exact command may differ:
|
Note that on Linux systems it might be necessary to additionally install the following packages to fulfill the dependencies to `XTest`, `XScreensaver` and `OpenCV` - exact command may differ:
|
||||||
```
|
```
|
||||||
sudo apt-get install \
|
sudo apt-get install \
|
||||||
libxtst-dev \
|
libxtst-dev \
|
||||||
libxss-dev \
|
libxss-dev \
|
||||||
libprocps-dev \
|
|
||||||
libopencv-dev
|
libopencv-dev
|
||||||
```
|
```
|
||||||
|
|
||||||
If you have decided to build some dependencies of the plugin yourself (e.g. `OpenCV` for the video condition) you will have to pass the corresponding arguments to the cmake command used to configure OBS.
|
|
||||||
|
|
||||||
Here is an example of what the adjusted command might look like on a Windows machine:
|
|
||||||
```
|
|
||||||
cd obs-studio
|
|
||||||
cmake -DOpenCV_DIR="C:/Users/BuildUser/Documents/OBS/opencv/build/" -DLeptonica_DIR="C:/Users/BuildUser/Documents/OBS/leptonica/build" -DTesseract_DIR="C:/Users/BuildUser/Documents/OBS/tesseract/build/lib/cmake/tesseract" --preset windows-x64
|
|
||||||
```
|
|
||||||
|
|
||||||
## Compiling out of tree
|
## Compiling out of tree
|
||||||
|
### Prerequisites
|
||||||
First you will need to clone the plugin sources by running the following command:
|
You'll need [Qt](https://download.qt.io/official_releases/qt/5.15/5.15.2/), [CMake](https://cmake.org/download/) and a working [OBS Studio development environment](https://obsproject.com/wiki/install-instructions) installed on your computer.
|
||||||
|
Once you've set this up, do the following:
|
||||||
```
|
```
|
||||||
git clone --recursive https://github.com/WarmUpTill/SceneSwitcher.git
|
git clone --recursive https://github.com/WarmUpTill/SceneSwitcher.git
|
||||||
```
|
|
||||||
|
|
||||||
Next you will need [CMake](https://cmake.org/download/) and run it with suitable arguments for your particular platform.
|
|
||||||
For example, on Windows you might want to run this command:
|
|
||||||
```
|
|
||||||
cd SceneSwitcher
|
cd SceneSwitcher
|
||||||
cmake --preset windows-x64
|
mkdir build && cd build
|
||||||
```
|
|
||||||
Next, you can build the plugin and install the files into a folder named release using the following commands:
|
|
||||||
```
|
|
||||||
cmake --build build_x64 --preset windows-x64 --config RelWithDebInfo
|
|
||||||
cmake --install build_x64 --prefix release --config RelWithDebInfo
|
|
||||||
```
|
|
||||||
You can of course also build the plugin in an IDE depending on which generator you chose. (E.g. a Visual Studio solution on Windows)
|
|
||||||
|
|
||||||
### Dependencies for plugins
|
|
||||||
|
|
||||||
If you also want to include plugins which depend on external libraries you will have to adjust the cmake call in the configuration phase accordingly.
|
|
||||||
For example, to include the "Video" condition in your build you will have to supply the paths to `OpenCV`, `tesseract`, and `leptonica` binaries.
|
|
||||||
|
|
||||||
On a Window system the command might look something like this:
|
|
||||||
```
|
|
||||||
cd SceneSwitcher
|
|
||||||
cmake -DOpenCV_DIR="C:/Users/BuildUser/Documents/OBS/opencv/build/" -DLeptonica_DIR="C:/Users/BuildUser/Documents/OBS/leptonica/build" -DTesseract_DIR="C:/Users/BuildUser/Documents/OBS/tesseract/build/lib/cmake/tesseract" --preset windows-x64
|
|
||||||
```
|
```
|
||||||
|
|
||||||
You can rely on the CI scripts to build the dependencies for you, although it is not guaranteed that they will function in every environment:
|
### Windows
|
||||||
|
In cmake-gui, you'll have to set these CMake variables :
|
||||||
|
- **BUILD_OUT_OF_TREE** (bool) : true
|
||||||
|
|
||||||
| Platform | Command |
|
- **LIBOBS_LIB** (filepath) : location of the obs.lib file
|
||||||
| ----------- | ----------- |
|
- **LIBOBS_INCLUDE_DIR** (path) : location of the libobs subfolder in the source
|
||||||
| Windows | `.\.github\scripts\Build-Deps-Windows.ps1` |
|
code of OBS Studio, located at [source_directory]/libobs/.
|
||||||
| Linux | `./.github/scripts/build-deps-linux.sh` |
|
|
||||||
| MacOS | `./.github/scripts/build-deps-macos.zsh` |
|
- **LIBOBS_FRONTEND_API_LIB** (filepath) : location of the obs-frontend-api.lib file
|
||||||
|
(usually in the same place as LIBOBS_LIB)
|
||||||
|
- **LIBOBS_FRONTEND_INCLUDE_DIR** (path) : location of the obs-frontend-api
|
||||||
|
subfolder in the source code of OBS Studio, located at [source_directory]/UI/obs-frontend-api.
|
||||||
|
|
||||||
|
- **CURL_LIBRARY** (filepath) : location of the libcurl.lib file
|
||||||
|
(part of the dependencies2019/win64/bin folder used to build OBS)
|
||||||
|
- **CURL_INCLUDE_DIR** (path) : location of the curl
|
||||||
|
subfolder in OBS dependencies folder: ".../dependencies2019/win64/include/"
|
||||||
|
|
||||||
|
|
||||||
# Contributing
|
Assuming that you set up Qt via QT installer:
|
||||||
|
- **Qt5Core_DIR** (path) : C:/Qt/5.15.2/msvc2019_64/lib/cmake/Qt5Core
|
||||||
|
- **Qt5Gui_DIR** (path): C:/Qt/5.15.2/msvc2019_64/lib/cmake/Qt5Gui
|
||||||
|
- **Qt5Widgets_DIR** (path) : C:/Qt/5.15.2/msvc2019_64/lib/cmake/Qt5Widgets
|
||||||
|
|
||||||
Contributions to the plugin are always welcome and if you need any assistance do not hesitate to reach out!
|
Just keep hitting configure until all the vars are filled out. Then hit generate.
|
||||||
|
|
||||||
If you would like to expand upon the macro system by adding a new condition or action type have a look at the examples in `plugins/base`.
|
|
||||||
In general changes in the `lib/legacy` folder should be avoided, if possible.
|
|
||||||
|
|
||||||
## Macro condition
|
|
||||||
Macro conditions should inherit from the `MacroCondition` class and must implement the following functions:
|
|
||||||
|
|
||||||
|
### Linux
|
||||||
|
Install dependencies `XTest`, `XScreensaver` and `OpenCV` - exact command may differ:
|
||||||
```
|
```
|
||||||
class MacroConditionExample : public MacroCondition {
|
sudo apt-get install \
|
||||||
public:
|
libxtst-dev \
|
||||||
MacroConditionExample(Macro *m) : MacroCondition(m) {}
|
libxss-dev \
|
||||||
// This function should perform the condition check
|
libopencv-dev
|
||||||
bool CheckCondition();
|
|
||||||
// This function should store the required condition data to "data"
|
|
||||||
// For example called on OBS shutdown
|
|
||||||
bool Save(obs_data_t *data);
|
|
||||||
// This function should load the condition data from "data"
|
|
||||||
// For example called on OBS startup
|
|
||||||
bool Load(obs_data_t *data);
|
|
||||||
// This function should return a unique id for this condition type
|
|
||||||
// The _id is defined below
|
|
||||||
std::string GetId() { return _id; };
|
|
||||||
// Helper function called when new conditions are created
|
|
||||||
// Will be used later when registering the new condition type
|
|
||||||
static std::shared_ptr<MacroCondition> Create(Macro *m)
|
|
||||||
{
|
|
||||||
return std::make_shared<MacroConditionExample>(m);
|
|
||||||
}
|
|
||||||
|
|
||||||
private:
|
|
||||||
// Used to register new condition type
|
|
||||||
static bool _registered;
|
|
||||||
// Unique id identifying this condition type
|
|
||||||
static const std::string _id;
|
|
||||||
};
|
|
||||||
```
|
|
||||||
When defining the widget used to control the settings of the condition type, a static `Create()` method is required.
|
|
||||||
It will be called whenever a new condition MacroConditionExample is created. (See `MacroConditionFactory::Register()`)
|
|
||||||
```
|
|
||||||
class MacroConditionExampleEdit : public QWidget {
|
|
||||||
Q_OBJECT
|
|
||||||
|
|
||||||
public:
|
|
||||||
// ...
|
|
||||||
MacroConditionExampleEdit(
|
|
||||||
QWidget *parent,
|
|
||||||
std::shared_ptr<MacroConditionExample> cond = nullptr);
|
|
||||||
|
|
||||||
// Function will be used to create the widget for editing the settings of the condition
|
|
||||||
static QWidget *Create(QWidget *parent,
|
|
||||||
std::shared_ptr<MacroCondition> cond)
|
|
||||||
{
|
|
||||||
return new MacroConditionExampleEdit(
|
|
||||||
parent,
|
|
||||||
std::dynamic_pointer_cast<MacroConditionExample>(cond));
|
|
||||||
}
|
|
||||||
// ...
|
|
||||||
};
|
|
||||||
```
|
```
|
||||||
|
|
||||||
To finally register the new condition type you will have to add the following call to `MacroConditionFactory::Register()`.
|
Most versions of Linux you can use cmake-gui or the command line.
|
||||||
|
|
||||||
|
**For the command line:**
|
||||||
```
|
```
|
||||||
bool MacroConditionExample::_registered = MacroConditionFactory::Register(
|
# [...] are placeholders
|
||||||
MacroConditionExample::id, // Unique string identifying this condition type
|
cmake -DBUILD_OUT_OF_TREE=1 \
|
||||||
{
|
-DLIBOBS_INCLUDE_DIR=[...]/obs-studio/libobs/ \
|
||||||
MacroConditionExample::Create, // Function called to create the object performing the condition
|
-DLIBOBS_LIB=[...]/libobs.so \
|
||||||
MacroConditionExampleEdit::Create, // Function called to create the widget to configure the settings
|
-DLIBOBS_FRONTEND_INCLUDE_DIR=[...]/obs-studio/UI/obs-frontend-api/ \
|
||||||
"AdvSceneSwitcher.condition.example", // User facing name of the condition type (will be translated)
|
-DLIBOBS_FRONTEND_API_LIB=[...]/libobs-frontend-api.so \
|
||||||
true // Condition type supports duration modifiers (default true)
|
-DCMAKE_INSTALL_PREFIX=/usr ..
|
||||||
}
|
make -j4
|
||||||
);
|
sudo make install
|
||||||
```
|
```
|
||||||
|
|
||||||
## Macro action
|
For cmake-gui you'll have to set the following variables:
|
||||||
|
- **BUILD_OUT_OF_TREE** (bool) : true
|
||||||
|
- **LIBOBS_INCLUDE_DIR** (path) : location of the libobs subfolder in the source
|
||||||
|
code of OBS Studio, located at [source_directory]/libobs/.
|
||||||
|
- **LIBOBS_LIB** (filepath) : location of the libobs.so file (usually CMake finds
|
||||||
|
this, but if not it'll usually be in /usr/lib/libobs.so)
|
||||||
|
- **LIBOBS_FRONTEND_API_LIB** (filepath) : location of the libobs-frontend-api.so
|
||||||
|
file (usually in the same place as LIBOBS_LIB)
|
||||||
|
- **LIBOBS_FRONTEND_INCLUDE_DIR** (path) : location of the obs-frontend-api
|
||||||
|
subfolder in the source code of OBS Studio, located at
|
||||||
|
[source_directory]/UI/obs-frontend-api.
|
||||||
|
|
||||||
The process of adding a new action type is very similar to adding a new condition.
|
Assuming that you installed Qt via your system package manager, it should be
|
||||||
The differences are highlighted in the comments below.
|
found automatically. If not, then usually you'll find it in something like:
|
||||||
|
- **Qt5Core_DIR** (path) : /usr/lib64/cmake/Qt5Core
|
||||||
|
- **Qt5Gui_DIR** (path): /usr/lib64/cmake/Qt5Gui
|
||||||
|
- **Qt5Widgets_DIR** (path) : /usr/lib64/cmake/Qt5Widgets
|
||||||
|
|
||||||
```
|
Just keep hitting configure until all the vars are filled out. Then hit generate.
|
||||||
class MacroActionExample : public MacroAction {
|
|
||||||
public:
|
|
||||||
MacroActionExample(Macro *m) : MacroAction(m) {}
|
|
||||||
static std::shared_ptr<MacroAction> Create(Macro *m);
|
|
||||||
// Used to create a copy of the action (used for action queues)
|
|
||||||
std::shared_ptr<MacroAction> Copy() const;
|
|
||||||
// This function should perform the action
|
|
||||||
// If false is returned the macro will aborted
|
|
||||||
bool PerformAction();
|
|
||||||
bool Save(obs_data_t *data);
|
|
||||||
bool Load(obs_data_t *data);
|
|
||||||
std::string GetId() { return _id; };
|
|
||||||
// Optional:
|
|
||||||
// Might be called when action is inserted to action queue
|
|
||||||
void ResolveVariablesToFixedValues();
|
|
||||||
|
|
||||||
private:
|
Then open a terminal in the build folder and type:
|
||||||
static bool _registered;
|
|
||||||
static const std::string _id;
|
|
||||||
};
|
|
||||||
```
|
```
|
||||||
|
make -j4
|
||||||
|
sudo make install
|
||||||
```
|
```
|
||||||
class MacroActionExampleEdit : public QWidget {
|
NOTE: The Linux version of this plugin is dependent on libXScrnSaver, libcurl and libXtst.
|
||||||
Q_OBJECT
|
|
||||||
|
|
||||||
public:
|
### OS X
|
||||||
// ...
|
In cmake-gui, you'll have to set these CMake variables :
|
||||||
MacroActionExampleEdit(
|
- **BUILD_OUT_OF_TREE** (bool) : true
|
||||||
QWidget *parent,
|
- **LIBOBS_INCLUDE_DIR** (path) : location of the libobs subfolder in the source
|
||||||
std::shared_ptr<MacroActionExample> entryData = nullptr);
|
code of OBS Studio, located at [source_directory]/libobs/.
|
||||||
static QWidget *Create(QWidget *parent,
|
- **LIBOBS_LIB** (filepath) : location of the libobs.0.dylib file (usually
|
||||||
std::shared_ptr<MacroAction> action)
|
in /Applications/OBS.app/Contents/Resources/bin/libobs.0.dylib)
|
||||||
{
|
- **LIBOBS_FRONTEND_API_LIB** (filepath) : location of the libobs-frontend-api.0.dylib
|
||||||
return new MacroActionExampleEdit(
|
file (usually in usually in /Applications/OBS.app/Contents/Resources/bin/libobs-frontend-api.0.dylib)
|
||||||
parent,
|
- **LIBOBS_FRONTEND_INCLUDE_DIR** (path) : location of the obs-frontend-api subfolder
|
||||||
std::dynamic_pointer_cast<MacroActionExample>(action));
|
in the source code of OBS Studio, located at [source_directory]/UI/obs-frontend-api.
|
||||||
}
|
|
||||||
// ...
|
Assuming that you installed Qt via the regular Qt App way:
|
||||||
};
|
- **Qt5Core_DIR** (path) : Usually /Applications/Qt/5.10.1/clang_64/lib/cmake/Qt5Core
|
||||||
|
- **Qt5Widgets_DIR** (path) : Usually /Applications/Qt/5.10.1/clang_64/lib/cmake/Qt5Widgets
|
||||||
|
- **Qt5MacExtras_DIR** (path) : Usually /Applications/Qt/5.10.1/clang_64/lib/cmake/Qt5MacExtras
|
||||||
|
|
||||||
|
|
||||||
|
Just keep hitting configure until all the vars are filled out. Then hit generate.
|
||||||
|
|
||||||
|
Open xcode (or a terminal, depending on the build type you chose), build and copy
|
||||||
|
the advanced-scene-switcher.so file to 'Library/Application Support/obs-studio/plugins/advanced-scene-switcher/bin/'
|
||||||
|
And the 'data' folder to 'Library/Application Support/obs-studio/plugins/advanced-scene-switcher/'.
|
||||||
|
|
||||||
|
Note that you might have to adjust the library search paths using the install_name_tool if you want the plugin to run on machines other than your build machine:
|
||||||
```
|
```
|
||||||
|
install_name_tool -change @rpath/libobs-frontend-api.dylib @executable_path/../Frameworks/libobs-frontend-api.dylib UI/frontend-plugins/SceneSwitcher/advanced-scene-switcher.so
|
||||||
|
install_name_tool -change @rpath/libobs.0.dylib @executable_path/../Frameworks/libobs.0.dylib UI/frontend-plugins/SceneSwitcher/advanced-scene-switcher.so
|
||||||
|
install_name_tool -change /usr/local/opt/qt5/lib/QtWidgets.framework/Versions/5/QtWidgets @executable_path/../Frameworks/QtWidgets.framework/Versions/5/QtWidgets UI/frontend-plugins/SceneSwitcher/advanced-scene-switcher.so
|
||||||
|
install_name_tool -change /usr/local/opt/qt5/lib/QtGui.framework/Versions/5/QtGui @executable_path/../Frameworks/QtGui.framework/Versions/5/QtGui UI/frontend-plugins/SceneSwitcher/advanced-scene-switcher.so
|
||||||
|
install_name_tool -change /usr/local/opt/qt5/lib/QtCore.framework/Versions/5/QtCore @executable_path/../Frameworks/QtCore.framework/Versions/5/QtCore UI/frontend-plugins/SceneSwitcher/advanced-scene-switcher.so
|
||||||
```
|
```
|
||||||
MacroActionFactory::Register(
|
|
||||||
MacroActionExample::id, // Unique string identifying this action type
|
|
||||||
{
|
|
||||||
MacroActionExample::Create, // Function called to create the object performing the action
|
|
||||||
MacroActionExampleEdit::Create, // Function called to create the widget to configure the settings
|
|
||||||
"AdvSceneSwitcher.action.example" // User facing name of the action type
|
|
||||||
}
|
|
||||||
);
|
|
||||||
```
|
|
||||||
## External dependencies
|
|
||||||
If your intention is to add macro functionality which depends on external libraries, which might not exist on all user environments, have a look at the folders in the `plugins/` directory, which are not named `base`.
|
|
||||||
For example, `plugins/video` will only be loaded if the `OpenCV` dependencies are met.
|
|
||||||
|
|||||||
11
CI/check-format.sh
Executable file
11
CI/check-format.sh
Executable file
@@ -0,0 +1,11 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
dirty=$(git ls-files --modified)
|
||||||
|
|
||||||
|
set +x
|
||||||
|
if [[ $dirty ]]; then
|
||||||
|
echo "================================="
|
||||||
|
echo "Files were not formatted properly"
|
||||||
|
echo "$dirty"
|
||||||
|
echo "================================="
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
93
CI/checkLocale.py
Normal file
93
CI/checkLocale.py
Normal file
@@ -0,0 +1,93 @@
|
|||||||
|
#!/usr/bin/env python3
|
||||||
|
|
||||||
|
import os
|
||||||
|
import sys
|
||||||
|
import argparse
|
||||||
|
|
||||||
|
defaultLocaleFile = "en-US.ini"
|
||||||
|
|
||||||
|
|
||||||
|
class localeEntry:
|
||||||
|
locale = ""
|
||||||
|
placeholders = []
|
||||||
|
|
||||||
|
def __init__(self, locale, widgets) -> None:
|
||||||
|
self.locale = locale
|
||||||
|
self.placeholders = widgets
|
||||||
|
|
||||||
|
|
||||||
|
def getNonDefaultLocales(dir):
|
||||||
|
files = []
|
||||||
|
for filename in os.listdir(dir):
|
||||||
|
f = os.path.join(dir, filename)
|
||||||
|
if os.path.isfile(f) and not f.endswith(defaultLocaleFile):
|
||||||
|
files.append(f)
|
||||||
|
return files
|
||||||
|
|
||||||
|
|
||||||
|
def getAllLocaleEntriesWithWidgetPlaceholders(file):
|
||||||
|
localeEntries = []
|
||||||
|
with open(file, 'r', encoding='UTF-8') as f:
|
||||||
|
for line in f.readlines():
|
||||||
|
widgetPlaceholders = []
|
||||||
|
for word in line.split("{{"):
|
||||||
|
if not "}}" in word:
|
||||||
|
continue
|
||||||
|
word = "{{" + word[:word.rfind("}}")] + "}}"
|
||||||
|
widgetPlaceholders.append(word)
|
||||||
|
localeEntries.append(localeEntry(
|
||||||
|
line.split("=")[0], widgetPlaceholders))
|
||||||
|
return localeEntries
|
||||||
|
|
||||||
|
|
||||||
|
def getLocaleEntryFrom(entry, list):
|
||||||
|
for element in list:
|
||||||
|
if element.locale == entry.locale:
|
||||||
|
return element
|
||||||
|
return None
|
||||||
|
|
||||||
|
|
||||||
|
def checkWidgetPlacehodlers(file, expectedPlaceholders):
|
||||||
|
localeEntries = getAllLocaleEntriesWithWidgetPlaceholders(file)
|
||||||
|
result = True
|
||||||
|
for localeEntry in localeEntries:
|
||||||
|
expectedEntry = getLocaleEntryFrom(localeEntry, expectedPlaceholders)
|
||||||
|
if expectedEntry is None:
|
||||||
|
print(
|
||||||
|
"WARNING: Locale entry \"{}\" from \"{}\" not found in \"{}\"".format(localeEntry.locale, file, defaultLocaleFile))
|
||||||
|
continue
|
||||||
|
for p in localeEntry.placeholders:
|
||||||
|
if p not in expectedEntry.placeholders:
|
||||||
|
print("WARNING: Locale entry \"{}\" from \"{}\" does contain \"{}\" while \"{}\" does not".format(
|
||||||
|
localeEntry.locale, file, p, defaultLocaleFile))
|
||||||
|
for p in expectedEntry.placeholders:
|
||||||
|
if p not in localeEntry.placeholders:
|
||||||
|
result = False
|
||||||
|
print("ERROR: Locale entry \"{}\" from \"{}\" does not contain \"{}\"".format(
|
||||||
|
localeEntry.locale, file, p))
|
||||||
|
return result
|
||||||
|
|
||||||
|
|
||||||
|
def main():
|
||||||
|
parser = argparse.ArgumentParser(
|
||||||
|
description='Checks for inconsistencies regarding widget placeholders in the different locale files.')
|
||||||
|
parser.add_argument(
|
||||||
|
'-p', '--path', help='Path to locale folder', required=True)
|
||||||
|
args = parser.parse_args()
|
||||||
|
|
||||||
|
placeholders = getAllLocaleEntriesWithWidgetPlaceholders(
|
||||||
|
os.path.join(args.path, defaultLocaleFile))
|
||||||
|
nonDefaultLocales = getNonDefaultLocales(args.path)
|
||||||
|
|
||||||
|
result = True
|
||||||
|
for f in nonDefaultLocales:
|
||||||
|
if checkWidgetPlacehodlers(f, placeholders) == False:
|
||||||
|
result = False
|
||||||
|
if result == False:
|
||||||
|
sys.exit(1)
|
||||||
|
print("SUCCESS: No issues found!")
|
||||||
|
sys.exit(0)
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
main()
|
||||||
35
CI/formatcode.sh
Executable file
35
CI/formatcode.sh
Executable file
@@ -0,0 +1,35 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
# Original source https://github.com/Project-OSRM/osrm-backend/blob/master/scripts/format.sh
|
||||||
|
|
||||||
|
set +x
|
||||||
|
set -o errexit
|
||||||
|
set -o pipefail
|
||||||
|
set -o nounset
|
||||||
|
|
||||||
|
SCRIPTPATH="$( cd -- "$(dirname "$0")" >/dev/null 2>&1 ; pwd -P )"
|
||||||
|
|
||||||
|
# Runs the Clang Formatter in parallel on the code base.
|
||||||
|
# Return codes:
|
||||||
|
# - 1 there are files to be formatted
|
||||||
|
# - 0 everything looks fine
|
||||||
|
|
||||||
|
# Get CPU count
|
||||||
|
OS=$(uname)
|
||||||
|
NPROC=1
|
||||||
|
if [[ $OS = "Linux" || $OS = "Darwin" ]] ; then
|
||||||
|
NPROC=$(getconf _NPROCESSORS_ONLN)
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Discover clang-format
|
||||||
|
if type clang-format-10 2> /dev/null ; then
|
||||||
|
CLANG_FORMAT=clang-format-10
|
||||||
|
elif type clang-format-8 2> /dev/null ; then
|
||||||
|
CLANG_FORMAT=clang-format-8
|
||||||
|
else
|
||||||
|
CLANG_FORMAT=clang-format
|
||||||
|
fi
|
||||||
|
|
||||||
|
find $SCRIPTPATH/.. -type d \( -path $SCRIPTPATH/../deps \
|
||||||
|
-o -path $SCRIPTPATH/../cmake \
|
||||||
|
-o -path $SCRIPTPATH/../build \) -prune -type f -o -name '*.h' -or -name '*.hpp' -or -name '*.m' -or -name '*.mm' -or -name '*.c' -or -name '*.cpp' \
|
||||||
|
| xargs -L100 -P${NPROC} ${CLANG_FORMAT} -i -style=file -fallback-style=none
|
||||||
@@ -7,7 +7,7 @@ Build-Depends: cmake,
|
|||||||
libcurl4-openssl-dev,
|
libcurl4-openssl-dev,
|
||||||
libobs-dev,
|
libobs-dev,
|
||||||
libxtst-dev,
|
libxtst-dev,
|
||||||
qt6-base-dev,
|
qtbase5-dev,
|
||||||
libxss-dev,
|
libxss-dev,
|
||||||
libopencv-dev
|
libopencv-dev
|
||||||
Standards-Version: 4.6.0
|
Standards-Version: 4.6.0
|
||||||
@@ -3,7 +3,7 @@
|
|||||||
|
|
||||||
export DEB_BUILD_MAINT_OPTIONS = hardening=+all
|
export DEB_BUILD_MAINT_OPTIONS = hardening=+all
|
||||||
|
|
||||||
export QT_SELECT = qt6
|
export QT_SELECT = qt5
|
||||||
|
|
||||||
%:
|
%:
|
||||||
dh $@
|
dh $@
|
||||||
5
CI/macos/Brewfile
Normal file
5
CI/macos/Brewfile
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
brew "jack"
|
||||||
|
brew "speexdsp"
|
||||||
|
brew "cmake"
|
||||||
|
brew "freetype"
|
||||||
|
brew "fdk-aac"
|
||||||
1097
CI/macos/SceneSwitcher.pkgproj
Normal file
1097
CI/macos/SceneSwitcher.pkgproj
Normal file
File diff suppressed because it is too large
Load Diff
75
CI/release/README.txt
Normal file
75
CI/release/README.txt
Normal file
@@ -0,0 +1,75 @@
|
|||||||
|
Note that you will have to use OBS version 27 or newer!
|
||||||
|
|
||||||
|
--- Windows ---
|
||||||
|
Recommended: Run the provided installer. (You might have to click 'More info' and select 'Run anyway' if it is blocked by Windows)
|
||||||
|
|
||||||
|
Alternatively manually copy the 'obs-plugins' and 'data' folders in the respective OBS Studio installation directory.
|
||||||
|
It is usually located at 'C:\Program Files (x86)\obs-studio\'.
|
||||||
|
Remember to install the Visual C++ Redistributable for Visual Studio 2019, if you have not done so already. (See plugin overview page)
|
||||||
|
|
||||||
|
--- macOS ---
|
||||||
|
Run the provided installer. (You might have to right-click or control-click and select 'open' if it is blocked)
|
||||||
|
|
||||||
|
--- Linux ---
|
||||||
|
Note that the plugin has dependencies to:
|
||||||
|
* libXss
|
||||||
|
* libopencv-imgproc
|
||||||
|
* libopencv-objdetect
|
||||||
|
Optional:
|
||||||
|
* libXtst
|
||||||
|
* libcurl
|
||||||
|
|
||||||
|
If you are using snap you can install the following package for an OBS installation which comes bundled with the plugin:
|
||||||
|
sudo snap install obs-studio
|
||||||
|
|
||||||
|
The plugin is also available via the Flatpak package manager for users who installed OBS via Flatpak:
|
||||||
|
flatpak install com.obsproject.Studio.Plugin.SceneSwitcher
|
||||||
|
|
||||||
|
If you have installed OBS via other means, it is most likely necessary to install the plugin manually.
|
||||||
|
To do so copy the advanced-scene-switcher.so file and into the OBS Studio plugin folder.
|
||||||
|
The location of this folder can vary, so you might have to look around a bit.
|
||||||
|
|
||||||
|
Examples are ...
|
||||||
|
/usr/lib/obs-plugins/
|
||||||
|
/usr/lib/x86_64-linux-gnu/obs-plugins/
|
||||||
|
/usr/share/obs/obs-plugins/
|
||||||
|
~/.config/obs-studio/plugins/advanced-scene-switcher/bin/64bit/
|
||||||
|
~/.local/share/flatpak/app/com.obsproject.Studio/x86_64/stable/active/files/lib/obs-plugins/
|
||||||
|
/var/lib/flatpak/app/com.obsproject.Studio/x86_64/stable/active/files/lib/obs-plugins/
|
||||||
|
|
||||||
|
Unfortunately the expected location of the "locale" and "res" folder, which can be found in the data folder, can vary also.
|
||||||
|
The data folder usually should be copied to "~/.config/obs-studio/plugins/advanced-scene-switcher/" and reflect the following structure:
|
||||||
|
|
||||||
|
/home/user/.config/obs-studio/plugins/
|
||||||
|
└── advanced-scene-switcher
|
||||||
|
├── bin
|
||||||
|
│ └── 64bit
|
||||||
|
│ └── advanced-scene-switcher.so
|
||||||
|
└── data
|
||||||
|
├── locale
|
||||||
|
│ ├── de-DE.ini
|
||||||
|
│ ├── en-US.ini
|
||||||
|
│ ├── ru-RU.ini
|
||||||
|
│ └── zh-CN.ini
|
||||||
|
└── res
|
||||||
|
├── cascadeClassifiers
|
||||||
|
│ ├── haarcascade_eye_tree_eyeglasses.xml
|
||||||
|
│ ├── haarcascade_eye.xml
|
||||||
|
│ ├── haarcascade_frontalface_alt2.xml
|
||||||
|
│ ├── haarcascade_frontalface_alt_tree.xml
|
||||||
|
│ ├── haarcascade_frontalface_alt.xml
|
||||||
|
│ ├── haarcascade_frontalface_default.xml
|
||||||
|
│ ├── haarcascade_fullbody.xml
|
||||||
|
│ ├── haarcascade_lefteye_2splits.xml
|
||||||
|
│ ├── haarcascade_lowerbody.xml
|
||||||
|
│ ├── haarcascade_profileface.xml
|
||||||
|
│ ├── haarcascade_righteye_2splits.xml
|
||||||
|
│ └── haarcascade_upperbody.xml
|
||||||
|
└── time.svg
|
||||||
|
|
||||||
|
If this does not work you can try to copy the "locale" folder found inside the data folder to:
|
||||||
|
/usr/share/obs/obs-plugins/advanced-scene-switcher/locale
|
||||||
|
~/.local/share/flatpak/app/com.obsproject.Studio/x86_64/stable/active/files/share/obs/obs-plugins/advanced-scene-switcher/locale
|
||||||
|
/var/lib/flatpak/app/com.obsproject.Studio/x86_64/stable/active/files/share/obs/obs-plugins/advanced-scene-switcher/locale
|
||||||
|
|
||||||
|
In doubt, please check where other "en-US.ini" files are located on your system.
|
||||||
64
CI/windows/setup.iss.in
Normal file
64
CI/windows/setup.iss.in
Normal file
@@ -0,0 +1,64 @@
|
|||||||
|
; Script generated by the Inno Setup Script Wizard.
|
||||||
|
; SEE THE DOCUMENTATION FOR DETAILS ON CREATING INNO SETUP SCRIPT FILES!
|
||||||
|
|
||||||
|
#define MyAppName "Advanced Scene Switcher"
|
||||||
|
#define MyAppVersion "@GIT_SHA1@"
|
||||||
|
#define MyAppURL "https://github.com/WarmUpTill/SceneSwitcher"
|
||||||
|
|
||||||
|
[Setup]
|
||||||
|
; NOTE: The value of AppId uniquely identifies this application. Do not use the same AppId value in installers for other applications.
|
||||||
|
; (To generate a new GUID, click Tools | Generate GUID inside the IDE.)
|
||||||
|
AppId={{A4ADDF26-4426-4D2E-B26A-C7C878DA8FC9}
|
||||||
|
AppName={#MyAppName}
|
||||||
|
AppVersion={#MyAppVersion}
|
||||||
|
AppPublisherURL={#MyAppURL}
|
||||||
|
AppSupportURL={#MyAppURL}
|
||||||
|
AppUpdatesURL={#MyAppURL}
|
||||||
|
DefaultDirName={code:GetDefaultDirectory}
|
||||||
|
DefaultGroupName={#MyAppName}
|
||||||
|
AllowNoIcons=yes
|
||||||
|
; Uncomment the following line to run in non administrative install mode (install for current user only.)
|
||||||
|
;PrivilegesRequired=lowest
|
||||||
|
OutputBaseFilename=AdvancedSceneSwitcherSetup
|
||||||
|
Compression=lzma
|
||||||
|
SolidCompression=yes
|
||||||
|
WizardStyle=modern
|
||||||
|
ArchitecturesInstallIn64BitMode=x64
|
||||||
|
|
||||||
|
[Languages]
|
||||||
|
Name: "english"; MessagesFile: "compiler:Default.isl"
|
||||||
|
|
||||||
|
[Files]
|
||||||
|
Source: "@ISS_MSVC_REDIST_HELPER_DIR@\msvc-redist-helper-64.exe"; DestDir: "{app}"; DestName: "msvc-redist-helper.exe"; Flags: ignoreversion dontcopy; Check: Is64BitInstallMode
|
||||||
|
Source: "@ISS_MSVC_REDIST_HELPER_DIR@\msvc-redist-helper-32.exe"; DestDir: "{app}"; DestName: "msvc-redist-helper.exe"; Flags: ignoreversion dontcopy; Check: not Is64BitInstallMode
|
||||||
|
Source: "@ISS_PLUGIN_FILES_DIR@\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs
|
||||||
|
; NOTE: Don't use "Flags: ignoreversion" on any shared system files
|
||||||
|
|
||||||
|
[Icons]
|
||||||
|
Name: "{group}\{cm:UninstallProgram,{#MyAppName}}"; Filename: "{uninstallexe}"
|
||||||
|
|
||||||
|
[Code]
|
||||||
|
function GetDefaultDirectory(Value: String): String;
|
||||||
|
var
|
||||||
|
sInstallPath: String;
|
||||||
|
begin
|
||||||
|
sInstallPath := Value;
|
||||||
|
if (sInstallPath = '') then
|
||||||
|
RegQueryStringValue(HKLM64, 'SOFTWARE\OBS Studio', '', sInstallPath);
|
||||||
|
if (sInstallPath = '') then
|
||||||
|
RegQueryStringValue(HKCU64, 'SOFTWARE\OBS Studio', '', sInstallPath);
|
||||||
|
if (sInstallPath = '') then
|
||||||
|
sInstallPath := ExpandConstant('{commonpf}\obs-studio');
|
||||||
|
Result := sInstallPath
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure CurStepChanged(CurStep: TSetupStep);
|
||||||
|
var
|
||||||
|
ResultCode: Integer;
|
||||||
|
begin
|
||||||
|
if (CurStep=ssPostInstall) then
|
||||||
|
begin
|
||||||
|
ExtractTemporaryFile('msvc-redist-helper.exe');
|
||||||
|
Exec(ExpandConstant('{tmp}\msvc-redist-helper.exe'), '2019', '', SW_HIDE, ewWaitUntilTerminated, ResultCode);
|
||||||
|
end;
|
||||||
|
end;
|
||||||
877
CMakeLists.txt
877
CMakeLists.txt
@@ -1,481 +1,444 @@
|
|||||||
cmake_minimum_required(VERSION 3.16...3.26)
|
cmake_minimum_required(VERSION 3.14)
|
||||||
|
project(advanced-scene-switcher)
|
||||||
|
|
||||||
project(advanced-scene-switcher VERSION 1.0.0)
|
if(NOT CMAKE_BUILD_TYPE)
|
||||||
|
set(CMAKE_BUILD_TYPE RELWITHDEBINFO)
|
||||||
|
endif()
|
||||||
|
|
||||||
message(STATUS "CMAKE_PROJECT_NAME is ${CMAKE_PROJECT_NAME}")
|
# Compiler settings
|
||||||
if(${CMAKE_PROJECT_NAME} STREQUAL "obs-studio")
|
set(CMAKE_CXX_STANDARD 17)
|
||||||
if(NOT DEFINED BUILD_OUT_OF_TREE)
|
set(CMAKE_CXX_STANDARD_REQUIRED YES)
|
||||||
message(STATUS "${PROJECT_NAME} configured for in-tree build")
|
set(CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS ON)
|
||||||
|
|
||||||
|
if(CMAKE_COMPILER_IS_GNUCC
|
||||||
|
OR CMAKE_COMPILER_IS_GNUCXX
|
||||||
|
OR CMAKE_COMPILER_IS_CLANG)
|
||||||
|
set(CMAKE_CXX_FLAGS
|
||||||
|
"-Wall -Wextra -Wvla -Wno-unused-function -Wno-missing-field-initializers ${CMAKE_CXX_FLAGS} -fno-strict-aliasing"
|
||||||
|
)
|
||||||
|
set(CMAKE_C_FLAGS
|
||||||
|
"-Wall -Wextra -Wvla -Wno-unused-function -Werror-implicit-function-declaration -Wno-missing-braces -Wno-missing-field-initializers ${CMAKE_C_FLAGS} -std=gnu99 -fno-strict-aliasing"
|
||||||
|
)
|
||||||
|
|
||||||
|
option(USE_LIBC++ "Use libc++ instead of libstdc++" ${APPLE})
|
||||||
|
if(USE_LIBC++)
|
||||||
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -stdlib=libc++")
|
||||||
endif()
|
endif()
|
||||||
else()
|
elseif(MSVC)
|
||||||
set(BUILD_OUT_OF_TREE ON)
|
if(CMAKE_CXX_FLAGS MATCHES "/W[0-4]")
|
||||||
message(STATUS "${PROJECT_NAME} configured for out-of-tree build")
|
string(REGEX REPLACE "/W[0-4]" "/W4" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}")
|
||||||
|
else()
|
||||||
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /W4")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
# Disable pointless constant condition warnings
|
||||||
|
set(CMAKE_CXX_FLAGS
|
||||||
|
"${CMAKE_CXX_FLAGS} /wd4127 /wd4201 /wd4456 /wd4457 /wd4458 /wd4459 /wd4595"
|
||||||
|
)
|
||||||
|
add_definitions(-DUNICODE -D_UNICODE -D_CRT_SECURE_NO_WARNINGS
|
||||||
|
-D_CRT_NONSTDC_NO_WARNINGS)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if(BUILD_OUT_OF_TREE)
|
# Generate version info
|
||||||
include("${CMAKE_CURRENT_SOURCE_DIR}/cmake/common/bootstrap.cmake"
|
list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake/")
|
||||||
NO_POLICY_SCOPE)
|
include(GetGitRevisionDescription)
|
||||||
include(compilerconfig)
|
|
||||||
include(defaults)
|
|
||||||
include(helpers)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
# OBS 31 no longer defines find_qt so check if we need to include it for in-tree
|
|
||||||
# builds
|
|
||||||
if(NOT COMMAND find_qt)
|
|
||||||
include("${CMAKE_CURRENT_SOURCE_DIR}/cmake/common/helpers_common.cmake")
|
|
||||||
endif()
|
|
||||||
|
|
||||||
set(LIB_NAME "${PROJECT_NAME}-lib")
|
|
||||||
add_library(${PROJECT_NAME} MODULE)
|
|
||||||
add_library(${LIB_NAME} SHARED)
|
|
||||||
|
|
||||||
include(cmake/common/get_git_revision_description.cmake)
|
|
||||||
get_git_head_revision(GIT_REFSPEC GIT_SHA1)
|
get_git_head_revision(GIT_REFSPEC GIT_SHA1)
|
||||||
git_describe(GIT_TAG)
|
git_describe(GIT_TAG)
|
||||||
configure_file("${CMAKE_CURRENT_SOURCE_DIR}/cmake/common/version.cpp.in"
|
configure_file("${CMAKE_CURRENT_SOURCE_DIR}/cmake/version.cpp.in"
|
||||||
"${CMAKE_CURRENT_BINARY_DIR}/lib/version.cpp" @ONLY)
|
"${CMAKE_CURRENT_BINARY_DIR}/src/version.cpp" @ONLY)
|
||||||
|
|
||||||
# --- Set target sources ---
|
# Windows installer
|
||||||
|
if(WIN32)
|
||||||
# Module sources
|
get_filename_component(ISS_PLUGIN_FILES_DIR
|
||||||
target_sources(${PROJECT_NAME} PRIVATE module/advanced-scene-switcher-module.c)
|
"${CMAKE_BINARY_DIR}\\..\\package" ABSOLUTE)
|
||||||
|
file(TO_NATIVE_PATH "${ISS_PLUGIN_FILES_DIR}" ISS_PLUGIN_FILES_DIR)
|
||||||
# Generic sources
|
get_filename_component(ISS_MSVC_REDIST_HELPER_DIR "${CMAKE_BINARY_DIR}\\.."
|
||||||
target_sources(
|
ABSOLUTE)
|
||||||
${LIB_NAME}
|
file(TO_NATIVE_PATH "${ISS_MSVC_REDIST_HELPER_DIR}"
|
||||||
PRIVATE lib/advanced-scene-switcher.cpp
|
ISS_MSVC_REDIST_HELPER_DIR)
|
||||||
lib/advanced-scene-switcher.hpp
|
configure_file("${CMAKE_CURRENT_SOURCE_DIR}/CI/windows/setup.iss.in"
|
||||||
lib/general.cpp
|
"${CMAKE_CURRENT_BINARY_DIR}/CI/windows/setup.iss" @ONLY)
|
||||||
lib/platform-funcs.hpp
|
|
||||||
lib/switcher-data.cpp
|
|
||||||
lib/switcher-data.hpp
|
|
||||||
lib/version.cpp
|
|
||||||
lib/version.h)
|
|
||||||
|
|
||||||
# Legacy function sources
|
|
||||||
target_sources(
|
|
||||||
${LIB_NAME}
|
|
||||||
PRIVATE lib/legacy/scene-group.cpp
|
|
||||||
lib/legacy/scene-group.hpp
|
|
||||||
lib/legacy/switch-audio.cpp
|
|
||||||
lib/legacy/switch-audio.hpp
|
|
||||||
lib/legacy/switch-executable.cpp
|
|
||||||
lib/legacy/switch-executable.hpp
|
|
||||||
lib/legacy/switch-file.cpp
|
|
||||||
lib/legacy/switch-file.hpp
|
|
||||||
lib/legacy/switch-generic.cpp
|
|
||||||
lib/legacy/switch-generic.hpp
|
|
||||||
lib/legacy/switch-idle.cpp
|
|
||||||
lib/legacy/switch-idle.hpp
|
|
||||||
lib/legacy/switch-media.cpp
|
|
||||||
lib/legacy/switch-media.hpp
|
|
||||||
lib/legacy/switch-pause.cpp
|
|
||||||
lib/legacy/switch-pause.hpp
|
|
||||||
lib/legacy/switch-random.cpp
|
|
||||||
lib/legacy/switch-random.hpp
|
|
||||||
lib/legacy/switch-screen-region.cpp
|
|
||||||
lib/legacy/switch-screen-region.hpp
|
|
||||||
lib/legacy/switch-sequence.cpp
|
|
||||||
lib/legacy/switch-sequence.hpp
|
|
||||||
lib/legacy/switch-time.cpp
|
|
||||||
lib/legacy/switch-time.hpp
|
|
||||||
lib/legacy/switch-transitions.cpp
|
|
||||||
lib/legacy/switch-transitions.hpp
|
|
||||||
lib/legacy/switch-video.cpp
|
|
||||||
lib/legacy/switch-video.hpp
|
|
||||||
lib/legacy/switch-window.cpp
|
|
||||||
lib/legacy/switch-window.hpp)
|
|
||||||
|
|
||||||
# Maro sources
|
|
||||||
target_sources(
|
|
||||||
${LIB_NAME}
|
|
||||||
PRIVATE lib/macro/macro-action-edit.cpp
|
|
||||||
lib/macro/macro-action-edit.hpp
|
|
||||||
lib/macro/macro-action-factory.cpp
|
|
||||||
lib/macro/macro-action-factory.hpp
|
|
||||||
lib/macro/macro-action-macro.cpp
|
|
||||||
lib/macro/macro-action-macro.hpp
|
|
||||||
lib/macro/macro-action-queue.cpp
|
|
||||||
lib/macro/macro-action-queue.hpp
|
|
||||||
lib/macro/macro-action-script.cpp
|
|
||||||
lib/macro/macro-action-script.hpp
|
|
||||||
lib/macro/macro-action-variable.cpp
|
|
||||||
lib/macro/macro-action-variable.hpp
|
|
||||||
lib/macro/macro-action.cpp
|
|
||||||
lib/macro/macro-action.hpp
|
|
||||||
lib/macro/macro-condition-edit.cpp
|
|
||||||
lib/macro/macro-condition-edit.hpp
|
|
||||||
lib/macro/macro-condition-factory.cpp
|
|
||||||
lib/macro/macro-condition-factory.hpp
|
|
||||||
lib/macro/macro-condition-macro.cpp
|
|
||||||
lib/macro/macro-condition-macro.hpp
|
|
||||||
lib/macro/macro-condition-queue.cpp
|
|
||||||
lib/macro/macro-condition-queue.hpp
|
|
||||||
lib/macro/macro-condition-script.cpp
|
|
||||||
lib/macro/macro-condition-script.hpp
|
|
||||||
lib/macro/macro-condition-tempvar.cpp
|
|
||||||
lib/macro/macro-condition-tempvar.hpp
|
|
||||||
lib/macro/macro-condition-variable.cpp
|
|
||||||
lib/macro/macro-condition-variable.hpp
|
|
||||||
lib/macro/macro-condition.cpp
|
|
||||||
lib/macro/macro-condition.hpp
|
|
||||||
lib/macro/macro-dock.cpp
|
|
||||||
lib/macro/macro-dock.hpp
|
|
||||||
lib/macro/macro-export-import-dialog.cpp
|
|
||||||
lib/macro/macro-export-import-dialog.hpp
|
|
||||||
lib/macro/macro-helpers.cpp
|
|
||||||
lib/macro/macro-helpers.hpp
|
|
||||||
lib/macro/macro-input.cpp
|
|
||||||
lib/macro/macro-input.hpp
|
|
||||||
lib/macro/macro-list.cpp
|
|
||||||
lib/macro/macro-list.hpp
|
|
||||||
lib/macro/macro-ref.cpp
|
|
||||||
lib/macro/macro-ref.hpp
|
|
||||||
lib/macro/macro-run-button.cpp
|
|
||||||
lib/macro/macro-run-button.hpp
|
|
||||||
lib/macro/macro-script-handler.cpp
|
|
||||||
lib/macro/macro-script-handler.hpp
|
|
||||||
lib/macro/macro-segment-copy-paste.cpp
|
|
||||||
lib/macro/macro-segment-copy-paste.hpp
|
|
||||||
lib/macro/macro-segment-list.cpp
|
|
||||||
lib/macro/macro-segment-list.hpp
|
|
||||||
lib/macro/macro-segment-script.cpp
|
|
||||||
lib/macro/macro-segment-script.hpp
|
|
||||||
lib/macro/macro-segment-selection.cpp
|
|
||||||
lib/macro/macro-segment-selection.hpp
|
|
||||||
lib/macro/macro-segment.cpp
|
|
||||||
lib/macro/macro-segment.hpp
|
|
||||||
lib/macro/macro-selection.cpp
|
|
||||||
lib/macro/macro-selection.hpp
|
|
||||||
lib/macro/macro-settings.cpp
|
|
||||||
lib/macro/macro-settings.hpp
|
|
||||||
lib/macro/macro-tab.cpp
|
|
||||||
lib/macro/macro-tree.cpp
|
|
||||||
lib/macro/macro-tree.hpp
|
|
||||||
lib/macro/macro.cpp
|
|
||||||
lib/macro/macro.hpp)
|
|
||||||
|
|
||||||
# Utility function sources
|
|
||||||
target_sources(
|
|
||||||
${LIB_NAME}
|
|
||||||
PRIVATE lib/queue/action-queue.cpp
|
|
||||||
lib/queue/action-queue.hpp
|
|
||||||
lib/queue/action-queue-tab.cpp
|
|
||||||
lib/queue/action-queue-tab.hpp
|
|
||||||
lib/utils/auto-update-tooltip-label.cpp
|
|
||||||
lib/utils/auto-update-tooltip-label.hpp
|
|
||||||
lib/utils/backup.cpp
|
|
||||||
lib/utils/backup.hpp
|
|
||||||
lib/utils/condition-logic.cpp
|
|
||||||
lib/utils/condition-logic.hpp
|
|
||||||
lib/utils/curl-helper.cpp
|
|
||||||
lib/utils/curl-helper.hpp
|
|
||||||
lib/utils/cursor-shape-changer.cpp
|
|
||||||
lib/utils/cursor-shape-changer.hpp
|
|
||||||
lib/utils/double-slider.cpp
|
|
||||||
lib/utils/double-slider.hpp
|
|
||||||
lib/utils/duration-control.cpp
|
|
||||||
lib/utils/duration-control.hpp
|
|
||||||
lib/utils/duration-modifier.cpp
|
|
||||||
lib/utils/duration-modifier.hpp
|
|
||||||
lib/utils/duration.cpp
|
|
||||||
lib/utils/duration.hpp
|
|
||||||
lib/utils/export-symbol-helper.hpp
|
|
||||||
lib/utils/file-selection.cpp
|
|
||||||
lib/utils/file-selection.hpp
|
|
||||||
lib/utils/filter-combo-box.cpp
|
|
||||||
lib/utils/filter-combo-box.hpp
|
|
||||||
lib/utils/help-icon.hpp
|
|
||||||
lib/utils/help-icon.cpp
|
|
||||||
lib/utils/item-selection-helpers.cpp
|
|
||||||
lib/utils/item-selection-helpers.hpp
|
|
||||||
lib/utils/layout-helpers.cpp
|
|
||||||
lib/utils/layout-helpers.hpp
|
|
||||||
lib/utils/list-controls.cpp
|
|
||||||
lib/utils/list-controls.hpp
|
|
||||||
lib/utils/list-editor.cpp
|
|
||||||
lib/utils/list-editor.hpp
|
|
||||||
lib/utils/log-helper.cpp
|
|
||||||
lib/utils/log-helper.hpp
|
|
||||||
lib/utils/math-helpers.cpp
|
|
||||||
lib/utils/math-helpers.hpp
|
|
||||||
lib/utils/message-buffer.hpp
|
|
||||||
lib/utils/message-dispatcher.hpp
|
|
||||||
lib/utils/mouse-wheel-guard.cpp
|
|
||||||
lib/utils/mouse-wheel-guard.hpp
|
|
||||||
lib/utils/name-dialog.cpp
|
|
||||||
lib/utils/name-dialog.hpp
|
|
||||||
lib/utils/non-modal-dialog.cpp
|
|
||||||
lib/utils/non-modal-dialog.hpp
|
|
||||||
lib/utils/obs-module-helper.cpp
|
|
||||||
lib/utils/obs-module-helper.hpp
|
|
||||||
lib/utils/path-helpers.cpp
|
|
||||||
lib/utils/path-helpers.hpp
|
|
||||||
lib/utils/plugin-state-helpers.cpp
|
|
||||||
lib/utils/plugin-state-helpers.hpp
|
|
||||||
lib/utils/priority-helper.cpp
|
|
||||||
lib/utils/priority-helper.hpp
|
|
||||||
lib/utils/properties-view.cpp
|
|
||||||
lib/utils/properties-view.hpp
|
|
||||||
lib/utils/properties-view.moc.hpp
|
|
||||||
lib/utils/regex-config.cpp
|
|
||||||
lib/utils/regex-config.hpp
|
|
||||||
lib/utils/resizing-text-edit.cpp
|
|
||||||
lib/utils/resizing-text-edit.hpp
|
|
||||||
lib/utils/resource-table.cpp
|
|
||||||
lib/utils/resource-table.hpp
|
|
||||||
lib/utils/resource-table-hotkey-handler.cpp
|
|
||||||
lib/utils/resource-table-hotkey-handler.hpp
|
|
||||||
lib/utils/scene-selection.cpp
|
|
||||||
lib/utils/scene-selection.hpp
|
|
||||||
lib/utils/scene-switch-helpers.cpp
|
|
||||||
lib/utils/scene-switch-helpers.hpp
|
|
||||||
lib/utils/screenshot-helper.cpp
|
|
||||||
lib/utils/screenshot-helper.hpp
|
|
||||||
lib/utils/section.cpp
|
|
||||||
lib/utils/section.hpp
|
|
||||||
lib/utils/selection-helpers.cpp
|
|
||||||
lib/utils/selection-helpers.hpp
|
|
||||||
lib/utils/single-char-selection.cpp
|
|
||||||
lib/utils/single-char-selection.hpp
|
|
||||||
lib/utils/slider-spinbox.cpp
|
|
||||||
lib/utils/slider-spinbox.hpp
|
|
||||||
lib/utils/source-helpers.cpp
|
|
||||||
lib/utils/source-helpers.hpp
|
|
||||||
lib/utils/source-selection.cpp
|
|
||||||
lib/utils/source-selection.hpp
|
|
||||||
lib/utils/splitter-helpers.cpp
|
|
||||||
lib/utils/splitter-helpers.hpp
|
|
||||||
lib/utils/status-control.cpp
|
|
||||||
lib/utils/status-control.hpp
|
|
||||||
lib/utils/string-list.cpp
|
|
||||||
lib/utils/string-list.hpp
|
|
||||||
lib/utils/switch-button.cpp
|
|
||||||
lib/utils/switch-button.hpp
|
|
||||||
lib/utils/sync-helpers.cpp
|
|
||||||
lib/utils/sync-helpers.hpp
|
|
||||||
lib/utils/tab-helpers.cpp
|
|
||||||
lib/utils/tab-helpers.hpp
|
|
||||||
lib/utils/temp-variable.cpp
|
|
||||||
lib/utils/temp-variable.hpp
|
|
||||||
lib/utils/time-helpers.cpp
|
|
||||||
lib/utils/time-helpers.hpp
|
|
||||||
lib/utils/ui-helpers.cpp
|
|
||||||
lib/utils/ui-helpers.hpp
|
|
||||||
lib/utils/utility.cpp
|
|
||||||
lib/utils/utility.hpp
|
|
||||||
lib/utils/volume-control.cpp
|
|
||||||
lib/utils/volume-control.hpp
|
|
||||||
lib/utils/websocket-api.cpp
|
|
||||||
lib/utils/websocket-api.hpp
|
|
||||||
lib/variables/variable-line-edit.cpp
|
|
||||||
lib/variables/variable-line-edit.hpp
|
|
||||||
lib/variables/variable-number.hpp
|
|
||||||
lib/variables/variable-number.tpp
|
|
||||||
lib/variables/variable-spinbox.cpp
|
|
||||||
lib/variables/variable-spinbox.hpp
|
|
||||||
lib/variables/variable-string.cpp
|
|
||||||
lib/variables/variable-string.hpp
|
|
||||||
lib/variables/variable-tab.cpp
|
|
||||||
lib/variables/variable-tab.hpp
|
|
||||||
lib/variables/variable-text-edit.cpp
|
|
||||||
lib/variables/variable-text-edit.hpp
|
|
||||||
lib/variables/variable.cpp
|
|
||||||
lib/variables/variable.hpp)
|
|
||||||
|
|
||||||
# --- End of section ---
|
|
||||||
|
|
||||||
# Subfolder for advanced scene switcher plugins
|
|
||||||
set(ADVSS_PLUGIN_FOLDER "advanced-scene-switcher-plugins")
|
|
||||||
target_compile_definitions(
|
|
||||||
${LIB_NAME} PRIVATE ADVSS_PLUGIN_FOLDER=\"${ADVSS_PLUGIN_FOLDER}\")
|
|
||||||
|
|
||||||
include(cmake/common/advss_helpers.cmake)
|
|
||||||
setup_obs_lib_dependency(${LIB_NAME})
|
|
||||||
setup_obs_lib_dependency(${PROJECT_NAME})
|
|
||||||
|
|
||||||
find_package(Qt6 REQUIRED COMPONENTS Widgets Core)
|
|
||||||
target_link_libraries(${PROJECT_NAME} PRIVATE Qt6::Core Qt6::Widgets)
|
|
||||||
target_link_libraries(${LIB_NAME} PRIVATE Qt6::Core Qt6::Widgets)
|
|
||||||
|
|
||||||
# Ignore QCheckBox::stateChanged deprecation warning until minimum supported Qt
|
|
||||||
# version is at least Qt 6.7, which introduces QCheckBox::checkStateChanged
|
|
||||||
if(Qt6_VERSION VERSION_GREATER "6.0.0")
|
|
||||||
target_compile_definitions(${LIB_NAME} PRIVATE QT_NO_DEPRECATED_WARNINGS)
|
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
target_compile_options(
|
# Out of tree specific settings
|
||||||
${PROJECT_NAME}
|
if(BUILD_OUT_OF_TREE)
|
||||||
PRIVATE
|
set(CMAKE_PREFIX_PATH "${QTDIR}")
|
||||||
$<$<C_COMPILER_ID:Clang,AppleClang>:-Wno-quoted-include-in-framework-header
|
set(CMAKE_INCLUDE_CURRENT_DIR ON)
|
||||||
-Wno-comma>)
|
find_package(Qt5Core REQUIRED)
|
||||||
set_target_properties(
|
find_package(Qt5Widgets REQUIRED)
|
||||||
${PROJECT_NAME}
|
find_package(LibObs)
|
||||||
PROPERTIES AUTOMOC ON
|
find_package(LibObs-frontend-api)
|
||||||
AUTOUIC ON
|
if(LibObs_FOUND)
|
||||||
AUTORCC ON)
|
set(LIBOBS_LIB ${LIBOBS_LIBRARIES})
|
||||||
|
set(LIBOBS_INCLUDE_DIR ${LIBOBS_INCLUDE_DIRS})
|
||||||
target_link_libraries(${PROJECT_NAME} PUBLIC ${LIB_NAME})
|
|
||||||
|
|
||||||
# --- Platform-independent build settings ---
|
|
||||||
|
|
||||||
target_include_directories(
|
|
||||||
${LIB_NAME}
|
|
||||||
PRIVATE "${CMAKE_CURRENT_SOURCE_DIR}/lib"
|
|
||||||
"${CMAKE_CURRENT_SOURCE_DIR}/lib/legacy"
|
|
||||||
"${CMAKE_CURRENT_SOURCE_DIR}/lib/macro"
|
|
||||||
"${CMAKE_CURRENT_SOURCE_DIR}/lib/queue"
|
|
||||||
"${CMAKE_CURRENT_SOURCE_DIR}/lib/utils"
|
|
||||||
"${CMAKE_CURRENT_SOURCE_DIR}/lib/variables"
|
|
||||||
"${CMAKE_CURRENT_BINARY_DIR}/forms")
|
|
||||||
|
|
||||||
set_target_properties(
|
|
||||||
${LIB_NAME}
|
|
||||||
PROPERTIES AUTOMOC ON
|
|
||||||
AUTOUIC ON
|
|
||||||
AUTORCC ON
|
|
||||||
AUTOUIC_SEARCH_PATHS "${CMAKE_CURRENT_SOURCE_DIR}/forms")
|
|
||||||
set_target_properties(${LIB_NAME} PROPERTIES CXX_VISIBILITY_PRESET hidden)
|
|
||||||
|
|
||||||
target_compile_features(${PROJECT_NAME} PUBLIC cxx_std_17)
|
|
||||||
target_compile_features(${LIB_NAME} PUBLIC cxx_std_17)
|
|
||||||
|
|
||||||
target_include_directories(
|
|
||||||
${LIB_NAME} PUBLIC "${CMAKE_CURRENT_SOURCE_DIR}/deps/obs-websocket/lib"
|
|
||||||
"${CMAKE_CURRENT_SOURCE_DIR}/deps/exprtk")
|
|
||||||
|
|
||||||
if(NOT nlohmann_json_DIR
|
|
||||||
AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/deps/json/CMakeLists.txt")
|
|
||||||
add_subdirectory(deps/json)
|
|
||||||
else()
|
|
||||||
find_package(nlohmann_json REQUIRED)
|
|
||||||
endif()
|
|
||||||
target_link_libraries(${LIB_NAME} PUBLIC nlohmann_json::nlohmann_json)
|
|
||||||
|
|
||||||
find_package(CURL QUIET)
|
|
||||||
find_package(Libcurl QUIET)
|
|
||||||
if(CURL_FOUND)
|
|
||||||
if(NOT DEFINED CURL_INCLUDE_DIRS AND TARGET CURL::libcurl)
|
|
||||||
get_target_property(CURL_INCLUDE_DIR CURL::libcurl
|
|
||||||
INTERFACE_INCLUDE_DIRECTORIES)
|
|
||||||
target_include_directories(${LIB_NAME} PUBLIC "${CURL_INCLUDE_DIR}")
|
|
||||||
else()
|
|
||||||
target_include_directories(${LIB_NAME} PUBLIC "${CURL_INCLUDE_DIRS}")
|
|
||||||
endif()
|
endif()
|
||||||
elseif(Libcurl_FOUND)
|
if(LibObs-frontend-api_FOUND)
|
||||||
target_include_directories(${LIB_NAME} PUBLIC "${LIBCURL_INCLUDE_DIRS}")
|
set(LIBOBS_FRONTEND_API_LIB ${LIBOBS-FRONTEND-API_LIBRARIES})
|
||||||
else()
|
set(LIBOBS_FRONTEND_INCLUDE_DIR ${LIBOBS-FRONTEND-API_INCLUDE_DIR})
|
||||||
message(FATAL_ERROR "Couldn't find CURL or Libcurl - abort")
|
|
||||||
endif()
|
|
||||||
|
|
||||||
target_compile_definitions(${LIB_NAME} PRIVATE ADVSS_EXPORT_SYMBOLS=1)
|
|
||||||
|
|
||||||
# --- End of section ---
|
|
||||||
|
|
||||||
# --- Windows-specific build settings and tasks ---
|
|
||||||
if(OS_WINDOWS)
|
|
||||||
target_compile_definitions(${LIB_NAME} PRIVATE UNICODE _UNICODE)
|
|
||||||
if(MSVC)
|
|
||||||
target_compile_options(${LIB_NAME} PUBLIC /MP /d2FH4- /wd4267 /wd4267
|
|
||||||
/bigobj)
|
|
||||||
|
|
||||||
# Workaround for MSVC incompatibility in CI environment
|
|
||||||
add_compile_definitions(${target_name} _DISABLE_CONSTEXPR_MUTEX_CONSTRUCTOR)
|
|
||||||
endif()
|
endif()
|
||||||
target_sources(${LIB_NAME} PRIVATE lib/win/advanced-scene-switcher-win.cpp)
|
|
||||||
add_definitions(-D_WEBSOCKETPP_CPP11_STL_)
|
|
||||||
# --- End of section ---
|
|
||||||
|
|
||||||
# -- macOS specific build settings and tasks --
|
if(NOT LIBOBS_LIB)
|
||||||
elseif(OS_MACOS)
|
message(FATAL_ERROR "obs library not found - please set LIBOBS_LIB")
|
||||||
set_target_properties(${LIB_NAME} PROPERTIES PREFIX "" SUFFIX ".so")
|
|
||||||
|
|
||||||
find_library(COCOA Cocoa)
|
|
||||||
target_include_directories(${LIB_NAME} PRIVATE ${COCOA})
|
|
||||||
target_link_libraries(${LIB_NAME} PRIVATE ${COCOA})
|
|
||||||
|
|
||||||
target_sources(${LIB_NAME} PRIVATE lib/osx/advanced-scene-switcher-osx.mm)
|
|
||||||
set_source_files_properties(advanced-scene-switcher-osx.mm
|
|
||||||
PROPERTIES COMPILE_FLAGS "-fobjc-arc")
|
|
||||||
# --- End of section ---
|
|
||||||
|
|
||||||
# --- Linux-specific build settings and tasks ---
|
|
||||||
else()
|
|
||||||
set_target_properties(${PROJECT_NAME} PROPERTIES INSTALL_RPATH "$ORIGIN")
|
|
||||||
set_target_properties(${LIB_NAME} PROPERTIES PREFIX "")
|
|
||||||
set_target_properties(${LIB_NAME} PROPERTIES SOVERSION 1)
|
|
||||||
|
|
||||||
find_package(X11 REQUIRED COMPONENTS Xss)
|
|
||||||
target_include_directories(${LIB_NAME} PRIVATE "${X11_INCLUDE_DIR}"
|
|
||||||
"${X11_Xss_INCLUDE_PATH}")
|
|
||||||
target_link_libraries(${LIB_NAME} PRIVATE ${X11_LIBRARIES})
|
|
||||||
|
|
||||||
find_path(PROCPS_INCLUDE_DIR NAMES proc/procps.h)
|
|
||||||
find_path(PROCPS2_INCLUDE_DIR NAMES libproc2/pids.h)
|
|
||||||
if(PROCPS_INCLUDE_DIR)
|
|
||||||
message(STATUS "${PROJECT_NAME} using procps")
|
|
||||||
set(PROC_INCLUDE_DIR "${PROCPS_INCLUDE_DIR}")
|
|
||||||
target_compile_definitions(${LIB_NAME} PRIVATE PROCPS_AVAILABLE)
|
|
||||||
set(PROCESS_CONDITION_SUPPORTED 1)
|
|
||||||
endif()
|
endif()
|
||||||
if(PROCPS2_INCLUDE_DIR)
|
if(NOT LIBOBS_FRONTEND_API_LIB)
|
||||||
find_package(PkgConfig REQUIRED)
|
|
||||||
pkg_check_modules(libproc2 IMPORTED_TARGET libproc2<4.0.5 QUIET)
|
|
||||||
if(libproc2_FOUND)
|
|
||||||
target_compile_definitions(${LIB_NAME} PRIVATE PROCPS2_USE_INFO)
|
|
||||||
endif()
|
|
||||||
pkg_check_modules(libproc2 REQUIRED IMPORTED_TARGET libproc2)
|
|
||||||
set(PROC_INCLUDE_DIR "${PROCPS2_INCLUDE_DIR}")
|
|
||||||
target_compile_definitions(${LIB_NAME} PRIVATE PROCPS2_AVAILABLE)
|
|
||||||
set(PROCESS_CONDITION_SUPPORTED 1)
|
|
||||||
endif()
|
|
||||||
if(NOT DEFINED PROCESS_CONDITION_SUPPORTED)
|
|
||||||
message(
|
message(
|
||||||
WARNING
|
FATAL_ERROR
|
||||||
"found neither procps nor libproc2! Process condition will not be functional!"
|
"libobs frontend-api library not found - please set LIBOBS_FRONTEND_API_LIB"
|
||||||
)
|
)
|
||||||
endif()
|
endif()
|
||||||
target_include_directories(${LIB_NAME} PRIVATE "${PROC_INCLUDE_DIR}")
|
if(NOT LIBOBS_INCLUDE_DIR)
|
||||||
target_sources(${LIB_NAME} PRIVATE lib/linux/advanced-scene-switcher-nix.cpp)
|
message(
|
||||||
endif()
|
FATAL_ERROR "obs.hpp header not found - please set LIBOBS_INCLUDE_DIR")
|
||||||
|
|
||||||
if(NOT OS_WINDOWS)
|
|
||||||
target_compile_options(
|
|
||||||
${LIB_NAME}
|
|
||||||
PUBLIC -Wno-error=unused-parameter -Wno-error=conversion -Wno-error=shadow
|
|
||||||
-Wno-error=float-conversion -Wno-error=enum-conversion)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
# --- End of section ---
|
|
||||||
|
|
||||||
add_subdirectory(plugins)
|
|
||||||
add_subdirectory(tests)
|
|
||||||
|
|
||||||
# --- Install ---
|
|
||||||
|
|
||||||
if(DEB_INSTALL)
|
|
||||||
file(GLOB ASS_TRANSLATION_FILES "data/locale/*.ini")
|
|
||||||
if(NOT LIB_OUT_DIR)
|
|
||||||
set(LIB_OUT_DIR "/lib/obs-plugins")
|
|
||||||
endif()
|
endif()
|
||||||
if(NOT DATA_OUT_DIR)
|
if(NOT LIBOBS_FRONTEND_INCLUDE_DIR)
|
||||||
set(DATA_OUT_DIR "/share/obs/obs-plugins/${PROJECT_NAME}")
|
message(
|
||||||
|
FATAL_ERROR
|
||||||
|
" obs-frontend-api.h not found - please set LIBOBS_FRONTEND_INCLUDE_DIR"
|
||||||
|
)
|
||||||
endif()
|
endif()
|
||||||
install(TARGETS ${PROJECT_NAME}
|
|
||||||
LIBRARY DESTINATION ${CMAKE_INSTALL_PREFIX}/${LIB_OUT_DIR})
|
include_directories("${LIBOBS_INCLUDE_DIR}" "${LIBOBS_FRONTEND_INCLUDE_DIR}"
|
||||||
install(TARGETS ${LIB_NAME}
|
${Qt5Core_INCLUDES} ${Qt5Widgets_INCLUDES})
|
||||||
LIBRARY DESTINATION ${CMAKE_INSTALL_PREFIX}/${LIB_OUT_DIR})
|
|
||||||
install(DIRECTORY data/locale
|
find_package(CURL REQUIRED)
|
||||||
DESTINATION ${CMAKE_INSTALL_PREFIX}/${DATA_OUT_DIR})
|
include_directories("${CURL_INCLUDE_DIRS}")
|
||||||
install(DIRECTORY data/res
|
|
||||||
DESTINATION ${CMAKE_INSTALL_PREFIX}/${DATA_OUT_DIR})
|
|
||||||
else()
|
else()
|
||||||
install_advss_lib(${LIB_NAME})
|
find_package(Libcurl REQUIRED)
|
||||||
|
include_directories("${LIBCURL_INCLUDE_DIRS}")
|
||||||
|
add_definitions(-DVCAM_SUPPORTED)
|
||||||
|
add_definitions(-DREPLAYBUFFER_SUPPORTED)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
# Platform specific settings
|
||||||
|
if(APPLE)
|
||||||
|
set(CMAKE_SHARED_LIBRARY_SUFFIX ".so")
|
||||||
|
find_library(COCOA Cocoa)
|
||||||
if(BUILD_OUT_OF_TREE)
|
if(BUILD_OUT_OF_TREE)
|
||||||
set_target_properties_plugin(${PROJECT_NAME} PROPERTIES OUTPUT_NAME
|
find_package(Qt5MacExtras REQUIRED)
|
||||||
${_name})
|
endif()
|
||||||
|
include_directories(${COCOA})
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if(UNIX AND NOT APPLE)
|
||||||
|
find_package(X11 REQUIRED COMPONENTS Xtst Xss)
|
||||||
|
find_path(PROCPS_INCLUDE_DIR NAMES proc/procps.h)
|
||||||
|
if(NOT PROCPS_INCLUDE_DIR)
|
||||||
|
message(
|
||||||
|
FATAL_ERROR "procps include dir not found - please set PROCPS_INCLUDE_DIR"
|
||||||
|
)
|
||||||
|
endif()
|
||||||
|
find_library(PROCPS_LIBRARY NAMES procps)
|
||||||
|
if(NOT PROCPS_LIBRARY)
|
||||||
|
message(FATAL_ERROR "procps lib not found - please set PROCPS_LIBRARY")
|
||||||
|
endif()
|
||||||
|
link_libraries(${X11_LIBRARIES} ${procps_LIBRARIES})
|
||||||
|
include_directories("${X11_INCLUDE_DIR}" "${X11_Xtst_INCLUDE_PATH}"
|
||||||
|
"${X11_Xss_INCLUDE_PATH}" "${PROCPS_INCLUDE_DIR}")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if(WIN32)
|
||||||
|
set(advanced-scene-switcher_PLATFORM_SOURCES
|
||||||
|
src/win/advanced-scene-switcher-win.cpp)
|
||||||
|
elseif(APPLE)
|
||||||
|
set(advanced-scene-switcher_PLATFORM_SOURCES
|
||||||
|
src/osx/advanced-scene-switcher-osx.mm)
|
||||||
|
set_source_files_properties(advanced-scene-switcher-osx.mm
|
||||||
|
PROPERTIES COMPILE_FLAGS "-fobjc-arc")
|
||||||
|
set(advanced-scene-switcher_PLATFORM_LIBS ${COCOA})
|
||||||
|
else()
|
||||||
|
set(advanced-scene-switcher_PLATFORM_SOURCES
|
||||||
|
src/linux/advanced-scene-switcher-nix.cpp)
|
||||||
|
set(advanced-scene-switcher_PLATFORM_LIBS Xss ${PROCPS_LIBRARY})
|
||||||
|
endif()
|
||||||
|
|
||||||
|
# asio and websocketpp
|
||||||
|
add_definitions(-DASIO_STANDALONE)
|
||||||
|
include_directories("${CMAKE_CURRENT_SOURCE_DIR}/deps/asio/asio/include"
|
||||||
|
"${CMAKE_CURRENT_SOURCE_DIR}/deps/websocketpp")
|
||||||
|
if(WIN32)
|
||||||
|
add_definitions(-D_WEBSOCKETPP_CPP11_STL_)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
# Setup QT tools
|
||||||
|
set(CMAKE_AUTOMOC ON)
|
||||||
|
set(CMAKE_AUTOUIC ON)
|
||||||
|
set(CMAKE_AUTOUIC_SEARCH_PATHS "${CMAKE_CURRENT_SOURCE_DIR}/forms")
|
||||||
|
set(advanced-scene-switcher_UI ${advanced-scene-switcher_UI}
|
||||||
|
forms/advanced-scene-switcher.ui)
|
||||||
|
qt5_wrap_ui(advanced-scene-switcher_UI_HEADERS ${advanced-scene-switcher_UI}
|
||||||
|
${advanced-scene-switcher_PLATFORM_UI})
|
||||||
|
|
||||||
|
# The plugin sources
|
||||||
|
set(advanced-scene-switcher_HEADERS
|
||||||
|
${advanced-scene-switcher_HEADERS}
|
||||||
|
src/headers/advanced-scene-switcher.hpp
|
||||||
|
src/headers/switcher-data-structs.hpp
|
||||||
|
src/headers/scene-group.hpp
|
||||||
|
src/headers/scene-trigger.hpp
|
||||||
|
src/headers/switch-audio.hpp
|
||||||
|
src/headers/switch-executable.hpp
|
||||||
|
src/headers/switch-file.hpp
|
||||||
|
src/headers/switch-idle.hpp
|
||||||
|
src/headers/switch-media.hpp
|
||||||
|
src/headers/switch-network.hpp
|
||||||
|
src/headers/switch-pause.hpp
|
||||||
|
src/headers/switch-random.hpp
|
||||||
|
src/headers/switch-screen-region.hpp
|
||||||
|
src/headers/switch-time.hpp
|
||||||
|
src/headers/switch-transitions.hpp
|
||||||
|
src/headers/switch-window.hpp
|
||||||
|
src/headers/switch-sequence.hpp
|
||||||
|
src/headers/switch-video.hpp
|
||||||
|
src/headers/switch-generic.hpp
|
||||||
|
src/headers/macro-action-edit.hpp
|
||||||
|
src/headers/macro-action-audio.hpp
|
||||||
|
src/headers/macro-action-file.hpp
|
||||||
|
src/headers/macro-action-filter.hpp
|
||||||
|
src/headers/macro-action-hotkey.hpp
|
||||||
|
src/headers/macro-action-macro.hpp
|
||||||
|
src/headers/macro-action-media.hpp
|
||||||
|
src/headers/macro-action-plugin-state.hpp
|
||||||
|
src/headers/macro-action-preview-scene.hpp
|
||||||
|
src/headers/macro-action-profile.hpp
|
||||||
|
src/headers/macro-action-random.hpp
|
||||||
|
src/headers/macro-action-recording.hpp
|
||||||
|
src/headers/macro-action-replay-buffer.hpp
|
||||||
|
src/headers/macro-action-run.hpp
|
||||||
|
src/headers/macro-action-scene-collection.hpp
|
||||||
|
src/headers/macro-action-scene-order.hpp
|
||||||
|
src/headers/macro-action-scene-swap.hpp
|
||||||
|
src/headers/macro-action-scene-switch.hpp
|
||||||
|
src/headers/macro-action-scene-transform.hpp
|
||||||
|
src/headers/macro-action-scene-visibility.hpp
|
||||||
|
src/headers/macro-action-screenshot.hpp
|
||||||
|
src/headers/macro-action-sequence.hpp
|
||||||
|
src/headers/macro-action-source.hpp
|
||||||
|
src/headers/macro-action-streaming.hpp
|
||||||
|
src/headers/macro-action-systray.hpp
|
||||||
|
src/headers/macro-action-timer.hpp
|
||||||
|
src/headers/macro-action-transition.hpp
|
||||||
|
src/headers/macro-action-virtual-cam.hpp
|
||||||
|
src/headers/macro-action-wait.hpp
|
||||||
|
src/headers/macro-condition-edit.hpp
|
||||||
|
src/headers/macro-condition-audio.hpp
|
||||||
|
src/headers/macro-condition-cursor.hpp
|
||||||
|
src/headers/macro-condition-date.hpp
|
||||||
|
src/headers/macro-condition-file.hpp
|
||||||
|
src/headers/macro-condition-filter.hpp
|
||||||
|
src/headers/macro-condition-hotkey.hpp
|
||||||
|
src/headers/macro-condition-idle.hpp
|
||||||
|
src/headers/macro-condition-macro.hpp
|
||||||
|
src/headers/macro-condition-media.hpp
|
||||||
|
src/headers/macro-condition-obs-stats.hpp
|
||||||
|
src/headers/macro-condition-plugin-state.hpp
|
||||||
|
src/headers/macro-condition-process.hpp
|
||||||
|
src/headers/macro-condition-recording.hpp
|
||||||
|
src/headers/macro-condition-replay-buffer.hpp
|
||||||
|
src/headers/macro-condition-scene-order.hpp
|
||||||
|
src/headers/macro-condition-scene-transform.hpp
|
||||||
|
src/headers/macro-condition-scene-visibility.hpp
|
||||||
|
src/headers/macro-condition-scene.hpp
|
||||||
|
src/headers/macro-condition-source.hpp
|
||||||
|
src/headers/macro-condition-streaming.hpp
|
||||||
|
src/headers/macro-condition-studio-mode.hpp
|
||||||
|
src/headers/macro-condition-timer.hpp
|
||||||
|
src/headers/macro-condition-transition.hpp
|
||||||
|
src/headers/macro-condition-virtual-cam.hpp
|
||||||
|
src/headers/macro-condition-window.hpp
|
||||||
|
src/headers/macro.hpp
|
||||||
|
src/headers/macro-list-entry-widget.hpp
|
||||||
|
src/headers/macro-properties.hpp
|
||||||
|
src/headers/macro-segment.hpp
|
||||||
|
src/headers/macro-segment-list.hpp
|
||||||
|
src/headers/macro-selection.hpp
|
||||||
|
src/headers/curl-helper.hpp
|
||||||
|
src/headers/hotkey.hpp
|
||||||
|
src/headers/scene-item-selection.hpp
|
||||||
|
src/headers/scene-selection.hpp
|
||||||
|
src/headers/screenshot-helper.hpp
|
||||||
|
src/headers/transition-selection.hpp
|
||||||
|
src/headers/name-dialog.hpp
|
||||||
|
src/headers/duration-control.hpp
|
||||||
|
src/headers/file-selection.hpp
|
||||||
|
src/headers/section.hpp
|
||||||
|
src/headers/status-control.hpp
|
||||||
|
src/headers/platform-funcs.hpp
|
||||||
|
src/headers/resizing-text-edit.hpp
|
||||||
|
src/headers/utility.hpp
|
||||||
|
src/headers/volume-control.hpp
|
||||||
|
src/headers/version.h)
|
||||||
|
|
||||||
|
set(advanced-scene-switcher_SOURCES
|
||||||
|
${advanced-scene-switcher_SOURCES}
|
||||||
|
src/advanced-scene-switcher.cpp
|
||||||
|
src/advanced-scene-switcher-module.c
|
||||||
|
src/switcher-data-structs.cpp
|
||||||
|
src/scene-group.cpp
|
||||||
|
src/scene-trigger.cpp
|
||||||
|
src/switch-transitions.cpp
|
||||||
|
src/switch-screen-region.cpp
|
||||||
|
src/switch-priority.cpp
|
||||||
|
src/switch-executable.cpp
|
||||||
|
src/switch-idle.cpp
|
||||||
|
src/switch-sequence.cpp
|
||||||
|
src/switch-file.cpp
|
||||||
|
src/switch-window.cpp
|
||||||
|
src/switch-media.cpp
|
||||||
|
src/switch-network.cpp
|
||||||
|
src/file-selection.cpp
|
||||||
|
src/hotkey.cpp
|
||||||
|
src/general.cpp
|
||||||
|
src/switch-pause.cpp
|
||||||
|
src/switch-random.cpp
|
||||||
|
src/switch-time.cpp
|
||||||
|
src/switch-audio.cpp
|
||||||
|
src/switch-video.cpp
|
||||||
|
src/switch-generic.cpp
|
||||||
|
src/macro-action-edit.cpp
|
||||||
|
src/macro-action-audio.cpp
|
||||||
|
src/macro-action-file.cpp
|
||||||
|
src/macro-action-filter.cpp
|
||||||
|
src/macro-action-hotkey.cpp
|
||||||
|
src/macro-action-macro.cpp
|
||||||
|
src/macro-action-media.cpp
|
||||||
|
src/macro-action-plugin-state.cpp
|
||||||
|
src/macro-action-preview-scene.cpp
|
||||||
|
src/macro-action-profile.cpp
|
||||||
|
src/macro-action-random.cpp
|
||||||
|
src/macro-action-recording.cpp
|
||||||
|
src/macro-action-replay-buffer.cpp
|
||||||
|
src/macro-action-run.cpp
|
||||||
|
src/macro-action-scene-collection.cpp
|
||||||
|
src/macro-action-scene-order.cpp
|
||||||
|
src/macro-action-scene-swap.cpp
|
||||||
|
src/macro-action-scene-switch.cpp
|
||||||
|
src/macro-action-scene-transform.cpp
|
||||||
|
src/macro-action-scene-visibility.cpp
|
||||||
|
src/macro-action-screenshot.cpp
|
||||||
|
src/macro-action-sequence.cpp
|
||||||
|
src/macro-action-source.cpp
|
||||||
|
src/macro-action-streaming.cpp
|
||||||
|
src/macro-action-systray.cpp
|
||||||
|
src/macro-action-timer.cpp
|
||||||
|
src/macro-action-transition.cpp
|
||||||
|
src/macro-action-virtual-cam.cpp
|
||||||
|
src/macro-action-wait.cpp
|
||||||
|
src/macro-condition-edit.cpp
|
||||||
|
src/macro-condition-audio.cpp
|
||||||
|
src/macro-condition-cursor.cpp
|
||||||
|
src/macro-condition-date.cpp
|
||||||
|
src/macro-condition-file.cpp
|
||||||
|
src/macro-condition-filter.cpp
|
||||||
|
src/macro-condition-hotkey.cpp
|
||||||
|
src/macro-condition-idle.cpp
|
||||||
|
src/macro-condition-macro.cpp
|
||||||
|
src/macro-condition-media.cpp
|
||||||
|
src/macro-condition-obs-stats.cpp
|
||||||
|
src/macro-condition-plugin-state.cpp
|
||||||
|
src/macro-condition-process.cpp
|
||||||
|
src/macro-condition-recording.cpp
|
||||||
|
src/macro-condition-replay-buffer.cpp
|
||||||
|
src/macro-condition-scene-order.cpp
|
||||||
|
src/macro-condition-scene-transform.cpp
|
||||||
|
src/macro-condition-scene-visibility.cpp
|
||||||
|
src/macro-condition-scene.cpp
|
||||||
|
src/macro-condition-source.cpp
|
||||||
|
src/macro-condition-streaming.cpp
|
||||||
|
src/macro-condition-studio-mode.cpp
|
||||||
|
src/macro-condition-timer.cpp
|
||||||
|
src/macro-condition-transition.cpp
|
||||||
|
src/macro-condition-virtual-cam.cpp
|
||||||
|
src/macro-condition-window.cpp
|
||||||
|
src/macro.cpp
|
||||||
|
src/macro-list-entry-widget.cpp
|
||||||
|
src/macro-properties.cpp
|
||||||
|
src/macro-segment.cpp
|
||||||
|
src/macro-segment-list.cpp
|
||||||
|
src/macro-selection.cpp
|
||||||
|
src/macro-tab.cpp
|
||||||
|
src/curl-helper.cpp
|
||||||
|
src/scene-item-selection.cpp
|
||||||
|
src/scene-selection.cpp
|
||||||
|
src/screenshot-helper.cpp
|
||||||
|
src/transition-selection.cpp
|
||||||
|
src/name-dialog.cpp
|
||||||
|
src/resizing-text-edit.cpp
|
||||||
|
src/duration-control.cpp
|
||||||
|
src/status-control.cpp
|
||||||
|
src/section.cpp
|
||||||
|
src/utility.cpp
|
||||||
|
src/volume-control.cpp
|
||||||
|
src/version.cpp)
|
||||||
|
|
||||||
|
# Backwards compatability checks with older OBS versions
|
||||||
|
if(DEFINED LibObs_VERSION_MAJOR)
|
||||||
|
if(LibObs_VERSION_MAJOR GREATER_EQUAL 27)
|
||||||
|
add_definitions(-DVCAM_SUPPORTED)
|
||||||
else()
|
else()
|
||||||
set_target_properties_obs(${PROJECT_NAME} PROPERTIES PREFIX "")
|
message(
|
||||||
|
WARNING
|
||||||
|
"OBS version ${LibObs_VERSION_MAJOR} found - disabling virtual camera functionality"
|
||||||
|
)
|
||||||
|
endif()
|
||||||
|
if(LibObs_VERSION_MAJOR GREATER_EQUAL 26)
|
||||||
|
add_definitions(-DREPLAYBUFFER_SUPPORTED)
|
||||||
|
else()
|
||||||
|
message(
|
||||||
|
WARNING
|
||||||
|
"OBS version ${LibObs_VERSION_MAJOR} found - disabling replay buffer and screenshot functionality"
|
||||||
|
)
|
||||||
|
list(REMOVE_ITEM advanced-scene-switcher_SOURCES
|
||||||
|
src/macro-action-screenshot.cpp)
|
||||||
|
list(REMOVE_ITEM advanced-scene-switcher_HEADERS
|
||||||
|
src/headers/macro-action-screenshot.hpp)
|
||||||
endif()
|
endif()
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
add_library(
|
||||||
|
advanced-scene-switcher SHARED
|
||||||
|
${advanced-scene-switcher_HEADERS}
|
||||||
|
${advanced-scene-switcher_SOURCES}
|
||||||
|
${advanced-scene-switcher_UI_HEADERS}
|
||||||
|
${advanced-scene-switcher_PLATFORM_SOURCES}
|
||||||
|
${advanced-scene-switcher_PLATFORM_HEADERS})
|
||||||
|
|
||||||
|
# Out of tree build
|
||||||
|
if(BUILD_OUT_OF_TREE)
|
||||||
|
target_link_libraries(
|
||||||
|
advanced-scene-switcher ${advanced-scene-switcher_PLATFORM_LIBS}
|
||||||
|
${LIBOBS_LIB} ${LIBOBS_FRONTEND_API_LIB} Qt5::Core Qt5::Widgets)
|
||||||
|
|
||||||
|
# Additional commands to install the module in the correct place. Find all the
|
||||||
|
# translation files so we can copy them to the correct place later on.
|
||||||
|
file(GLOB ASS_TRANSLATION_FILES "data/locale/*.ini")
|
||||||
|
|
||||||
|
# OSX
|
||||||
|
if(APPLE)
|
||||||
|
set_target_properties(advanced-scene-switcher PROPERTIES PREFIX "")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
# Linux
|
||||||
|
if(UNIX AND NOT APPLE)
|
||||||
|
if(NOT LIB_OUT_DIR)
|
||||||
|
set(LIB_OUT_DIR "/lib/obs-plugins")
|
||||||
|
endif()
|
||||||
|
if(NOT DATA_OUT_DIR)
|
||||||
|
set(DATA_OUT_DIR "/share/obs/obs-plugins/advanced-scene-switcher")
|
||||||
|
endif()
|
||||||
|
set_target_properties(advanced-scene-switcher PROPERTIES PREFIX "")
|
||||||
|
install(TARGETS advanced-scene-switcher
|
||||||
|
LIBRARY DESTINATION ${CMAKE_INSTALL_PREFIX}/${LIB_OUT_DIR})
|
||||||
|
install(DIRECTORY data/locale
|
||||||
|
DESTINATION ${CMAKE_INSTALL_PREFIX}/${DATA_OUT_DIR})
|
||||||
|
install(DIRECTORY data/res
|
||||||
|
DESTINATION ${CMAKE_INSTALL_PREFIX}/${DATA_OUT_DIR})
|
||||||
|
endif()
|
||||||
|
else()
|
||||||
|
# In tree build
|
||||||
|
target_link_libraries(
|
||||||
|
advanced-scene-switcher ${advanced-scene-switcher_PLATFORM_LIBS}
|
||||||
|
obs-frontend-api Qt5::Widgets libobs)
|
||||||
|
install_obs_plugin_with_data(advanced-scene-switcher data)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
add_subdirectory(src/external-macro-modules)
|
||||||
|
|||||||
@@ -1,190 +0,0 @@
|
|||||||
{
|
|
||||||
"version": 3,
|
|
||||||
"cmakeMinimumRequired": {
|
|
||||||
"major": 3,
|
|
||||||
"minor": 22,
|
|
||||||
"patch": 0
|
|
||||||
},
|
|
||||||
"configurePresets": [
|
|
||||||
{
|
|
||||||
"name": "template",
|
|
||||||
"hidden": true,
|
|
||||||
"cacheVariables": {
|
|
||||||
"ENABLE_FRONTEND_API": true,
|
|
||||||
"ENABLE_QT": true
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "macos",
|
|
||||||
"displayName": "macOS Universal",
|
|
||||||
"description": "Build for macOS 11.0+ (Universal binary)",
|
|
||||||
"inherits": ["template"],
|
|
||||||
"binaryDir": "${sourceDir}/build_macos",
|
|
||||||
"condition": {
|
|
||||||
"type": "equals",
|
|
||||||
"lhs": "${hostSystemName}",
|
|
||||||
"rhs": "Darwin"
|
|
||||||
},
|
|
||||||
"generator": "Xcode",
|
|
||||||
"warnings": {"dev": true, "deprecated": true},
|
|
||||||
"cacheVariables": {
|
|
||||||
"QT_VERSION": "6",
|
|
||||||
"CMAKE_OSX_DEPLOYMENT_TARGET": "11.0",
|
|
||||||
"CODESIGN_IDENTITY": "$penv{CODESIGN_IDENT}",
|
|
||||||
"CODESIGN_TEAM": "$penv{CODESIGN_TEAM}"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "macos-ci",
|
|
||||||
"inherits": ["macos"],
|
|
||||||
"displayName": "macOS Universal CI build",
|
|
||||||
"description": "Build for macOS 11.0+ (Universal binary) for CI",
|
|
||||||
"generator": "Xcode",
|
|
||||||
"cacheVariables": {
|
|
||||||
"CMAKE_COMPILE_WARNING_AS_ERROR": true
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "windows-x64",
|
|
||||||
"displayName": "Windows x64",
|
|
||||||
"description": "Build for Windows x64",
|
|
||||||
"inherits": ["template"],
|
|
||||||
"binaryDir": "${sourceDir}/build_x64",
|
|
||||||
"condition": {
|
|
||||||
"type": "equals",
|
|
||||||
"lhs": "${hostSystemName}",
|
|
||||||
"rhs": "Windows"
|
|
||||||
},
|
|
||||||
"generator": "Visual Studio 17 2022",
|
|
||||||
"architecture": "x64",
|
|
||||||
"warnings": {"dev": true, "deprecated": true},
|
|
||||||
"cacheVariables": {
|
|
||||||
"QT_VERSION": "6",
|
|
||||||
"CMAKE_SYSTEM_VERSION": "10.0.18363.657"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "windows-ci-x64",
|
|
||||||
"inherits": ["windows-x64"],
|
|
||||||
"displayName": "Windows x64 CI build",
|
|
||||||
"description": "Build for Windows x64 on CI",
|
|
||||||
"cacheVariables": {
|
|
||||||
"CMAKE_COMPILE_WARNING_AS_ERROR": true
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "linux-x86_64",
|
|
||||||
"displayName": "Linux x86_64",
|
|
||||||
"description": "Build for Linux x86_64",
|
|
||||||
"inherits": ["template"],
|
|
||||||
"binaryDir": "${sourceDir}/build_x86_64",
|
|
||||||
"condition": {
|
|
||||||
"type": "equals",
|
|
||||||
"lhs": "${hostSystemName}",
|
|
||||||
"rhs": "Linux"
|
|
||||||
},
|
|
||||||
"generator": "Ninja",
|
|
||||||
"warnings": {"dev": true, "deprecated": true},
|
|
||||||
"cacheVariables": {
|
|
||||||
"QT_VERSION": "6",
|
|
||||||
"CMAKE_BUILD_TYPE": "RelWithDebInfo"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "linux-ci-x86_64",
|
|
||||||
"inherits": ["linux-x86_64"],
|
|
||||||
"displayName": "Linux x86_64 CI build",
|
|
||||||
"description": "Build for Linux x86_64 on CI",
|
|
||||||
"cacheVariables": {
|
|
||||||
"CMAKE_BUILD_TYPE": "RelWithDebInfo",
|
|
||||||
"CMAKE_COMPILE_WARNING_AS_ERROR": true
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "linux-aarch64",
|
|
||||||
"displayName": "Linux aarch64",
|
|
||||||
"description": "Build for Linux aarch64",
|
|
||||||
"inherits": ["template"],
|
|
||||||
"binaryDir": "${sourceDir}/build_aarch64",
|
|
||||||
"condition": {
|
|
||||||
"type": "equals",
|
|
||||||
"lhs": "${hostSystemName}",
|
|
||||||
"rhs": "Linux"
|
|
||||||
},
|
|
||||||
"generator": "Ninja",
|
|
||||||
"warnings": {"dev": true, "deprecated": true},
|
|
||||||
"cacheVariables": {
|
|
||||||
"QT_VERSION": "6",
|
|
||||||
"CMAKE_BUILD_TYPE": "RelWithDebInfo"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "linux-ci-aarch64",
|
|
||||||
"inherits": ["linux-aarch64"],
|
|
||||||
"displayName": "Linux aarch64 CI build",
|
|
||||||
"description": "Build for Linux aarch64 on CI",
|
|
||||||
"cacheVariables": {
|
|
||||||
"CMAKE_BUILD_TYPE": "RelWithDebInfo",
|
|
||||||
"CMAKE_COMPILE_WARNING_AS_ERROR": true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"buildPresets": [
|
|
||||||
{
|
|
||||||
"name": "macos",
|
|
||||||
"configurePreset": "macos",
|
|
||||||
"displayName": "macOS Universal",
|
|
||||||
"description": "macOS build for Universal architectures",
|
|
||||||
"configuration": "Release"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "macos-ci",
|
|
||||||
"configurePreset": "macos-ci",
|
|
||||||
"displayName": "macOS Universal CI",
|
|
||||||
"description": "macOS CI build for Universal architectures",
|
|
||||||
"configuration": "RelWithDebInfo"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "windows-x64",
|
|
||||||
"configurePreset": "windows-x64",
|
|
||||||
"displayName": "Windows x64",
|
|
||||||
"description": "Windows build for x64",
|
|
||||||
"configuration": "RelWithDebInfo"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "windows-ci-x64",
|
|
||||||
"configurePreset": "windows-ci-x64",
|
|
||||||
"displayName": "Windows x64 CI",
|
|
||||||
"description": "Windows CI build for x64 (RelWithDebInfo configuration)",
|
|
||||||
"configuration": "RelWithDebInfo"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "linux-x86_64",
|
|
||||||
"configurePreset": "linux-x86_64",
|
|
||||||
"displayName": "Linux x86_64",
|
|
||||||
"description": "Linux build for x86_64",
|
|
||||||
"configuration": "RelWithDebInfo"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "linux-ci-x86_64",
|
|
||||||
"configurePreset": "linux-ci-x86_64",
|
|
||||||
"displayName": "Linux x86_64 CI",
|
|
||||||
"description": "Linux CI build for x86_64",
|
|
||||||
"configuration": "RelWithDebInfo"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "linux-aarch64",
|
|
||||||
"configurePreset": "linux-aarch64",
|
|
||||||
"displayName": "Linux aarch64",
|
|
||||||
"description": "Linux build for aarch64",
|
|
||||||
"configuration": "RelWithDebInfo"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "linux-ci-aarch64",
|
|
||||||
"configurePreset": "linux-ci-aarch64",
|
|
||||||
"displayName": "Linux aarch64 CI",
|
|
||||||
"description": "Linux CI build for aarch64",
|
|
||||||
"configuration": "RelWithDebInfo"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
30
README.md
30
README.md
@@ -1,5 +1,7 @@
|
|||||||
An automation plugin for OBS Studio.
|
# SceneSwitcher
|
||||||
More information can be found in the [OBS forums](https://obsproject.com/forum/resources/automatic-scene-switching.395/) or the plugin's [wiki](https://github.com/WarmUpTill/SceneSwitcher/wiki).
|
An automated scene switcher for OBS Studio.
|
||||||
|
|
||||||
|
More information can be found on https://obsproject.com/forum/resources/automatic-scene-switching.395/.
|
||||||
|
|
||||||
## Downloads
|
## Downloads
|
||||||
|
|
||||||
@@ -7,21 +9,23 @@ Binaries for Windows, MacOS, and Linux are available in the [Releases](https://g
|
|||||||
|
|
||||||
## Installing the plugin
|
## Installing the plugin
|
||||||
|
|
||||||
For the **Windows** and **MacOS** platforms, it is recommended to run the provided installers.
|
For the Windows and MacOS platforms, it is recommended to run the provided installers.
|
||||||
|
|
||||||
On Linux the plugin is available via the **Flatpak** package manager for users who installed OBS via Flatpak:
|
For Linux the Snap package manager offers an OBS Studio installation which is bundled with the plugin:
|
||||||
|
```
|
||||||
|
sudo snap install obs-studio
|
||||||
|
```
|
||||||
|
The plugin is also available via the Flatpak package manager for users who installed OBS via Flatpak:
|
||||||
```
|
```
|
||||||
flatpak install com.obsproject.Studio.Plugin.SceneSwitcher
|
flatpak install com.obsproject.Studio.Plugin.SceneSwitcher
|
||||||
```
|
```
|
||||||
|
|
||||||
The **Snap** package manager offers an OBS Studio installation which is bundled with the plugin:
|
If that is not an option you will have to ...
|
||||||
```
|
1. Copy the library to the plugins folder of you obs installation.
|
||||||
sudo snap install obs-studio
|
2. Copy the contents of the data directory to its respective folders of your obs installation.
|
||||||
```
|
|
||||||
|
|
||||||
## Contributing
|
Unfortunately the exact location of these folders may vary from system to system.
|
||||||
|
|
||||||
- If you wish to contribute code to the project, have a look at this [section](BUILDING.md) describing how to compile the plugin.
|
## Compiling the plugin
|
||||||
- You can add custom conditions and actions at runtime using the API described [here](https://github.com/WarmUpTill/SceneSwitcher/wiki/Scripting).
|
|
||||||
- You can optionally use [pre-commit](https://pre-commit.com) to automatically handle formatting.
|
See the [build instructions](BUILDING.md).
|
||||||
- If you wish to contribute translations, feel free to submit pull requests for the corresponding files under `data/locale`.
|
|
||||||
|
|||||||
@@ -1,3 +0,0 @@
|
|||||||
if (( ! ${+_loglevel} )) typeset -g _loglevel=1
|
|
||||||
|
|
||||||
if (( _loglevel > 2 )) print -PR -e -- "${CI:+::debug::}%F{220}DEBUG: ${@}%f"
|
|
||||||
@@ -1,3 +0,0 @@
|
|||||||
local icon=' ✖︎ '
|
|
||||||
|
|
||||||
print -u2 -PR "${CI:+::error::}%F{1} ${icon} %f ${@}"
|
|
||||||
@@ -1,16 +0,0 @@
|
|||||||
autoload -Uz log_info
|
|
||||||
|
|
||||||
if (( ! ${+_log_group} )) typeset -g _log_group=0
|
|
||||||
|
|
||||||
if (( ${+CI} )) {
|
|
||||||
if (( _log_group )) {
|
|
||||||
print "::endgroup::"
|
|
||||||
typeset -g _log_group=0
|
|
||||||
}
|
|
||||||
if (( # )) {
|
|
||||||
print "::group::${@}"
|
|
||||||
typeset -g _log_group=1
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
if (( # )) log_info ${@}
|
|
||||||
}
|
|
||||||
@@ -1,7 +0,0 @@
|
|||||||
if (( ! ${+_loglevel} )) typeset -g _loglevel=1
|
|
||||||
|
|
||||||
if (( _loglevel > 0 )) {
|
|
||||||
local icon=' =>'
|
|
||||||
|
|
||||||
print -PR "%F{4} ${(r:5:)icon}%f %B${@}%b"
|
|
||||||
}
|
|
||||||
@@ -1,7 +0,0 @@
|
|||||||
if (( ! ${+_loglevel} )) typeset -g _loglevel=1
|
|
||||||
|
|
||||||
if (( _loglevel > 0 )) {
|
|
||||||
local icon=''
|
|
||||||
|
|
||||||
print -PR " ${(r:5:)icon} ${@}"
|
|
||||||
}
|
|
||||||
@@ -1,7 +0,0 @@
|
|||||||
if (( ! ${+_loglevel} )) typeset -g _loglevel=1
|
|
||||||
|
|
||||||
if (( _loglevel > 0 )) {
|
|
||||||
local icon=' >'
|
|
||||||
|
|
||||||
print -PR "%F{2} ${(r:5:)icon}%f ${@}"
|
|
||||||
}
|
|
||||||
@@ -1,7 +0,0 @@
|
|||||||
if (( ! ${+_loglevel} )) typeset -g _loglevel=1
|
|
||||||
|
|
||||||
if (( _loglevel > 0 )) {
|
|
||||||
local icon=' =>'
|
|
||||||
|
|
||||||
print -PR "${CI:+::warning::}%F{3} ${(r:5:)icon} ${@}%f"
|
|
||||||
}
|
|
||||||
@@ -1,17 +0,0 @@
|
|||||||
autoload -Uz log_debug log_error
|
|
||||||
|
|
||||||
local -r _usage="Usage: %B${0}%b <loglevel>
|
|
||||||
|
|
||||||
Set log level, following levels are supported: 0 (quiet), 1 (normal), 2 (verbose), 3 (debug)"
|
|
||||||
|
|
||||||
if (( ! # )); then
|
|
||||||
log_error 'Called without arguments.'
|
|
||||||
log_output ${_usage}
|
|
||||||
return 2
|
|
||||||
elif (( ${1} >= 4 )); then
|
|
||||||
log_error 'Called with loglevel > 3.'
|
|
||||||
log_output ${_usage}
|
|
||||||
fi
|
|
||||||
|
|
||||||
typeset -g -i -r _loglevel=${1}
|
|
||||||
log_debug "Log level set to '${1}'"
|
|
||||||
@@ -1,197 +0,0 @@
|
|||||||
#!/usr/bin/env zsh
|
|
||||||
|
|
||||||
builtin emulate -L zsh
|
|
||||||
setopt EXTENDED_GLOB
|
|
||||||
setopt PUSHD_SILENT
|
|
||||||
setopt ERR_EXIT
|
|
||||||
setopt ERR_RETURN
|
|
||||||
setopt NO_UNSET
|
|
||||||
setopt PIPE_FAIL
|
|
||||||
setopt NO_AUTO_PUSHD
|
|
||||||
setopt NO_PUSHD_IGNORE_DUPS
|
|
||||||
setopt FUNCTION_ARGZERO
|
|
||||||
|
|
||||||
## Enable for script debugging
|
|
||||||
# setopt WARN_CREATE_GLOBAL
|
|
||||||
# setopt WARN_NESTED_VAR
|
|
||||||
# setopt XTRACE
|
|
||||||
|
|
||||||
autoload -Uz is-at-least && if ! is-at-least 5.2; then
|
|
||||||
print -u2 -PR "%F{1}${funcstack[1]##*/}:%f Running on Zsh version %B${ZSH_VERSION}%b, but Zsh %B5.2%b is the minimum supported version. Upgrade zsh to fix this issue."
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
invoke_formatter() {
|
|
||||||
if (( # < 1 )) {
|
|
||||||
log_error "Usage invoke_formatter [formatter_name]"
|
|
||||||
exit 2
|
|
||||||
}
|
|
||||||
|
|
||||||
case ${1} {
|
|
||||||
clang)
|
|
||||||
if (( ${+commands[clang-format-16]} )) {
|
|
||||||
local formatter=clang-format-16
|
|
||||||
} elif (( ${+commands[clang-format]} )) {
|
|
||||||
local formatter=clang-format
|
|
||||||
local -a formatter_version=($(clang-format --version))
|
|
||||||
|
|
||||||
if ! is-at-least 16.0.5 ${formatter_version[-1]}; then
|
|
||||||
log_error "clang-format is not version 16.0.5 or above (found ${formatter_version[-1]}."
|
|
||||||
exit 2
|
|
||||||
fi
|
|
||||||
|
|
||||||
if ! is-at-least ${formatter_version[-1]} 16.0.5; then
|
|
||||||
log_error "clang-format is more recent than version 16.0.5 (found ${formatter_version[-1]})."
|
|
||||||
exit 2
|
|
||||||
fi
|
|
||||||
} else {
|
|
||||||
log_error "No viable clang-format version found (required 16.0.5)"
|
|
||||||
exit 2
|
|
||||||
}
|
|
||||||
|
|
||||||
local -a source_files=()
|
|
||||||
for folder ("lib" "module" "plugins" "tests") {
|
|
||||||
source_files+=(${folder}/**/*.(c|cpp|h|hpp)(.N))
|
|
||||||
}
|
|
||||||
|
|
||||||
for file (${source_files}) {
|
|
||||||
if [[ $file == *"catch.hpp" ]]; then
|
|
||||||
source_files=("${source_files[@]/$file}")
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
local -a format_args=(-style=file -fallback-style=none)
|
|
||||||
if (( _loglevel > 2 )) format_args+=(--verbose)
|
|
||||||
;;
|
|
||||||
cmake)
|
|
||||||
local formatter=cmake-format
|
|
||||||
if (( ${+commands[cmake-format]} )) {
|
|
||||||
local cmake_format_version=$(cmake-format --version)
|
|
||||||
|
|
||||||
if ! is-at-least 0.6.13 ${cmake_format_version}; then
|
|
||||||
log_error "cmake-format is not version 0.6.13 or above (found ${cmake_format_version})."
|
|
||||||
exit 2
|
|
||||||
fi
|
|
||||||
} else {
|
|
||||||
log_error "No viable cmake-format version found (required 0.6.13)"
|
|
||||||
exit 2
|
|
||||||
}
|
|
||||||
|
|
||||||
local -a source_files=(**/(CMakeLists.txt|*.cmake)(.N))
|
|
||||||
source_files=(${source_files:#(build_*)/*})
|
|
||||||
|
|
||||||
local -a format_args=()
|
|
||||||
if (( _loglevel > 2 )) format_args+=(--log-level debug)
|
|
||||||
;;
|
|
||||||
swift)
|
|
||||||
local formatter=swift-format
|
|
||||||
if (( ${+commands[swift-format]} )) {
|
|
||||||
local swift_format_version=$(swift-format --version)
|
|
||||||
|
|
||||||
if ! is-at-least 508.0.0 ${swift_format_version}; then
|
|
||||||
log_error "swift-format is not version 508.0.0 or above (found ${swift_format_version})."
|
|
||||||
exit 2
|
|
||||||
fi
|
|
||||||
} else {
|
|
||||||
log_error "No viable swift-format version found (required 508.0.0)"
|
|
||||||
exit 2
|
|
||||||
}
|
|
||||||
|
|
||||||
local -a source_files=(**/*.swift(.N))
|
|
||||||
|
|
||||||
local -a format_args=()
|
|
||||||
;;
|
|
||||||
*) log_error "Invalid formatter specified: ${1}. Valid options are clang-format, cmake-format, and swift-format."; exit 2 ;;
|
|
||||||
}
|
|
||||||
|
|
||||||
local file
|
|
||||||
local -i num_failures=0
|
|
||||||
if (( check_only )) {
|
|
||||||
for file (${source_files}) {
|
|
||||||
if (( _loglevel > 1 )) log_info "Checking format of ${file}..."
|
|
||||||
|
|
||||||
if ! "${formatter}" ${format_args} "${file}" | diff -q "${file}" - &> /dev/null; then
|
|
||||||
log_error "${file} requires formatting changes."
|
|
||||||
|
|
||||||
if (( fail_on_error == 2 )) return 2;
|
|
||||||
num_failures=$(( num_failures + 1 ))
|
|
||||||
else
|
|
||||||
if (( _loglevel > 1 )) log_status "${file} requires no formatting changes."
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
if (( fail_on_error && num_failures )) return 2;
|
|
||||||
} elif (( ${#source_files} )) {
|
|
||||||
format_args+=(-i)
|
|
||||||
"${formatter}" ${format_args} ${source_files}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
run_format() {
|
|
||||||
if (( ! ${+SCRIPT_HOME} )) typeset -g SCRIPT_HOME=${ZSH_ARGZERO:A:h}
|
|
||||||
if (( ! ${+FORMATTER_NAME} )) typeset -g FORMATTER_NAME=${${(s:-:)ZSH_ARGZERO:t:r}[2]}
|
|
||||||
|
|
||||||
typeset -g host_os=${${(L)$(uname -s)}//darwin/macos}
|
|
||||||
local -i fail_on_error=0
|
|
||||||
local -i check_only=0
|
|
||||||
local -i verbosity=1
|
|
||||||
local -r _version='1.0.0'
|
|
||||||
|
|
||||||
fpath=("${SCRIPT_HOME}/.functions" ${fpath})
|
|
||||||
autoload -Uz log_info log_error log_output set_loglevel log_status log_warning
|
|
||||||
|
|
||||||
local -r _usage="
|
|
||||||
Usage: %B${functrace[1]%:*}%b <option>
|
|
||||||
|
|
||||||
%BOptions%b:
|
|
||||||
|
|
||||||
%F{yellow} Formatting options%f
|
|
||||||
-----------------------------------------------------------------------------
|
|
||||||
%B-c | --check%b Check only, no actual formatting takes place
|
|
||||||
|
|
||||||
%F{yellow} Output options%f
|
|
||||||
-----------------------------------------------------------------------------
|
|
||||||
%B-v | --verbose%b Verbose (more detailed output)
|
|
||||||
%B--fail-[never|error] Fail script never/on formatting change - default: %B%F{green}never%f%b
|
|
||||||
%B--debug%b Debug (very detailed and added output)
|
|
||||||
|
|
||||||
%F{yellow} General options%f
|
|
||||||
-----------------------------------------------------------------------------
|
|
||||||
%B-h | --help%b Print this usage help
|
|
||||||
%B-V | --version%b Print script version information"
|
|
||||||
|
|
||||||
local -a args
|
|
||||||
while (( # )) {
|
|
||||||
case ${1} {
|
|
||||||
--)
|
|
||||||
shift
|
|
||||||
args+=($@)
|
|
||||||
break
|
|
||||||
;;
|
|
||||||
-c|--check) check_only=1; shift ;;
|
|
||||||
-v|--verbose) (( _verbosity += 1 )); shift ;;
|
|
||||||
-h|--help) log_output ${_usage}; exit 0 ;;
|
|
||||||
-V|--version) print -Pr "${_version}"; exit 0 ;;
|
|
||||||
--debug) verbosity=3; shift ;;
|
|
||||||
--fail-never)
|
|
||||||
fail_on_error=0
|
|
||||||
shift
|
|
||||||
;;
|
|
||||||
--fail-error)
|
|
||||||
fail_on_error=1
|
|
||||||
shift
|
|
||||||
;;
|
|
||||||
--fail-fast)
|
|
||||||
fail_on_error=2
|
|
||||||
shift
|
|
||||||
;;
|
|
||||||
*) log_error "Unknown option: %B${1}%b"; log_output ${_usage}; exit 2 ;;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
set -- ${(@)args}
|
|
||||||
set_loglevel ${verbosity}
|
|
||||||
|
|
||||||
invoke_formatter ${FORMATTER_NAME}
|
|
||||||
}
|
|
||||||
|
|
||||||
run_format ${@}
|
|
||||||
@@ -1,168 +0,0 @@
|
|||||||
#!/usr/bin/env python3
|
|
||||||
|
|
||||||
import argparse
|
|
||||||
import os
|
|
||||||
import re
|
|
||||||
import sys
|
|
||||||
|
|
||||||
defaultLocaleFile = "en-US.ini"
|
|
||||||
commentChars = ";#"
|
|
||||||
|
|
||||||
|
|
||||||
class localeEntry:
|
|
||||||
locale = ""
|
|
||||||
widgetPlaceholders = []
|
|
||||||
qStringArgs = []
|
|
||||||
lineNum = -1
|
|
||||||
|
|
||||||
def __init__(self, locale, widgetPlaceholders, qStringArgs, lineNum) -> None:
|
|
||||||
self.locale = locale
|
|
||||||
self.widgetPlaceholders = widgetPlaceholders
|
|
||||||
self.qStringArgs = qStringArgs
|
|
||||||
self.lineNum = lineNum
|
|
||||||
|
|
||||||
|
|
||||||
def isCommentLine(line):
|
|
||||||
for char in commentChars:
|
|
||||||
if line.startswith(char):
|
|
||||||
return True
|
|
||||||
return False
|
|
||||||
|
|
||||||
|
|
||||||
def getNonDefaultLocales(dir):
|
|
||||||
files = []
|
|
||||||
for filename in os.listdir(dir):
|
|
||||||
f = os.path.join(dir, filename)
|
|
||||||
if os.path.isfile(f) and not f.endswith(defaultLocaleFile):
|
|
||||||
files.append(f)
|
|
||||||
|
|
||||||
return files
|
|
||||||
|
|
||||||
|
|
||||||
def getAllLocaleEntries(file):
|
|
||||||
localeEntries = []
|
|
||||||
with open(file, "r", encoding="UTF-8") as f:
|
|
||||||
for lineNum, line in enumerate(f):
|
|
||||||
widgetPlaceholders = []
|
|
||||||
qStringArgs = []
|
|
||||||
|
|
||||||
if isCommentLine(line):
|
|
||||||
continue
|
|
||||||
|
|
||||||
for word in line.split("{{"):
|
|
||||||
if not "}}" in word:
|
|
||||||
continue
|
|
||||||
placeholder = "{{" + word[: word.rfind("}}")] + "}}"
|
|
||||||
widgetPlaceholders.append(placeholder)
|
|
||||||
|
|
||||||
for match in re.finditer(r"%\d+", line):
|
|
||||||
qStringArgs.append(match.group(0))
|
|
||||||
|
|
||||||
localeEntries.append(
|
|
||||||
localeEntry(
|
|
||||||
line.split("=")[0], widgetPlaceholders, qStringArgs, lineNum + 1
|
|
||||||
)
|
|
||||||
)
|
|
||||||
|
|
||||||
return localeEntries
|
|
||||||
|
|
||||||
|
|
||||||
def getLocaleEntryFrom(entry, list):
|
|
||||||
for element in list:
|
|
||||||
if element.locale == entry.locale:
|
|
||||||
return element
|
|
||||||
|
|
||||||
return None
|
|
||||||
|
|
||||||
|
|
||||||
def checkLocaleEntries(file, expectedLocaleEntries):
|
|
||||||
localeEntries = getAllLocaleEntries(file)
|
|
||||||
result = True
|
|
||||||
|
|
||||||
for localeEntry in localeEntries:
|
|
||||||
expectedLocaleEntry = getLocaleEntryFrom(localeEntry, expectedLocaleEntries)
|
|
||||||
|
|
||||||
if expectedLocaleEntry is None:
|
|
||||||
result = False
|
|
||||||
print(
|
|
||||||
'ERROR: Locale entry "{}" from "{}:{}" not found in "{}"'.format(
|
|
||||||
localeEntry.locale, file, localeEntry.lineNum, defaultLocaleFile
|
|
||||||
)
|
|
||||||
)
|
|
||||||
continue
|
|
||||||
|
|
||||||
for placeholder in localeEntry.widgetPlaceholders:
|
|
||||||
if placeholder not in expectedLocaleEntry.widgetPlaceholders:
|
|
||||||
result = False
|
|
||||||
print(
|
|
||||||
'ERROR: Locale entry "{}" from "{}:{}" does contain "{}" widget placeholder while "{}:{}" does not'.format(
|
|
||||||
localeEntry.locale,
|
|
||||||
file,
|
|
||||||
localeEntry.lineNum,
|
|
||||||
placeholder,
|
|
||||||
defaultLocaleFile,
|
|
||||||
expectedLocaleEntry.lineNum,
|
|
||||||
)
|
|
||||||
)
|
|
||||||
|
|
||||||
for placeholder in expectedLocaleEntry.widgetPlaceholders:
|
|
||||||
if placeholder not in localeEntry.widgetPlaceholders:
|
|
||||||
result = False
|
|
||||||
print(
|
|
||||||
'ERROR: Locale entry "{}" from "{}:{}" does not contain "{}" widget placeholder'.format(
|
|
||||||
localeEntry.locale, file, localeEntry.lineNum, placeholder
|
|
||||||
)
|
|
||||||
)
|
|
||||||
|
|
||||||
for arg in localeEntry.qStringArgs:
|
|
||||||
if arg not in expectedLocaleEntry.qStringArgs:
|
|
||||||
result = False
|
|
||||||
print(
|
|
||||||
'ERROR: Locale entry "{}" from "{}:{}" does contain "{}" QString arg while "{}:{}" does not'.format(
|
|
||||||
localeEntry.locale,
|
|
||||||
file,
|
|
||||||
localeEntry.lineNum,
|
|
||||||
arg,
|
|
||||||
defaultLocaleFile,
|
|
||||||
expectedLocaleEntry.lineNum,
|
|
||||||
)
|
|
||||||
)
|
|
||||||
|
|
||||||
for arg in expectedLocaleEntry.qStringArgs:
|
|
||||||
if arg not in localeEntry.qStringArgs:
|
|
||||||
result = False
|
|
||||||
print(
|
|
||||||
'ERROR: Locale entry "{}" from "{}:{}" does not contain "{}" QString arg'.format(
|
|
||||||
localeEntry.locale, file, localeEntry.lineNum, arg
|
|
||||||
)
|
|
||||||
)
|
|
||||||
|
|
||||||
return result
|
|
||||||
|
|
||||||
|
|
||||||
def main():
|
|
||||||
parser = argparse.ArgumentParser(
|
|
||||||
description="Checks for inconsistencies regarding widget placeholders in the different locale files."
|
|
||||||
)
|
|
||||||
parser.add_argument("-p", "--path", help="Path to locale folder", required=True)
|
|
||||||
args = parser.parse_args()
|
|
||||||
|
|
||||||
defaultLocaleEntries = getAllLocaleEntries(
|
|
||||||
os.path.join(args.path, defaultLocaleFile)
|
|
||||||
)
|
|
||||||
nonDefaultLocales = getNonDefaultLocales(args.path)
|
|
||||||
|
|
||||||
result = True
|
|
||||||
for file in nonDefaultLocales:
|
|
||||||
if checkLocaleEntries(file, defaultLocaleEntries) == False:
|
|
||||||
result = False
|
|
||||||
|
|
||||||
if result == False:
|
|
||||||
sys.exit(1)
|
|
||||||
|
|
||||||
print("SUCCESS: No issues found!")
|
|
||||||
sys.exit(0)
|
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
|
||||||
main()
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
.run-format.zsh
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
.run-format.zsh
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
.run-format.zsh
|
|
||||||
@@ -1,48 +0,0 @@
|
|||||||
{
|
|
||||||
"dependencies": {
|
|
||||||
"obs-studio": {
|
|
||||||
"version": "30.1.2",
|
|
||||||
"baseUrl": "https://github.com/obsproject/obs-studio/archive/refs/tags",
|
|
||||||
"label": "OBS sources",
|
|
||||||
"hashes": {
|
|
||||||
"macos": "490bae1c392b3b344b0270afd8cb887da4bc50bd92c0c426e96713c1ccb9701a",
|
|
||||||
"windows-x64": "c2dd03fa7fd01fad5beafce8f7156da11f9ed9a588373fd40b44a06f4c03b867"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"prebuilt": {
|
|
||||||
"version": "2024-03-19",
|
|
||||||
"baseUrl": "https://github.com/obsproject/obs-deps/releases/download",
|
|
||||||
"label": "Pre-Built obs-deps",
|
|
||||||
"hashes": {
|
|
||||||
"macos": "2e9bfb55a5e0e4c1086fa1fda4cf268debfead473089df2aaea80e1c7a3ca7ff",
|
|
||||||
"windows-x64": "6e86068371526a967e805f6f9903f9407adb683c21820db5f07da8f30d11e998"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"qt6": {
|
|
||||||
"version": "2024-03-19",
|
|
||||||
"baseUrl": "https://github.com/obsproject/obs-deps/releases/download",
|
|
||||||
"label": "Pre-Built Qt6",
|
|
||||||
"hashes": {
|
|
||||||
"macos": "694f1e639c017e3b1f456f735330dc5afae287cbea85757101af1368de3142c8",
|
|
||||||
"windows-x64": "72d1df34a0ef7413a681d5fcc88cae81da60adc03dcd23ef17862ab170bcc0dd"
|
|
||||||
},
|
|
||||||
"debugSymbols": {
|
|
||||||
"windows-x64": "fbddd1f659c360f2291911ac5709b67b6f8182e6bca519d24712e4f6fd3cc865"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"platformConfig": {
|
|
||||||
"macos": {
|
|
||||||
"bundleId": "com.warmuptill.advanced-scene-switcher"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"name": "advanced-scene-switcher",
|
|
||||||
"displayName": "Advanced Scene Switcher",
|
|
||||||
"version": "1.0.0",
|
|
||||||
"author": "WarmUpTill",
|
|
||||||
"website": "https://github.com/WarmUpTill/SceneSwitcher",
|
|
||||||
"email": "noone@nothing.com",
|
|
||||||
"uuids": {
|
|
||||||
"windowsApp": "A4ADDF26-4426-4D2E-B26A-C7C878DA8FC9"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
279
cmake/GetGitRevisionDescription.cmake
Normal file
279
cmake/GetGitRevisionDescription.cmake
Normal file
@@ -0,0 +1,279 @@
|
|||||||
|
# - Returns a version string from Git
|
||||||
|
#
|
||||||
|
# These functions force a re-configure on each git commit so that you can
|
||||||
|
# trust the values of the variables in your build system.
|
||||||
|
#
|
||||||
|
# get_git_head_revision(<refspecvar> <hashvar> [<additional arguments to git describe> ...])
|
||||||
|
#
|
||||||
|
# Returns the refspec and sha hash of the current head revision
|
||||||
|
#
|
||||||
|
# git_describe(<var> [<additional arguments to git describe> ...])
|
||||||
|
#
|
||||||
|
# Returns the results of git describe on the source tree, and adjusting
|
||||||
|
# the output so that it tests false if an error occurs.
|
||||||
|
#
|
||||||
|
# git_describe_working_tree(<var> [<additional arguments to git describe> ...])
|
||||||
|
#
|
||||||
|
# Returns the results of git describe on the working tree (--dirty option),
|
||||||
|
# and adjusting the output so that it tests false if an error occurs.
|
||||||
|
#
|
||||||
|
# git_get_exact_tag(<var> [<additional arguments to git describe> ...])
|
||||||
|
#
|
||||||
|
# Returns the results of git describe --exact-match on the source tree,
|
||||||
|
# and adjusting the output so that it tests false if there was no exact
|
||||||
|
# matching tag.
|
||||||
|
#
|
||||||
|
# git_local_changes(<var>)
|
||||||
|
#
|
||||||
|
# Returns either "CLEAN" or "DIRTY" with respect to uncommitted changes.
|
||||||
|
# Uses the return code of "git diff-index --quiet HEAD --".
|
||||||
|
# Does not regard untracked files.
|
||||||
|
#
|
||||||
|
# Requires CMake 2.6 or newer (uses the 'function' command)
|
||||||
|
#
|
||||||
|
# Original Author:
|
||||||
|
# 2009-2020 Ryan Pavlik <ryan.pavlik@gmail.com> <abiryan@ryand.net>
|
||||||
|
# http://academic.cleardefinition.com
|
||||||
|
#
|
||||||
|
# Copyright 2009-2013, Iowa State University.
|
||||||
|
# Copyright 2013-2020, Ryan Pavlik
|
||||||
|
# Copyright 2013-2020, Contributors
|
||||||
|
# SPDX-License-Identifier: BSL-1.0
|
||||||
|
# Distributed under the Boost Software License, Version 1.0.
|
||||||
|
# (See accompanying file LICENSE_1_0.txt or copy at
|
||||||
|
# http://www.boost.org/LICENSE_1_0.txt)
|
||||||
|
|
||||||
|
if(__get_git_revision_description)
|
||||||
|
return()
|
||||||
|
endif()
|
||||||
|
set(__get_git_revision_description YES)
|
||||||
|
|
||||||
|
# We must run the following at "include" time, not at function call time,
|
||||||
|
# to find the path to this module rather than the path to a calling list file
|
||||||
|
get_filename_component(_gitdescmoddir ${CMAKE_CURRENT_LIST_FILE} PATH)
|
||||||
|
|
||||||
|
# Function _git_find_closest_git_dir finds the next closest .git directory
|
||||||
|
# that is part of any directory in the path defined by _start_dir.
|
||||||
|
# The result is returned in the parent scope variable whose name is passed
|
||||||
|
# as variable _git_dir_var. If no .git directory can be found, the
|
||||||
|
# function returns an empty string via _git_dir_var.
|
||||||
|
#
|
||||||
|
# Example: Given a path C:/bla/foo/bar and assuming C:/bla/.git exists and
|
||||||
|
# neither foo nor bar contain a file/directory .git. This wil return
|
||||||
|
# C:/bla/.git
|
||||||
|
#
|
||||||
|
function(_git_find_closest_git_dir _start_dir _git_dir_var)
|
||||||
|
set(cur_dir "${_start_dir}")
|
||||||
|
set(git_dir "${_start_dir}/.git")
|
||||||
|
while(NOT EXISTS "${git_dir}")
|
||||||
|
# .git dir not found, search parent directories
|
||||||
|
set(git_previous_parent "${cur_dir}")
|
||||||
|
get_filename_component(cur_dir ${cur_dir} DIRECTORY)
|
||||||
|
if(cur_dir STREQUAL git_previous_parent)
|
||||||
|
# We have reached the root directory, we are not in git
|
||||||
|
set(${_git_dir_var}
|
||||||
|
""
|
||||||
|
PARENT_SCOPE)
|
||||||
|
return()
|
||||||
|
endif()
|
||||||
|
set(git_dir "${cur_dir}/.git")
|
||||||
|
endwhile()
|
||||||
|
set(${_git_dir_var}
|
||||||
|
"${git_dir}"
|
||||||
|
PARENT_SCOPE)
|
||||||
|
endfunction()
|
||||||
|
|
||||||
|
function(get_git_head_revision _refspecvar _hashvar)
|
||||||
|
_git_find_closest_git_dir("${CMAKE_CURRENT_SOURCE_DIR}" GIT_DIR)
|
||||||
|
|
||||||
|
if(NOT "${GIT_DIR}" STREQUAL "")
|
||||||
|
file(RELATIVE_PATH _relative_to_source_dir "${CMAKE_SOURCE_DIR}"
|
||||||
|
"${GIT_DIR}")
|
||||||
|
if("${_relative_to_source_dir}" MATCHES "[.][.]")
|
||||||
|
# We've gone above the CMake root dir.
|
||||||
|
set(GIT_DIR "")
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
if("${GIT_DIR}" STREQUAL "")
|
||||||
|
set(${_refspecvar}
|
||||||
|
"GITDIR-NOTFOUND"
|
||||||
|
PARENT_SCOPE)
|
||||||
|
set(${_hashvar}
|
||||||
|
"GITDIR-NOTFOUND"
|
||||||
|
PARENT_SCOPE)
|
||||||
|
return()
|
||||||
|
endif()
|
||||||
|
|
||||||
|
# Check if the current source dir is a git submodule or a worktree.
|
||||||
|
# In both cases .git is a file instead of a directory.
|
||||||
|
#
|
||||||
|
if(NOT IS_DIRECTORY ${GIT_DIR})
|
||||||
|
# The following git command will return a non empty string that
|
||||||
|
# points to the super project working tree if the current
|
||||||
|
# source dir is inside a git submodule.
|
||||||
|
# Otherwise the command will return an empty string.
|
||||||
|
#
|
||||||
|
execute_process(
|
||||||
|
COMMAND "${GIT_EXECUTABLE}" rev-parse
|
||||||
|
--show-superproject-working-tree
|
||||||
|
WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}"
|
||||||
|
OUTPUT_VARIABLE out
|
||||||
|
ERROR_QUIET OUTPUT_STRIP_TRAILING_WHITESPACE)
|
||||||
|
if(NOT "${out}" STREQUAL "")
|
||||||
|
# If out is empty, GIT_DIR/CMAKE_CURRENT_SOURCE_DIR is in a submodule
|
||||||
|
file(READ ${GIT_DIR} submodule)
|
||||||
|
string(REGEX REPLACE "gitdir: (.*)$" "\\1" GIT_DIR_RELATIVE
|
||||||
|
${submodule})
|
||||||
|
string(STRIP ${GIT_DIR_RELATIVE} GIT_DIR_RELATIVE)
|
||||||
|
get_filename_component(SUBMODULE_DIR ${GIT_DIR} PATH)
|
||||||
|
get_filename_component(GIT_DIR ${SUBMODULE_DIR}/${GIT_DIR_RELATIVE}
|
||||||
|
ABSOLUTE)
|
||||||
|
set(HEAD_SOURCE_FILE "${GIT_DIR}/HEAD")
|
||||||
|
else()
|
||||||
|
# GIT_DIR/CMAKE_CURRENT_SOURCE_DIR is in a worktree
|
||||||
|
file(READ ${GIT_DIR} worktree_ref)
|
||||||
|
# The .git directory contains a path to the worktree information directory
|
||||||
|
# inside the parent git repo of the worktree.
|
||||||
|
#
|
||||||
|
string(REGEX REPLACE "gitdir: (.*)$" "\\1" git_worktree_dir
|
||||||
|
${worktree_ref})
|
||||||
|
string(STRIP ${git_worktree_dir} git_worktree_dir)
|
||||||
|
_git_find_closest_git_dir("${git_worktree_dir}" GIT_DIR)
|
||||||
|
set(HEAD_SOURCE_FILE "${git_worktree_dir}/HEAD")
|
||||||
|
endif()
|
||||||
|
else()
|
||||||
|
set(HEAD_SOURCE_FILE "${GIT_DIR}/HEAD")
|
||||||
|
endif()
|
||||||
|
set(GIT_DATA "${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/git-data")
|
||||||
|
if(NOT EXISTS "${GIT_DATA}")
|
||||||
|
file(MAKE_DIRECTORY "${GIT_DATA}")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if(NOT EXISTS "${HEAD_SOURCE_FILE}")
|
||||||
|
return()
|
||||||
|
endif()
|
||||||
|
set(HEAD_FILE "${GIT_DATA}/HEAD")
|
||||||
|
configure_file("${HEAD_SOURCE_FILE}" "${HEAD_FILE}" COPYONLY)
|
||||||
|
|
||||||
|
configure_file("${_gitdescmoddir}/GetGitRevisionDescription.cmake.in"
|
||||||
|
"${GIT_DATA}/grabRef.cmake" @ONLY)
|
||||||
|
include("${GIT_DATA}/grabRef.cmake")
|
||||||
|
|
||||||
|
set(${_refspecvar}
|
||||||
|
"${HEAD_REF}"
|
||||||
|
PARENT_SCOPE)
|
||||||
|
set(${_hashvar}
|
||||||
|
"${HEAD_HASH}"
|
||||||
|
PARENT_SCOPE)
|
||||||
|
endfunction()
|
||||||
|
|
||||||
|
function(git_describe _var)
|
||||||
|
if(NOT GIT_FOUND)
|
||||||
|
find_package(Git QUIET)
|
||||||
|
endif()
|
||||||
|
get_git_head_revision(refspec hash)
|
||||||
|
if(NOT GIT_FOUND)
|
||||||
|
set(${_var}
|
||||||
|
"GIT-NOTFOUND"
|
||||||
|
PARENT_SCOPE)
|
||||||
|
return()
|
||||||
|
endif()
|
||||||
|
if(NOT hash)
|
||||||
|
set(${_var}
|
||||||
|
"HEAD-HASH-NOTFOUND"
|
||||||
|
PARENT_SCOPE)
|
||||||
|
return()
|
||||||
|
endif()
|
||||||
|
|
||||||
|
# TODO sanitize
|
||||||
|
#if((${ARGN}" MATCHES "&&") OR
|
||||||
|
# (ARGN MATCHES "||") OR
|
||||||
|
# (ARGN MATCHES "\\;"))
|
||||||
|
# message("Please report the following error to the project!")
|
||||||
|
# message(FATAL_ERROR "Looks like someone's doing something nefarious with git_describe! Passed arguments ${ARGN}")
|
||||||
|
#endif()
|
||||||
|
|
||||||
|
#message(STATUS "Arguments to execute_process: ${ARGN}")
|
||||||
|
|
||||||
|
execute_process(
|
||||||
|
COMMAND "${GIT_EXECUTABLE}" describe --tags --always ${hash} ${ARGN}
|
||||||
|
WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}"
|
||||||
|
RESULT_VARIABLE res
|
||||||
|
OUTPUT_VARIABLE out
|
||||||
|
ERROR_QUIET OUTPUT_STRIP_TRAILING_WHITESPACE)
|
||||||
|
if(NOT res EQUAL 0)
|
||||||
|
set(out "${out}-${res}-NOTFOUND")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
set(${_var}
|
||||||
|
"${out}"
|
||||||
|
PARENT_SCOPE)
|
||||||
|
endfunction()
|
||||||
|
|
||||||
|
function(git_describe_working_tree _var)
|
||||||
|
if(NOT GIT_FOUND)
|
||||||
|
find_package(Git QUIET)
|
||||||
|
endif()
|
||||||
|
if(NOT GIT_FOUND)
|
||||||
|
set(${_var}
|
||||||
|
"GIT-NOTFOUND"
|
||||||
|
PARENT_SCOPE)
|
||||||
|
return()
|
||||||
|
endif()
|
||||||
|
|
||||||
|
execute_process(
|
||||||
|
COMMAND "${GIT_EXECUTABLE}" describe --dirty ${ARGN}
|
||||||
|
WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}"
|
||||||
|
RESULT_VARIABLE res
|
||||||
|
OUTPUT_VARIABLE out
|
||||||
|
ERROR_QUIET OUTPUT_STRIP_TRAILING_WHITESPACE)
|
||||||
|
if(NOT res EQUAL 0)
|
||||||
|
set(out "${out}-${res}-NOTFOUND")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
set(${_var}
|
||||||
|
"${out}"
|
||||||
|
PARENT_SCOPE)
|
||||||
|
endfunction()
|
||||||
|
|
||||||
|
function(git_get_exact_tag _var)
|
||||||
|
git_describe(out --exact-match ${ARGN})
|
||||||
|
set(${_var}
|
||||||
|
"${out}"
|
||||||
|
PARENT_SCOPE)
|
||||||
|
endfunction()
|
||||||
|
|
||||||
|
function(git_local_changes _var)
|
||||||
|
if(NOT GIT_FOUND)
|
||||||
|
find_package(Git QUIET)
|
||||||
|
endif()
|
||||||
|
get_git_head_revision(refspec hash)
|
||||||
|
if(NOT GIT_FOUND)
|
||||||
|
set(${_var}
|
||||||
|
"GIT-NOTFOUND"
|
||||||
|
PARENT_SCOPE)
|
||||||
|
return()
|
||||||
|
endif()
|
||||||
|
if(NOT hash)
|
||||||
|
set(${_var}
|
||||||
|
"HEAD-HASH-NOTFOUND"
|
||||||
|
PARENT_SCOPE)
|
||||||
|
return()
|
||||||
|
endif()
|
||||||
|
|
||||||
|
execute_process(
|
||||||
|
COMMAND "${GIT_EXECUTABLE}" diff-index --quiet HEAD --
|
||||||
|
WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}"
|
||||||
|
RESULT_VARIABLE res
|
||||||
|
OUTPUT_VARIABLE out
|
||||||
|
ERROR_QUIET OUTPUT_STRIP_TRAILING_WHITESPACE)
|
||||||
|
if(res EQUAL 0)
|
||||||
|
set(${_var}
|
||||||
|
"CLEAN"
|
||||||
|
PARENT_SCOPE)
|
||||||
|
else()
|
||||||
|
set(${_var}
|
||||||
|
"DIRTY"
|
||||||
|
PARENT_SCOPE)
|
||||||
|
endif()
|
||||||
|
endfunction()
|
||||||
@@ -1,5 +1,5 @@
|
|||||||
#
|
#
|
||||||
# Internal file for get_git_revision_description.cmake.in
|
# Internal file for GetGitRevisionDescription.cmake
|
||||||
#
|
#
|
||||||
# Requires CMake 2.6 or newer (uses the 'function' command)
|
# Requires CMake 2.6 or newer (uses the 'function' command)
|
||||||
#
|
#
|
||||||
@@ -1,349 +0,0 @@
|
|||||||
# --- Helper functions ---#
|
|
||||||
|
|
||||||
if(BUILD_OUT_OF_TREE)
|
|
||||||
if(OS_WINDOWS)
|
|
||||||
set(OBS_PLUGIN_DESTINATION "obs-plugins/64bit")
|
|
||||||
else()
|
|
||||||
set(OBS_PLUGIN_DESTINATION "${CMAKE_INSTALL_LIBDIR}/obs-plugins")
|
|
||||||
endif()
|
|
||||||
endif()
|
|
||||||
|
|
||||||
# --- MACOS section ---
|
|
||||||
if(OS_MACOS)
|
|
||||||
set(ADVSS_BUNDLE_DIR "advanced-scene-switcher.plugin")
|
|
||||||
set(ADVSS_BUNDLE_MODULE_DIR "${ADVSS_BUNDLE_DIR}/Contents/MacOS")
|
|
||||||
set(ADVSS_BUNDLE_PLUGIN_DIR ${ADVSS_BUNDLE_MODULE_DIR}/${ADVSS_PLUGIN_FOLDER})
|
|
||||||
|
|
||||||
function(install_advss_lib_helper target where)
|
|
||||||
install(
|
|
||||||
TARGETS ${target}
|
|
||||||
RUNTIME DESTINATION "${where}" COMPONENT advss_plugins
|
|
||||||
LIBRARY DESTINATION "${where}" COMPONENT advss_plugins
|
|
||||||
FRAMEWORK DESTINATION "${where}" COMPONENT advss_plugins)
|
|
||||||
endfunction()
|
|
||||||
|
|
||||||
function(install_advss_lib target)
|
|
||||||
install_advss_lib_helper(${target} "${ADVSS_BUNDLE_MODULE_DIR}")
|
|
||||||
|
|
||||||
# Tell the advanced scene switcher plugin where to find the lib
|
|
||||||
string(JSON _name GET ${buildspec} name)
|
|
||||||
add_custom_command(
|
|
||||||
TARGET ${_name}
|
|
||||||
POST_BUILD
|
|
||||||
COMMAND
|
|
||||||
${CMAKE_INSTALL_NAME_TOOL} -change @rpath/$<TARGET_FILE_NAME:${target}>
|
|
||||||
@loader_path/$<TARGET_FILE_NAME:${target}> $<TARGET_FILE:${_name}>)
|
|
||||||
endfunction()
|
|
||||||
|
|
||||||
function(install_advss_plugin target)
|
|
||||||
install_advss_lib_helper(${target} "${ADVSS_BUNDLE_PLUGIN_DIR}")
|
|
||||||
endfunction()
|
|
||||||
|
|
||||||
function(install_advss_plugin_dependency_target target dep)
|
|
||||||
install(
|
|
||||||
IMPORTED_RUNTIME_ARTIFACTS
|
|
||||||
${dep}
|
|
||||||
RUNTIME
|
|
||||||
DESTINATION
|
|
||||||
"${ADVSS_BUNDLE_PLUGIN_DIR}"
|
|
||||||
COMPONENT
|
|
||||||
${dep}_Runtime
|
|
||||||
LIBRARY
|
|
||||||
DESTINATION
|
|
||||||
"${ADVSS_BUNDLE_PLUGIN_DIR}"
|
|
||||||
COMPONENT
|
|
||||||
${dep}_Runtime
|
|
||||||
NAMELINK_COMPONENT
|
|
||||||
${dep}_Development)
|
|
||||||
endfunction()
|
|
||||||
|
|
||||||
function(install_advss_plugin_dependency_file target dep)
|
|
||||||
get_filename_component(_FILENAME ${dep} NAME)
|
|
||||||
string(REGEX REPLACE "\\.[^.]*$" "" _FILENAMENOEXT ${_FILENAME})
|
|
||||||
set(_DEP_NAME "${target}-${_FILENAMENOEXT}")
|
|
||||||
|
|
||||||
install(
|
|
||||||
FILES "${dep}"
|
|
||||||
DESTINATION "${ADVSS_BUNDLE_PLUGIN_DIR}"
|
|
||||||
COMPONENT ${_DEP_NAME}_Runtime
|
|
||||||
DESTINATION "${ADVSS_BUNDLE_PLUGIN_DIR}"
|
|
||||||
COMPONENT ${_DEP_NAME}_Runtime
|
|
||||||
NAMELINK_COMPONENT ${_DEP_NAME}_Development)
|
|
||||||
|
|
||||||
install(
|
|
||||||
FILES "${dep}"
|
|
||||||
DESTINATION "${ADVSS_BUNDLE_PLUGIN_DIR}"
|
|
||||||
COMPONENT obs_${_DEP_NAME}
|
|
||||||
EXCLUDE_FROM_ALL
|
|
||||||
DESTINATION "${ADVSS_BUNDLE_PLUGIN_DIR}"
|
|
||||||
COMPONENT obs_${_DEP_NAME}
|
|
||||||
EXCLUDE_FROM_ALL)
|
|
||||||
|
|
||||||
add_custom_command(
|
|
||||||
TARGET ${target}
|
|
||||||
POST_BUILD
|
|
||||||
COMMAND
|
|
||||||
"${CMAKE_COMMAND}" --install ${CMAKE_CURRENT_BINARY_DIR} --config
|
|
||||||
$<CONFIG> --prefix ${CMAKE_INSTALL_PREFIX} --component obs_${_DEP_NAME}
|
|
||||||
COMMENT "Installing ${_DEP_NAME} to OBS rundir\n"
|
|
||||||
VERBATIM)
|
|
||||||
endfunction()
|
|
||||||
|
|
||||||
# --- End of section ---
|
|
||||||
else()
|
|
||||||
# --- Windows / Linux section ---
|
|
||||||
function(plugin_install_helper what where where_deb)
|
|
||||||
if(DEB_INSTALL)
|
|
||||||
if(NOT LIB_OUT_DIR)
|
|
||||||
set(LIB_OUT_DIR "/lib/obs-plugins")
|
|
||||||
endif()
|
|
||||||
install(
|
|
||||||
TARGETS ${what}
|
|
||||||
LIBRARY DESTINATION ${CMAKE_INSTALL_PREFIX}/${LIB_OUT_DIR}/${where_deb})
|
|
||||||
else()
|
|
||||||
install(
|
|
||||||
TARGETS ${what}
|
|
||||||
LIBRARY DESTINATION "${where}"
|
|
||||||
COMPONENT ${what}_Runtime
|
|
||||||
NAMELINK_COMPONENT ${what}_Development
|
|
||||||
RUNTIME DESTINATION "${where}")
|
|
||||||
install(
|
|
||||||
FILES $<TARGET_FILE:${what}>
|
|
||||||
DESTINATION $<CONFIG>/${where}
|
|
||||||
COMPONENT ${what}_rundir
|
|
||||||
EXCLUDE_FROM_ALL)
|
|
||||||
endif()
|
|
||||||
if(OS_WINDOWS)
|
|
||||||
install(
|
|
||||||
FILES $<TARGET_PDB_FILE:${what}>
|
|
||||||
CONFIGURATIONS "RelWithDebInfo" "Debug"
|
|
||||||
DESTINATION ${where}
|
|
||||||
COMPONENT ${what}_Runtime
|
|
||||||
OPTIONAL)
|
|
||||||
install(
|
|
||||||
FILES $<TARGET_PDB_FILE:${what}>
|
|
||||||
CONFIGURATIONS "RelWithDebInfo" "Debug"
|
|
||||||
DESTINATION $<CONFIG>/${where}
|
|
||||||
COMPONENT ${what}_rundir
|
|
||||||
OPTIONAL EXCLUDE_FROM_ALL)
|
|
||||||
endif()
|
|
||||||
if(OBS_OUTPUT_DIR)
|
|
||||||
add_custom_command(
|
|
||||||
TARGET ${what}
|
|
||||||
POST_BUILD
|
|
||||||
COMMAND
|
|
||||||
"${CMAKE_COMMAND}" -DCMAKE_INSTALL_PREFIX=${OBS_OUTPUT_DIR}
|
|
||||||
-DCMAKE_INSTALL_COMPONENT=${what}_rundir
|
|
||||||
-DCMAKE_INSTALL_CONFIG_NAME=$<CONFIG> -P
|
|
||||||
${CMAKE_CURRENT_BINARY_DIR}/cmake_install.cmake
|
|
||||||
COMMENT
|
|
||||||
"Installing ${what} to plugin rundir ${OBS_OUTPUT_DIR}/${where}\n"
|
|
||||||
VERBATIM)
|
|
||||||
endif()
|
|
||||||
endfunction()
|
|
||||||
|
|
||||||
function(install_advss_lib target)
|
|
||||||
plugin_install_helper("${target}" "${OBS_PLUGIN_DESTINATION}" "")
|
|
||||||
if(NOT OS_WINDOWS)
|
|
||||||
set_target_properties(${target} PROPERTIES INSTALL_RPATH "$ORIGIN")
|
|
||||||
endif()
|
|
||||||
endfunction()
|
|
||||||
|
|
||||||
function(install_advss_plugin target)
|
|
||||||
plugin_install_helper(
|
|
||||||
"${target}" "${OBS_PLUGIN_DESTINATION}/${ADVSS_PLUGIN_FOLDER}"
|
|
||||||
"${ADVSS_PLUGIN_FOLDER}")
|
|
||||||
if(NOT OS_WINDOWS)
|
|
||||||
set_target_properties(${target} PROPERTIES INSTALL_RPATH
|
|
||||||
"$ORIGIN:$ORIGIN/..")
|
|
||||||
endif()
|
|
||||||
message(STATUS "ADVSS: ENABLED PLUGIN ${target}")
|
|
||||||
endfunction()
|
|
||||||
|
|
||||||
function(install_advss_plugin_dependency_target target dep)
|
|
||||||
install(
|
|
||||||
IMPORTED_RUNTIME_ARTIFACTS
|
|
||||||
${dep}
|
|
||||||
RUNTIME
|
|
||||||
DESTINATION
|
|
||||||
"${OBS_PLUGIN_DESTINATION}/${ADVSS_PLUGIN_FOLDER}"
|
|
||||||
COMPONENT
|
|
||||||
${dep}_Runtime
|
|
||||||
LIBRARY
|
|
||||||
DESTINATION
|
|
||||||
"${OBS_PLUGIN_DESTINATION}/${ADVSS_PLUGIN_FOLDER}"
|
|
||||||
COMPONENT
|
|
||||||
${dep}_Runtime
|
|
||||||
NAMELINK_COMPONENT
|
|
||||||
${dep}_Development)
|
|
||||||
|
|
||||||
install(
|
|
||||||
IMPORTED_RUNTIME_ARTIFACTS
|
|
||||||
${dep}
|
|
||||||
RUNTIME
|
|
||||||
DESTINATION
|
|
||||||
"${OBS_PLUGIN_DESTINATION}/${ADVSS_PLUGIN_FOLDER}"
|
|
||||||
COMPONENT
|
|
||||||
obs_${dep}
|
|
||||||
EXCLUDE_FROM_ALL
|
|
||||||
LIBRARY
|
|
||||||
DESTINATION
|
|
||||||
"${OBS_PLUGIN_DESTINATION}/${ADVSS_PLUGIN_FOLDER}"
|
|
||||||
COMPONENT
|
|
||||||
obs_${dep}
|
|
||||||
EXCLUDE_FROM_ALL)
|
|
||||||
|
|
||||||
add_custom_command(
|
|
||||||
TARGET ${target}
|
|
||||||
POST_BUILD
|
|
||||||
COMMAND
|
|
||||||
"${CMAKE_COMMAND}" --install .. --config $<CONFIG> --prefix
|
|
||||||
${OBS_OUTPUT_DIR}/$<CONFIG> --component obs_${dep} >
|
|
||||||
"$<IF:$<PLATFORM_ID:Windows>,nul,/dev/null>"
|
|
||||||
COMMENT "Installing ${dep} to OBS rundir\n"
|
|
||||||
VERBATIM)
|
|
||||||
endfunction()
|
|
||||||
|
|
||||||
function(install_advss_plugin_dependency_file target dep)
|
|
||||||
get_filename_component(_FILENAME ${dep} NAME)
|
|
||||||
string(REGEX REPLACE "\\.[^.]*$" "" _FILENAMENOEXT ${_FILENAME})
|
|
||||||
set(_DEP_NAME "${target}-${_FILENAMENOEXT}")
|
|
||||||
|
|
||||||
install(
|
|
||||||
FILES "${dep}"
|
|
||||||
DESTINATION "${OBS_PLUGIN_DESTINATION}/${ADVSS_PLUGIN_FOLDER}"
|
|
||||||
COMPONENT ${_DEP_NAME}_Runtime
|
|
||||||
DESTINATION "${OBS_PLUGIN_DESTINATION}/${ADVSS_PLUGIN_FOLDER}"
|
|
||||||
COMPONENT ${_DEP_NAME}_Runtime
|
|
||||||
NAMELINK_COMPONENT ${_DEP_NAME}_Development)
|
|
||||||
|
|
||||||
install(
|
|
||||||
FILES "${dep}"
|
|
||||||
DESTINATION "${OBS_PLUGIN_DESTINATION}/${ADVSS_PLUGIN_FOLDER}"
|
|
||||||
COMPONENT obs_${_DEP_NAME}
|
|
||||||
EXCLUDE_FROM_ALL
|
|
||||||
DESTINATION "${OBS_PLUGIN_DESTINATION}/${ADVSS_PLUGIN_FOLDER}"
|
|
||||||
COMPONENT obs_${_DEP_NAME}
|
|
||||||
EXCLUDE_FROM_ALL)
|
|
||||||
|
|
||||||
add_custom_command(
|
|
||||||
TARGET ${target}
|
|
||||||
POST_BUILD
|
|
||||||
COMMAND
|
|
||||||
"${CMAKE_COMMAND}" --install .. --config $<CONFIG> --prefix
|
|
||||||
${OBS_OUTPUT_DIR}/$<CONFIG> --component obs_${_DEP_NAME} >
|
|
||||||
"$<IF:$<PLATFORM_ID:Windows>,nul,/dev/null>"
|
|
||||||
COMMENT "Installing ${_DEP_NAME} to OBS rundir\n"
|
|
||||||
VERBATIM)
|
|
||||||
endfunction()
|
|
||||||
endif()
|
|
||||||
|
|
||||||
# --- End of section ---
|
|
||||||
function(setup_obs_lib_dependency target)
|
|
||||||
if(BUILD_OUT_OF_TREE)
|
|
||||||
find_package(libobs)
|
|
||||||
if(libobs_FOUND AND NOT LIBOBS_LIB)
|
|
||||||
target_link_libraries(${target} PUBLIC OBS::libobs)
|
|
||||||
else()
|
|
||||||
if(NOT LIBOBS_LIB)
|
|
||||||
message(FATAL_ERROR "obs library not found - please set LIBOBS_LIB")
|
|
||||||
endif()
|
|
||||||
target_link_libraries(${target} PUBLIC ${LIBOBS_LIB})
|
|
||||||
if(NOT LIBOBS_INCLUDE_DIR)
|
|
||||||
message(
|
|
||||||
FATAL_ERROR "obs.hpp header not found - please set LIBOBS_INCLUDE_DIR"
|
|
||||||
)
|
|
||||||
endif()
|
|
||||||
target_include_directories(${target} PRIVATE ${LIBOBS_INCLUDE_DIR})
|
|
||||||
endif()
|
|
||||||
find_package(obs-frontend-api)
|
|
||||||
if(obs-frontend-api_FOUND AND NOT LIBOBS_FRONTEND_API_LIB)
|
|
||||||
target_link_libraries(${target} PUBLIC OBS::obs-frontend-api)
|
|
||||||
else()
|
|
||||||
if(NOT LIBOBS_FRONTEND_API_LIB)
|
|
||||||
message(
|
|
||||||
FATAL_ERROR
|
|
||||||
"libobs frontend-api library not found - please set LIBOBS_FRONTEND_API_LIB"
|
|
||||||
)
|
|
||||||
endif()
|
|
||||||
target_link_libraries(${target} PUBLIC ${LIBOBS_FRONTEND_API_LIB})
|
|
||||||
if(NOT LIBOBS_FRONTEND_INCLUDE_DIR)
|
|
||||||
message(
|
|
||||||
FATAL_ERROR
|
|
||||||
" obs-frontend-api.h not found - please set LIBOBS_FRONTEND_INCLUDE_DIR"
|
|
||||||
)
|
|
||||||
endif()
|
|
||||||
target_include_directories(${target}
|
|
||||||
PRIVATE ${LIBOBS_FRONTEND_INCLUDE_DIR})
|
|
||||||
endif()
|
|
||||||
else()
|
|
||||||
target_link_libraries(${target} PUBLIC OBS::libobs OBS::frontend-api)
|
|
||||||
endif()
|
|
||||||
endfunction()
|
|
||||||
|
|
||||||
function(setup_advss_plugin target)
|
|
||||||
setup_obs_lib_dependency(${target})
|
|
||||||
find_package(Qt6 REQUIRED COMPONENTS Widgets Core)
|
|
||||||
target_link_libraries(${target} PRIVATE Qt6::Core Qt6::Widgets)
|
|
||||||
|
|
||||||
# Ignore QCheckBox::stateChanged deprecation warning until minimum supported
|
|
||||||
# Qt version is at least Qt 6.7, which introduces QCheckBox::checkStateChanged
|
|
||||||
if(Qt6_VERSION VERSION_GREATER "6.7.0")
|
|
||||||
target_compile_definitions(${target} PRIVATE QT_NO_DEPRECATED_WARNINGS)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
set_target_properties(
|
|
||||||
${target}
|
|
||||||
PROPERTIES AUTOMOC ON
|
|
||||||
AUTOUIC ON
|
|
||||||
AUTORCC ON)
|
|
||||||
|
|
||||||
target_compile_features(${target} PUBLIC cxx_std_17)
|
|
||||||
set_target_properties(${target} PROPERTIES CXX_VISIBILITY_PRESET hidden)
|
|
||||||
|
|
||||||
target_link_libraries(${target} PRIVATE advanced-scene-switcher-lib)
|
|
||||||
|
|
||||||
get_target_property(ADVSS_SOURCE_DIR advanced-scene-switcher-lib SOURCE_DIR)
|
|
||||||
get_target_property(ADVSS_BINARY_DIR advanced-scene-switcher-lib BINARY_DIR)
|
|
||||||
|
|
||||||
if(OS_MACOS)
|
|
||||||
set(_COMMAND
|
|
||||||
"${CMAKE_INSTALL_NAME_TOOL} -add_rpath @loader_path \\\"$<TARGET_FILE:${target}>\\\""
|
|
||||||
)
|
|
||||||
install(CODE "execute_process(COMMAND /bin/sh -c \"${_COMMAND}\")")
|
|
||||||
endif()
|
|
||||||
|
|
||||||
# Set up include directories for headers generated by Qt
|
|
||||||
target_include_directories(
|
|
||||||
${target}
|
|
||||||
PRIVATE "${ADVSS_BINARY_DIR}/advanced-scene-switcher-lib_autogen/include")
|
|
||||||
foreach(_CONF Release RelWithDebInfo Debug MinSizeRe)
|
|
||||||
target_include_directories(
|
|
||||||
${target}
|
|
||||||
PRIVATE
|
|
||||||
"${ADVSS_BINARY_DIR}/advanced-scene-switcher-lib_autogen/include_${_CONF}"
|
|
||||||
)
|
|
||||||
endforeach()
|
|
||||||
|
|
||||||
# General includes
|
|
||||||
target_include_directories(
|
|
||||||
${target}
|
|
||||||
PRIVATE "${ADVSS_SOURCE_DIR}/lib" "${ADVSS_SOURCE_DIR}/lib/legacy"
|
|
||||||
"${ADVSS_SOURCE_DIR}/lib/macro" "${ADVSS_SOURCE_DIR}/lib/utils"
|
|
||||||
"${ADVSS_SOURCE_DIR}/lib/variables" "${ADVSS_SOURCE_DIR}/forms")
|
|
||||||
endfunction()
|
|
||||||
|
|
||||||
function(install_advss_plugin_dependency)
|
|
||||||
cmake_parse_arguments(PARSED_ARGS "" "TARGET" "DEPENDENCIES" ${ARGN})
|
|
||||||
if(NOT PARSED_ARGS_TARGET)
|
|
||||||
message(FATAL_ERROR "You must provide a target")
|
|
||||||
endif()
|
|
||||||
foreach(_DEPENDENCY ${PARSED_ARGS_DEPENDENCIES})
|
|
||||||
if(EXISTS ${_DEPENDENCY})
|
|
||||||
install_advss_plugin_dependency_file(${PARSED_ARGS_TARGET} ${_DEPENDENCY})
|
|
||||||
else()
|
|
||||||
install_advss_plugin_dependency_target(${PARSED_ARGS_TARGET}
|
|
||||||
${_DEPENDENCY})
|
|
||||||
endif()
|
|
||||||
endforeach()
|
|
||||||
endfunction()
|
|
||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user