Compare commits
1 Commits
refac/memo
...
v1.0.98
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
a0a355a8c7 |
@@ -1,84 +0,0 @@
|
||||
---
|
||||
# Language
|
||||
Language: Cpp
|
||||
Standard: Cpp11 # Cpp14 and Cpp17 are not supported by clang 11
|
||||
|
||||
# Indentation
|
||||
TabWidth: 4
|
||||
UseTab: Always
|
||||
IndentWidth: 4
|
||||
ColumnLimit: 120
|
||||
|
||||
# Indentation detail
|
||||
AlignAfterOpenBracket: DontAlign
|
||||
ContinuationIndentWidth: 4
|
||||
BreakConstructorInitializers: BeforeComma
|
||||
ConstructorInitializerIndentWidth: 4
|
||||
ConstructorInitializerAllOnOneLineOrOnePerLine: false
|
||||
BinPackParameters: true
|
||||
BinPackArguments: true
|
||||
AlignOperands: false
|
||||
|
||||
# Alignment
|
||||
AlignEscapedNewlines: DontAlign
|
||||
AccessModifierOffset: -4
|
||||
AllowShortBlocksOnASingleLine: Always
|
||||
AllowShortIfStatementsOnASingleLine: Always
|
||||
AllowShortCaseLabelsOnASingleLine: false
|
||||
AllowShortFunctionsOnASingleLine: InlineOnly
|
||||
BreakBeforeBinaryOperators: All
|
||||
|
||||
# Includes
|
||||
IncludeBlocks: Regroup
|
||||
IncludeCategories:
|
||||
# windows.h must go before everything else
|
||||
# otherwise, you will get errors
|
||||
- Regex: '^<windows.h>$'
|
||||
Priority: -99
|
||||
# the "main header" implicitly gets priority 0
|
||||
# system headers
|
||||
- Regex: '^<[^>]+>$'
|
||||
Priority: 1
|
||||
# non-system headers
|
||||
- Regex: '.*'
|
||||
Priority: 2
|
||||
SortIncludes: true
|
||||
|
||||
# Spaces
|
||||
SpaceBeforeAssignmentOperators: true
|
||||
SpaceBeforeParens: ControlStatements
|
||||
SpacesInAngles: false
|
||||
SpacesInCStyleCastParentheses: false
|
||||
SpacesInParentheses: false
|
||||
|
||||
# Brace wrapping
|
||||
# Not directly mentioned in the coding conventions,
|
||||
# but required to avoid tons of auto reformatting
|
||||
BreakBeforeBraces: Custom
|
||||
BraceWrapping:
|
||||
AfterClass: true
|
||||
AfterControlStatement: Always
|
||||
AfterEnum: true
|
||||
AfterFunction: true
|
||||
AfterNamespace: false
|
||||
AfterStruct: true
|
||||
AfterUnion: true
|
||||
AfterExternBlock: false
|
||||
BeforeCatch: true
|
||||
BeforeElse: true
|
||||
IndentBraces: false
|
||||
SplitEmptyFunction: true
|
||||
SplitEmptyRecord: true
|
||||
SplitEmptyNamespace: true
|
||||
BeforeWhile: false
|
||||
BeforeLambdaBody: false
|
||||
|
||||
# Do not break doxygen comments
|
||||
CommentPragmas: '^[[:space:]]*\\.+'
|
||||
|
||||
# Pointers
|
||||
# Use pointer close to type: `const char* const* function()`
|
||||
PointerAlignment: Left
|
||||
|
||||
...
|
||||
|
||||
51
.clang-tidy
@@ -1,51 +0,0 @@
|
||||
---
|
||||
Checks: >
|
||||
bugprone-macro-parentheses,
|
||||
bugprone-macro-repeated-side-effects,
|
||||
modernize-avoid-c-arrays,
|
||||
modernize-loop-convert,
|
||||
modernize-redundant-void-arg,
|
||||
modernize-use-auto,
|
||||
modernize-use-bool-literals,
|
||||
modernize-use-emplace,
|
||||
modernize-use-equals-default,
|
||||
modernize-use-equals-delete,
|
||||
modernize-use-override,
|
||||
modernize-use-using,
|
||||
performance-trivially-destructible,
|
||||
readability-braces-around-statements,
|
||||
readability-const-return-type,
|
||||
readability-identifier-naming,
|
||||
readability-misleading-indentation,
|
||||
readability-simplify-boolean-expr
|
||||
WarningsAsErrors: ''
|
||||
HeaderFilterRegex: '' # don't show errors from headers
|
||||
AnalyzeTemporaryDtors: false
|
||||
FormatStyle: none
|
||||
User: user
|
||||
CheckOptions:
|
||||
- key: readability-identifier-naming.ClassCase
|
||||
value: CamelCase
|
||||
- key: readability-identifier-naming.EnumCase
|
||||
value: CamelCase
|
||||
- key: readability-identifier-naming.TypedefCase
|
||||
value: CamelCase
|
||||
- key: readability-identifier-naming.UnionCase
|
||||
value: CamelCase
|
||||
- key: readability-identifier-naming.StructCase
|
||||
value: CamelCase
|
||||
- key: readability-identifier-naming.UnionCase
|
||||
value: CamelCase
|
||||
# not yet working, as it currently applies both for static and object members
|
||||
# - key: readability-identifier-naming.MemberPrefix
|
||||
# value: 'm_'
|
||||
# currently only working for local static variables:
|
||||
- key: readability-identifier-naming.StaticVariablePrefix
|
||||
value: 's_'
|
||||
# not yet working
|
||||
# - key: readability-identifier-naming.VariableCase
|
||||
# value: camelBack
|
||||
- key: readability-identifier-naming.FunctionCase
|
||||
value: camelBack
|
||||
...
|
||||
|
||||
@@ -1,5 +0,0 @@
|
||||
root = true
|
||||
|
||||
[*]
|
||||
indent_style = tab
|
||||
tab_width = 4
|
||||
3
.gitattributes
vendored
@@ -1,5 +1,2 @@
|
||||
.gitattributes export-ignore
|
||||
.gitignore export-ignore
|
||||
data/locale/* linguist-documentation
|
||||
* text=auto eol=lf
|
||||
*.{bin,bmp,flac,icns,ico,mmpz,ogg,png,xiz,xmz,wav} binary
|
||||
|
||||
2
.github/FUNDING.yml
vendored
@@ -1,2 +0,0 @@
|
||||
---
|
||||
custom: https://lmms.io/get-involved/#donate
|
||||
91
.github/ISSUE_TEMPLATE/bug_report.yml
vendored
@@ -1,91 +0,0 @@
|
||||
# yamllint disable-file rule:line-length
|
||||
name: Bug Report
|
||||
description: File a bug report to help us improve
|
||||
labels:
|
||||
- bug
|
||||
body:
|
||||
- type: input
|
||||
id: system-information
|
||||
attributes:
|
||||
label: System Information
|
||||
description: |
|
||||
- The operating system you use to run LMMS.
|
||||
- When relevant, also include your hardware information.
|
||||
placeholder: ex. Fedora Linux 39, KDE Plasma 5.27.10 - 13th Gen Intel® Core™ i9-13950HX, 32GB RAM
|
||||
validations:
|
||||
required: true
|
||||
- type: input
|
||||
id: affected-version
|
||||
attributes:
|
||||
label: LMMS Version(s)
|
||||
description: |
|
||||
- The version of LMMS affected by the bug.
|
||||
- Can be an official version number, nightly release identifier, or commit hash.
|
||||
- The version number can be found under the Help > About menu.
|
||||
placeholder: ex. 1.2.2, 1.3.0-alpha.1.518+gdd53bec31, 2d185df
|
||||
validations:
|
||||
required: true
|
||||
- type: input
|
||||
id: working-version
|
||||
attributes:
|
||||
label: Most Recent Working Version
|
||||
description: |
|
||||
- If there is a previous version of LMMS that did not exhibit the bug, include it here.
|
||||
placeholder: ex. 1.2.2, 1.3.0-alpha.1.518+gdd53bec31, 2d185df
|
||||
validations:
|
||||
required: false
|
||||
- type: textarea
|
||||
id: bug-summary
|
||||
attributes:
|
||||
label: Bug Summary
|
||||
description: Briefly describe the bug.
|
||||
validations:
|
||||
required: true
|
||||
- type: textarea
|
||||
id: expected-behaviour
|
||||
attributes:
|
||||
label: Expected Behaviour
|
||||
description: Describe what should have happened.
|
||||
validations:
|
||||
required: true
|
||||
- type: textarea
|
||||
id: steps-to-reproduce
|
||||
attributes:
|
||||
label: Steps To Reproduce
|
||||
description: |
|
||||
- Describe the minimum set of steps required to reproduce this bug.
|
||||
- If you included a minimum reproducible project below, you can describe here how it should be used.
|
||||
validations:
|
||||
required: true
|
||||
- type: textarea
|
||||
id: logs
|
||||
attributes:
|
||||
label: Logs
|
||||
description: |
|
||||
- Copy and paste any relevant log output here.
|
||||
value: |
|
||||
<details>
|
||||
<summary>Click to expand</summary>
|
||||
<pre>
|
||||
<!-- paste logs here -->
|
||||
</pre>
|
||||
</details>
|
||||
validations:
|
||||
required: false
|
||||
- type: textarea
|
||||
id: supporting-files
|
||||
attributes:
|
||||
label: Screenshots / Minimum Reproducible Project
|
||||
description: |
|
||||
- Upload any screenshots showing the bug in action.
|
||||
- If possible, also include a .mmp/.mmpz project containing the simplest possible
|
||||
setup needed to reproduce the bug.
|
||||
|
||||
***Note:** To upload a project file to GitHub, it will need to be placed in a .zip archive.*
|
||||
- type: checkboxes
|
||||
id: search-for-existing
|
||||
attributes:
|
||||
label: Please search the issue tracker for existing bug reports before submitting your own.
|
||||
options:
|
||||
- label: I have searched all existing issues and confirmed that this is not a duplicate.
|
||||
required: true
|
||||
5
.github/ISSUE_TEMPLATE/config.yml
vendored
@@ -1,5 +0,0 @@
|
||||
---
|
||||
contact_links:
|
||||
- name: Get help on Discord
|
||||
url: https://lmms.io/chat/
|
||||
about: Need help? Have a question? Reach out to other LMMS users on our Discord server!
|
||||
32
.github/ISSUE_TEMPLATE/feature_request.yml
vendored
@@ -1,32 +0,0 @@
|
||||
# yamllint disable-file rule:line-length
|
||||
name: Feature Request
|
||||
description: Suggest an idea for the project
|
||||
labels:
|
||||
- "enhancement"
|
||||
body:
|
||||
- type: textarea
|
||||
id: enhancement-summary
|
||||
attributes:
|
||||
label: Enhancement Summary
|
||||
description: |
|
||||
- Briefly describe the enhancement.
|
||||
- Explain why you believe the proposed enhancement to be a good idea, and (if applicable) how it helps
|
||||
overcome a limitation of LMMS you are currently facing.
|
||||
validations:
|
||||
required: true
|
||||
- type: textarea
|
||||
id: mockup
|
||||
attributes:
|
||||
label: Implementation Details / Mockup
|
||||
description: |
|
||||
- Explain how you believe this enhancement should be implemented.
|
||||
- If your proposal encompasses changes to the user interface, include diagrams displaying your intent.
|
||||
validations:
|
||||
required: true
|
||||
- type: checkboxes
|
||||
id: search-for-existing
|
||||
attributes:
|
||||
label: Please search the issue tracker for existing feature requests before submitting your own.
|
||||
options:
|
||||
- label: I have searched all existing issues and confirmed that this is not a duplicate.
|
||||
required: true
|
||||
3
.github/no-response.yml
vendored
@@ -1,3 +0,0 @@
|
||||
---
|
||||
# Label requiring a response
|
||||
responseRequiredLabel: "response required"
|
||||
331
.github/workflows/build.yml
vendored
@@ -1,331 +0,0 @@
|
||||
---
|
||||
name: build
|
||||
'on': [push, pull_request]
|
||||
concurrency:
|
||||
group: ${{ github.workflow }}-${{ github.ref }}
|
||||
cancel-in-progress: true
|
||||
jobs:
|
||||
linux:
|
||||
name: linux
|
||||
runs-on: ubuntu-latest
|
||||
container: ghcr.io/lmms/linux.gcc:20.04
|
||||
env:
|
||||
CMAKE_OPTS: >-
|
||||
-DUSE_WERROR=ON
|
||||
-DCMAKE_BUILD_TYPE=RelWithDebInfo
|
||||
-DUSE_COMPILE_CACHE=ON
|
||||
CCACHE_MAXSIZE: 0
|
||||
CCACHE_NOCOMPRESS: 1
|
||||
MAKEFLAGS: -j2
|
||||
steps:
|
||||
- name: Configure git
|
||||
run: git config --global --add safe.directory "$GITHUB_WORKSPACE"
|
||||
- name: Check out
|
||||
uses: actions/checkout@v3
|
||||
with:
|
||||
fetch-depth: 0
|
||||
submodules: recursive
|
||||
- name: Cache ccache data
|
||||
uses: actions/cache@v3
|
||||
with:
|
||||
key: ccache-${{ github.job }}-${{ github.ref }}-${{ github.run_id }}
|
||||
restore-keys: |
|
||||
ccache-${{ github.job }}-${{ github.ref }}-
|
||||
ccache-${{ github.job }}-
|
||||
path: ~/.ccache
|
||||
- name: Configure
|
||||
run: |
|
||||
ccache --zero-stats
|
||||
source /opt/qt5*/bin/qt5*-env.sh || true
|
||||
cmake -S . \
|
||||
-B build \
|
||||
-DCMAKE_INSTALL_PREFIX=./install \
|
||||
$CMAKE_OPTS
|
||||
- name: Build
|
||||
run: cmake --build build
|
||||
- name: Run tests
|
||||
run: |
|
||||
cd build/tests
|
||||
ctest --output-on-failure -j2
|
||||
- name: Package
|
||||
run: |
|
||||
cmake --build build --target install
|
||||
cmake --build build --target appimage
|
||||
- name: Upload artifacts
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: linux
|
||||
path: build/lmms-*.AppImage
|
||||
- name: Trim ccache and print statistics
|
||||
run: |
|
||||
ccache --cleanup
|
||||
echo "[ccache config]"
|
||||
ccache --show-config
|
||||
echo "[ccache stats]"
|
||||
ccache --show-stats
|
||||
env:
|
||||
CCACHE_MAXSIZE: 500M
|
||||
macos:
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
arch: [ x86_64, arm64 ]
|
||||
include:
|
||||
- arch: x86_64
|
||||
os: macos-12
|
||||
xcode: "13.1"
|
||||
- arch: arm64
|
||||
os: macos-14
|
||||
xcode: "14.3.1"
|
||||
name: macos-${{ matrix.arch }}
|
||||
runs-on: ${{ matrix.os }}
|
||||
env:
|
||||
CMAKE_OPTS: >-
|
||||
-Werror=dev
|
||||
-DUSE_WERROR=ON
|
||||
-DCMAKE_BUILD_TYPE=RelWithDebInfo
|
||||
-DUSE_COMPILE_CACHE=ON
|
||||
CCACHE_MAXSIZE: 0
|
||||
CCACHE_NOCOMPRESS: 1
|
||||
MAKEFLAGS: -j3
|
||||
DEVELOPER_DIR: /Applications/Xcode_${{ matrix.xcode }}.app/Contents/Developer
|
||||
steps:
|
||||
- name: Check out
|
||||
uses: actions/checkout@v3
|
||||
with:
|
||||
fetch-depth: 0
|
||||
submodules: recursive
|
||||
- name: Clean up Homebrew download cache
|
||||
run: rm -rf ~/Library/Caches/Homebrew/downloads
|
||||
- name: Restore Homebrew download cache
|
||||
id: cache-homebrew
|
||||
uses: actions/cache/restore@v3
|
||||
with:
|
||||
key: n/a - only restore from restore-keys
|
||||
restore-keys: |
|
||||
homebrew-${{ matrix.arch }}-
|
||||
path: ~/Library/Caches/Homebrew/downloads
|
||||
- name: Cache ccache data
|
||||
uses: actions/cache@v3
|
||||
with:
|
||||
key: "ccache-${{ github.job }}-${{ matrix.arch }}-${{ github.ref }}\
|
||||
-${{ github.run_id }}"
|
||||
restore-keys: |
|
||||
ccache-${{ github.job }}-${{ matrix.arch }}-${{ github.ref }}-
|
||||
ccache-${{ github.job }}-${{ matrix.arch }}-
|
||||
path: ~/Library/Caches/ccache
|
||||
- name: Install dependencies
|
||||
run: |
|
||||
brew bundle install --verbose
|
||||
npm update -g npm
|
||||
npm install --location=global appdmg
|
||||
env:
|
||||
HOMEBREW_NO_AUTO_UPDATE: 1
|
||||
HOMEBREW_NO_INSTALL_UPGRADE: 1
|
||||
HOMEBREW_NO_INSTALLED_DEPENDENTS_CHECK: 1
|
||||
- name: Configure
|
||||
run: |
|
||||
ccache --zero-stats
|
||||
mkdir build
|
||||
cmake -S . \
|
||||
-B build \
|
||||
-DCMAKE_INSTALL_PREFIX="../target" \
|
||||
-DCMAKE_PREFIX_PATH="$(brew --prefix qt@5)" \
|
||||
-DCMAKE_OSX_ARCHITECTURES=${{ matrix.arch }} \
|
||||
$CMAKE_OPTS \
|
||||
-DUSE_WERROR=OFF
|
||||
- name: Build
|
||||
run: cmake --build build
|
||||
- name: Run tests
|
||||
run: |
|
||||
cd build/tests
|
||||
ctest --output-on-failure -j3
|
||||
- name: Package
|
||||
run: |
|
||||
cmake --build build --target install
|
||||
cmake --build build --target dmg
|
||||
- name: Upload artifacts
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: macos-${{ matrix.arch }}
|
||||
path: build/lmms-*.dmg
|
||||
- name: Trim ccache and print statistics
|
||||
run: |
|
||||
ccache --cleanup
|
||||
echo "[ccache config]"
|
||||
ccache --show-config
|
||||
echo "[ccache stats]"
|
||||
ccache --show-stats --verbose
|
||||
env:
|
||||
CCACHE_MAXSIZE: 500MB
|
||||
- name: Save Homebrew download cache
|
||||
if: ${{ steps.cache-homebrew.outputs.cache-matched-key != env.key }}
|
||||
uses: actions/cache/save@v3
|
||||
with:
|
||||
key: ${{ env.key }}
|
||||
path: ~/Library/Caches/Homebrew/downloads
|
||||
env:
|
||||
key: "homebrew-${{ matrix.arch }}\
|
||||
-${{ hashFiles('Brewfile.lock.json') }}"
|
||||
mingw:
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
arch: ['32', '64']
|
||||
name: mingw${{ matrix.arch }}
|
||||
runs-on: ubuntu-latest
|
||||
container: ghcr.io/lmms/linux.mingw:20.04
|
||||
env:
|
||||
CMAKE_OPTS: >-
|
||||
-Werror=dev
|
||||
-DUSE_WERROR=ON
|
||||
-DCMAKE_BUILD_TYPE=RelWithDebInfo
|
||||
-DUSE_COMPILE_CACHE=ON
|
||||
CCACHE_MAXSIZE: 0
|
||||
CCACHE_NOCOMPRESS: 1
|
||||
MAKEFLAGS: -j2
|
||||
steps:
|
||||
- name: Enable POSIX MinGW
|
||||
run: |
|
||||
update-alternatives --set i686-w64-mingw32-gcc /usr/bin/i686-w64-mingw32-gcc-posix
|
||||
update-alternatives --set i686-w64-mingw32-g++ /usr/bin/i686-w64-mingw32-g++-posix
|
||||
update-alternatives --set x86_64-w64-mingw32-gcc /usr/bin/x86_64-w64-mingw32-gcc-posix
|
||||
update-alternatives --set x86_64-w64-mingw32-g++ /usr/bin/x86_64-w64-mingw32-g++-posix
|
||||
- name: Configure git
|
||||
run: git config --global --add safe.directory "$GITHUB_WORKSPACE"
|
||||
- name: Check out
|
||||
uses: actions/checkout@v3
|
||||
with:
|
||||
fetch-depth: 0
|
||||
submodules: recursive
|
||||
- name: Cache ccache data
|
||||
uses: actions/cache@v3
|
||||
with:
|
||||
key: "ccache-${{ github.job }}-${{ matrix.arch }}-${{ github.ref }}\
|
||||
-${{ github.run_id }}"
|
||||
restore-keys: |
|
||||
ccache-${{ github.job }}-${{ matrix.arch }}-${{ github.ref }}-
|
||||
ccache-${{ github.job }}-${{ matrix.arch }}-
|
||||
path: ~/.ccache
|
||||
- name: Configure
|
||||
run: |
|
||||
ccache --zero-stats
|
||||
cmake -S . \
|
||||
-B build \
|
||||
-DCMAKE_INSTALL_PREFIX=./install \
|
||||
-DCMAKE_TOOLCHAIN_FILE="./cmake/toolchains/MinGW-W64-${{ matrix.arch }}.cmake" \
|
||||
$CMAKE_OPTS
|
||||
- name: Build
|
||||
run: cmake --build build
|
||||
- name: Package
|
||||
run: cmake --build build --target package
|
||||
- name: Upload artifacts
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: mingw${{ matrix.arch }}
|
||||
path: build/lmms-*.exe
|
||||
- name: Trim ccache and print statistics
|
||||
run: |
|
||||
ccache --cleanup
|
||||
echo "[ccache config]"
|
||||
ccache --show-config
|
||||
echo "[ccache stats]"
|
||||
ccache --show-stats
|
||||
env:
|
||||
CCACHE_MAXSIZE: 500M
|
||||
msvc:
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
arch: ['x86', 'x64']
|
||||
name: msvc-${{ matrix.arch }}
|
||||
runs-on: windows-2019
|
||||
env:
|
||||
CCACHE_MAXSIZE: 0
|
||||
CCACHE_NOCOMPRESS: 1
|
||||
steps:
|
||||
- name: Check out
|
||||
uses: actions/checkout@v3
|
||||
with:
|
||||
fetch-depth: 0
|
||||
submodules: recursive
|
||||
- name: Cache vcpkg dependencies
|
||||
id: cache-deps
|
||||
uses: actions/cache@v3
|
||||
with:
|
||||
key: vcpkg-${{ matrix.arch }}-${{ hashFiles('vcpkg.json') }}
|
||||
restore-keys: |
|
||||
vcpkg-${{ matrix.arch }}-
|
||||
path: build\vcpkg_installed
|
||||
- name: Cache ccache data
|
||||
uses: actions/cache@v3
|
||||
with:
|
||||
# yamllint disable rule:line-length
|
||||
key: "ccache-${{ github.job }}-${{ matrix.arch }}-${{ github.ref }}\
|
||||
-${{ github.run_id }}"
|
||||
restore-keys: |
|
||||
ccache-${{ github.job }}-${{ matrix.arch }}-${{ github.ref }}-
|
||||
ccache-${{ github.job }}-${{ matrix.arch }}-
|
||||
path: ~\AppData\Local\ccache
|
||||
# yamllint enable rule:line-length
|
||||
- name: Install tools
|
||||
run: choco install ccache
|
||||
- name: Install Qt
|
||||
uses: jurplel/install-qt-action@b3ea5275e37b734d027040e2c7fe7a10ea2ef946
|
||||
with:
|
||||
version: '5.15.2'
|
||||
arch: |-
|
||||
${{
|
||||
fromJSON('
|
||||
{
|
||||
"x86": "win32_msvc2019",
|
||||
"x64": "win64_msvc2019_64"
|
||||
}
|
||||
')[matrix.arch]
|
||||
}}
|
||||
archives: qtbase qtsvg qttools
|
||||
cache: true
|
||||
- name: Set up build environment
|
||||
uses: ilammy/msvc-dev-cmd@cec98b9d092141f74527d0afa6feb2af698cfe89
|
||||
with:
|
||||
arch: ${{ matrix.arch }}
|
||||
- name: Configure
|
||||
run: |
|
||||
ccache --zero-stats
|
||||
mkdir build -Force
|
||||
cmake -S . `
|
||||
-B build `
|
||||
-G Ninja `
|
||||
--toolchain C:/vcpkg/scripts/buildsystems/vcpkg.cmake `
|
||||
-Werror=dev `
|
||||
-DCMAKE_BUILD_TYPE=RelWithDebInfo `
|
||||
-DUSE_COMPILE_CACHE=ON `
|
||||
-DUSE_WERROR=ON `
|
||||
-DVCPKG_TARGET_TRIPLET="${{ matrix.arch }}-windows" `
|
||||
-DVCPKG_HOST_TRIPLET="${{ matrix.arch }}-windows" `
|
||||
-DVCPKG_MANIFEST_INSTALL="${{ env.should_install_manifest }}"
|
||||
env:
|
||||
should_install_manifest:
|
||||
${{ steps.cache-deps.outputs.cache-hit == 'true' && 'NO' || 'YES' }}
|
||||
- name: Build
|
||||
run: cmake --build build
|
||||
- name: Run tests
|
||||
run: |
|
||||
cd build/tests
|
||||
ctest --output-on-failure -j2
|
||||
- name: Package
|
||||
run: cmake --build build --target package
|
||||
- name: Upload artifacts
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: msvc-${{ matrix.arch }}
|
||||
path: build\lmms-*.exe
|
||||
- name: Trim ccache and print statistics
|
||||
run: |
|
||||
ccache --cleanup
|
||||
echo "[ccache config]"
|
||||
ccache --show-config
|
||||
echo "[ccache stats]"
|
||||
ccache --show-stats --verbose
|
||||
env:
|
||||
CCACHE_MAXSIZE: 500MB
|
||||
40
.github/workflows/checks.yml
vendored
@@ -1,40 +0,0 @@
|
||||
---
|
||||
name: checks
|
||||
'on': [push, pull_request]
|
||||
concurrency:
|
||||
group: ${{ github.workflow }}-${{ github.ref }}
|
||||
cancel-in-progress: true
|
||||
jobs:
|
||||
scripted-checks:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- name: Install python-tinycss2
|
||||
run: sudo apt-get install -y python3-tinycss2
|
||||
- name: Update submodules
|
||||
run: git submodule update --init --recursive
|
||||
- name: Verify scripted tests
|
||||
run: tests/scripted/verify
|
||||
- name: Run check-strings
|
||||
run: tests/scripted/check-strings
|
||||
- name: Run check-namespace
|
||||
run: tests/scripted/check-namespace
|
||||
shellcheck:
|
||||
runs-on: ubuntu-latest
|
||||
container: koalaman/shellcheck-alpine:v0.9.0
|
||||
steps:
|
||||
- name: Check out
|
||||
uses: actions/checkout@v3
|
||||
- name: Run shellcheck
|
||||
run: |
|
||||
shellcheck \
|
||||
$(find "./cmake/" -type f -name '*.sh' -o -name "*.sh.in") \
|
||||
doc/bash-completion/lmms \
|
||||
buildtools/update_locales
|
||||
yamllint:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Check out
|
||||
uses: actions/checkout@v3
|
||||
- name: Run yamllint
|
||||
run: for i in $(git ls-files '*.yml'); do yamllint $i; done
|
||||
15
.gitignore
vendored
@@ -1,12 +1,9 @@
|
||||
/build/
|
||||
/target/
|
||||
/build
|
||||
/target
|
||||
.*.sw?
|
||||
.DS_Store
|
||||
*~
|
||||
/CMakeLists.txt.user
|
||||
/plugins/ZynAddSubFx/zynaddsubfx/ExternalPrograms/Controller/Makefile
|
||||
/plugins/ZynAddSubFx/zynaddsubfx/ExternalPrograms/Spliter/Makefile
|
||||
/plugins/ZynAddSubFx/zynaddsubfx/doc/Makefile
|
||||
/plugins/ZynAddSubFx/zynaddsubfx/doc/gen/Makefile
|
||||
/data/locale/*.qm
|
||||
Brewfile.lock.json
|
||||
/plugins/zynaddsubfx/zynaddsubfx/ExternalPrograms/Controller/Makefile
|
||||
/plugins/zynaddsubfx/zynaddsubfx/ExternalPrograms/Spliter/Makefile
|
||||
/plugins/zynaddsubfx/zynaddsubfx/doc/Makefile
|
||||
/plugins/zynaddsubfx/zynaddsubfx/doc/gen/Makefile
|
||||
|
||||
51
.gitmodules
vendored
@@ -1,51 +0,0 @@
|
||||
[submodule "src/3rdparty/qt5-x11embed"]
|
||||
path = src/3rdparty/qt5-x11embed
|
||||
url = https://github.com/Lukas-W/qt5-x11embed.git
|
||||
[submodule "plugins/ZynAddSubFx/zynaddsubfx"]
|
||||
path = plugins/ZynAddSubFx/zynaddsubfx
|
||||
url = https://github.com/lmms/zynaddsubfx.git
|
||||
[submodule "plugins/FreeBoy/game-music-emu"]
|
||||
path = plugins/FreeBoy/game-music-emu
|
||||
url = https://github.com/libgme/game-music-emu.git
|
||||
[submodule "plugins/OpulenZ/adplug"]
|
||||
path = plugins/OpulenZ/adplug
|
||||
url = https://github.com/adplug/adplug.git
|
||||
[submodule "plugins/LadspaEffect/calf/veal"]
|
||||
path = plugins/LadspaEffect/calf/veal
|
||||
url = https://github.com/lmms/veal
|
||||
[submodule "plugins/Xpressive/exprtk"]
|
||||
path = plugins/Xpressive/exprtk
|
||||
url = https://github.com/ArashPartow/exprtk
|
||||
[submodule "plugins/LadspaEffect/swh/ladspa"]
|
||||
path = plugins/LadspaEffect/swh/ladspa
|
||||
url = https://github.com/swh/ladspa
|
||||
[submodule "plugins/LadspaEffect/tap/tap-plugins"]
|
||||
path = plugins/LadspaEffect/tap/tap-plugins
|
||||
url = https://github.com/lmms/tap-plugins
|
||||
[submodule "src/3rdparty/weakjack/weakjack"]
|
||||
path = src/3rdparty/weakjack/weakjack
|
||||
url = https://github.com/x42/weakjack.git
|
||||
[submodule "src/3rdparty/libcds"]
|
||||
path = src/3rdparty/libcds
|
||||
url = https://github.com/khizmax/libcds.git
|
||||
[submodule "doc/wiki"]
|
||||
path = doc/wiki
|
||||
url = https://github.com/lmms/lmms.wiki.git
|
||||
[submodule "src/3rdparty/ringbuffer"]
|
||||
path = src/3rdparty/ringbuffer
|
||||
url = https://github.com/JohannesLorenz/ringbuffer.git
|
||||
[submodule "plugins/CarlaBase/carla"]
|
||||
path = plugins/CarlaBase/carla
|
||||
url = https://github.com/falktx/carla
|
||||
[submodule "plugins/Sid/resid/resid"]
|
||||
path = plugins/Sid/resid/resid
|
||||
url = https://github.com/libsidplayfp/resid
|
||||
[submodule "src/3rdparty/jack2"]
|
||||
path = src/3rdparty/jack2
|
||||
url = https://github.com/jackaudio/jack2
|
||||
[submodule "plugins/LadspaEffect/cmt/cmt"]
|
||||
path = plugins/LadspaEffect/cmt/cmt
|
||||
url = https://github.com/lmms/cmt
|
||||
[submodule "src/3rdparty/hiir/hiir"]
|
||||
path = src/3rdparty/hiir/hiir
|
||||
url = https://github.com/LostRobotMusic/hiir
|
||||
|
||||
26
.mailmap
@@ -1,6 +1,4 @@
|
||||
Alexandre Almeida <wilsalx@gmail.com>
|
||||
Tobias Junghans <tobias.doerffel@gmail.com>
|
||||
Dave French <dave.french3@googlemail.com>
|
||||
Tobias Doerffel <tobias.doerffel@gmail.com>
|
||||
Paul Giblock <drfaygo@gmail.com> <pgib@users.sf.net>
|
||||
Paul Giblock <drfaygo@gmail.com> <p@pgiblock.net>
|
||||
Andrew Kelley <superjoe30@gmail.com> <andrew.r.kelley@gmail.com>
|
||||
@@ -8,26 +6,6 @@ Andrew Kelley <superjoe30@gmail.com> <andy@debian.superjoesoftware>
|
||||
Janne Sinisalo <janne.m.sinisalo@gmail.com> <janne@janne-desktop.(none)>
|
||||
Raine M. Ekman <raine@iki.fi> <raine@raine.(none)>
|
||||
Raine M. Ekman <raine@iki.fi> <raine@raine.damex.fi>
|
||||
Lukas W <lukaswhl@gmail.com> <lukaswhl@googlemail.com>
|
||||
Lukas W <lukaswhl@googlemail.com> <lukaswhl@gmail.com>
|
||||
Vesa <contact.diizy@nbl.fi> <vesa@isokone.(none)>
|
||||
Vesa <contact.diizy@nbl.fi> <diizy@users.noreply.github.com>
|
||||
Tres Finocchiaro <tres.finocchiaro@gmail.com>
|
||||
Tres Finocchiaro <tres.finocchiaro@gmail.com> <tres@ubuntu-1204.(none)>
|
||||
Tres Finocchiaro <tres.finocchiaro@gmail.com> <ubuntu@ubuntu-1204.(none)>
|
||||
Tres Finocchiaro <tres.finocchiaro@gmail.com> <tresf@github.com>
|
||||
Rüdiger Ranft <rudi@qzzq.de> <_rdi_@web.de>
|
||||
Spekular <Spekularr@gmail.com> <Spekular@users.noreply.github.com>
|
||||
unfa <unfa00@gmail.com> <unfa@unfa.(none)>
|
||||
mikobuntu <chrissy.mc.1@hotmail.co.uk> <mikobuntu@mikobuntu-Aspire-5332.(none)>
|
||||
Jonathan Aquilina <eagles051387@gmail.com>
|
||||
midi-pascal <midi-pascal@videotron.ca>
|
||||
midi-pascal <midi-pascal@videotron.ca> <pascal@TDE.(none)>
|
||||
Thomas Clark <the.thomas.j.clark@gmail.com>
|
||||
Thomas Clark <the.thomas.j.clark@gmail.com> <tjclark@wpi.edu>
|
||||
anonymous <support@lmms.io> Locale updater <>
|
||||
grejppi <grejppi@gmail.com>
|
||||
Johannes Lorenz <j.git@lorenz-ho.me> <johannes89@mailueberfall.de>
|
||||
Johannes Lorenz <j.git@lorenz-ho.me> <1042576+JohannesLorenz@users.noreply.github.com>
|
||||
Noah Brecht <noahb2713@gmail.com>
|
||||
Olivier Humbert <trebmuh@tuxfamily.org> <trebmuh@users.noreply.github.com>
|
||||
Hussam al-Homsi <sawuare@gmail.com> Hussam Eddin Alhomsi <hussameddin.alhomsi@gmail.com>
|
||||
|
||||
6
.svnignore
Normal file
@@ -0,0 +1,6 @@
|
||||
Makefile.in
|
||||
*.moc
|
||||
.libs
|
||||
embedded_resources.h
|
||||
.deps
|
||||
Makefile
|
||||
32
.travis.yml
Normal file
@@ -0,0 +1,32 @@
|
||||
language: cpp
|
||||
compiler: gcc
|
||||
env:
|
||||
- TARGET_OS=linux
|
||||
- TARGET_OS=win32
|
||||
- TARGET_OS=win64
|
||||
before_install:
|
||||
- if [ $TARGET_OS != linux ]; then sudo add-apt-repository ppa:tobydox/mingw -y; fi
|
||||
- sudo apt-get update -qq
|
||||
install:
|
||||
- if [ $TARGET_OS != linux ]; then sudo apt-get install -y nsis cloog-isl libmpc2 mingw32; fi
|
||||
- if [ $TARGET_OS != linux ]; then sudo apt-get install -y mingw32-x-qt mingw32-x-sdl mingw32-x-libvorbis mingw32-x-fluidsynth mingw32-x-stk mingw32-x-glib2 mingw32-x-portaudio mingw32-x-libsndfile mingw32-x-fftw mingw32-x-flac mingw32-x-fltk mingw32-x-libsamplerate mingw32-x-pkgconfig mingw32-x-binutils mingw32-x-gcc mingw32-x-runtime; fi
|
||||
- if [ $TARGET_OS == win64 ]; then sudo apt-get install -y mingw64-x-qt mingw64-x-sdl mingw64-x-libvorbis mingw64-x-fluidsynth mingw64-x-stk mingw64-x-glib2 mingw64-x-portaudio mingw64-x-libsndfile mingw64-x-fftw mingw64-x-flac mingw64-x-fltk mingw64-x-libsamplerate mingw64-x-pkgconfig mingw64-x-binutils mingw64-x-gcc mingw64-x-runtime; fi
|
||||
- if [ $TARGET_OS == linux ]; then sudo apt-get install -y libqt4-dev libsndfile-dev fftw3-dev libvorbis-dev libogg-dev libasound2-dev libjack-dev libsdl-dev libsamplerate0-dev libstk0-dev libfluidsynth-dev portaudio19-dev wine-dev g++-multilib libfltk1.3-dev; fi
|
||||
before_script:
|
||||
- mkdir build && cd build
|
||||
script:
|
||||
- if [ $TARGET_OS == win32 ]; then ../build_mingw32 || ../build_mingw32; fi
|
||||
- if [ $TARGET_OS == win64 ]; then ../build_mingw64 || ../build_mingw64; fi
|
||||
- if [ $TARGET_OS == linux ]; then cmake -DCMAKE_BUILD_TYPE=RelWithDebInfo .. && make -j4 VERBOSE=1; fi
|
||||
- if [ $TARGET_OS != linux ]; then make; fi
|
||||
before_deploy: make package
|
||||
deploy:
|
||||
provider: releases
|
||||
api_key:
|
||||
secure: d4a+x4Gugpss7JK2DcHjyBZDmEFFh4iVfKDfITSD50T6Mc6At4LMgojvEu+6qT6IyOY2vm3UVT6fhyeuWDTRDwW9tfFlaHVA0h8aTRD+eAXOA7pQ8rEMwQO3+WCKuKTfEqUkpL4wxhww8dpkv54tqeIs0S4TBqz9tk8UhzU7XbE=
|
||||
file: lmms-${TRAVIS_TAG:1}-$TARGET_OS.exe
|
||||
on:
|
||||
tags: true
|
||||
all_branches: true
|
||||
condition: "$TARGET_OS != linux"
|
||||
repo: LMMS/lmms
|
||||
10
.tx/config
@@ -1,10 +0,0 @@
|
||||
[main]
|
||||
host = https://www.transifex.com
|
||||
minimum_perc = 51
|
||||
#Need to finish at least 51% before merging back
|
||||
|
||||
[o:lmms:p:lmms:r:lmms]
|
||||
file_filter = data/locale/<lang>.ts
|
||||
source_file = data/locale/en.ts
|
||||
source_lang = en
|
||||
type = QT
|
||||
@@ -1,3 +0,0 @@
|
||||
rules:
|
||||
line-length:
|
||||
max: 120 # be conforming to LMMS coding rules
|
||||
87
AUTHORS
Normal file
@@ -0,0 +1,87 @@
|
||||
Tobias Doerffel
|
||||
<tobydox/at/users/dot/sourceforge/dot/net>
|
||||
Development Manager
|
||||
|
||||
Jonathan Aquilina
|
||||
<eagles051387/at/gmail/dot/com>
|
||||
Project Manager
|
||||
|
||||
Paul Giblock
|
||||
<drfaygo/at/gmail/dot/com>
|
||||
Development
|
||||
|
||||
Danny McRae
|
||||
<khjklujn/at/yahoo.com>
|
||||
Development
|
||||
|
||||
Javier Serrano Polo
|
||||
<jasp00/at/terra/dot/es>
|
||||
Development
|
||||
|
||||
Lukas Wohlschläger
|
||||
<lukaswhl/at/gmail/dot/com>
|
||||
Development
|
||||
|
||||
Andrew Kelley
|
||||
<superjoe30/at/gmail/dot/com>
|
||||
Development
|
||||
|
||||
Wong Cho Ching
|
||||
<chwongie/hyphen/banana/at/yahoo/dot/com>
|
||||
Development
|
||||
|
||||
Andreas Brandmaier
|
||||
<andy/at/brandmaier/dot/de>
|
||||
BitInvader plugin
|
||||
|
||||
Juan Fabián Simón
|
||||
<treees@gmail.com>
|
||||
Version 0.4 plugin artwork
|
||||
|
||||
Sebastian Tilsch
|
||||
<djcompilation/at/gmx/dot/de>
|
||||
Recording of many samples
|
||||
|
||||
Gabriel
|
||||
<kryos1/at/shaw/dot/ca>
|
||||
Additional artwork
|
||||
|
||||
Vesa Kivimäki
|
||||
<contact/dot/diizy/at/nbl/dot/fi>
|
||||
UI Lead developer
|
||||
|
||||
Gurjot Singh
|
||||
<bhattigurjot/at/gmail/dot/com>
|
||||
Developer
|
||||
|
||||
Hannu Haahti
|
||||
<grejppi/at/gmail/dot/com>
|
||||
Developer
|
||||
|
||||
Uroš Maravić
|
||||
<uros/dot/maravic/at/gmail/dot/com>
|
||||
UI Developer
|
||||
|
||||
Tobiasz Karoń (unfa)
|
||||
<unfa/at/unfamusic/dot/com>
|
||||
UI Developer
|
||||
|
||||
Johannes Lorenz
|
||||
<johannes89/at/mailueberfall/dot/de>
|
||||
Developer
|
||||
|
||||
Rubén Ibarra Pastor
|
||||
<pastorrub/at/msn/dot/com>
|
||||
Developer
|
||||
|
||||
LocoMatt
|
||||
<samozelko123/at/gmail/dot/com>
|
||||
3osc skin developer
|
||||
|
||||
Chrissy McManus
|
||||
<chrissy/dot/mc/dot/1/at/hotmail/dot/co/dot/uk>
|
||||
UI developer
|
||||
|
||||
Oskar Wallgren
|
||||
<oskar/dot/wallgren13/at/gmail/dot/com>
|
||||
Development
|
||||
20
Brewfile
@@ -1,20 +0,0 @@
|
||||
brew "carla"
|
||||
brew "ccache"
|
||||
brew "fftw"
|
||||
brew "fltk"
|
||||
brew "fluid-synth"
|
||||
brew "jack"
|
||||
brew "lame"
|
||||
brew "libgig"
|
||||
brew "libogg"
|
||||
brew "libsamplerate"
|
||||
brew "libsndfile"
|
||||
brew "libsoundio"
|
||||
brew "libvorbis"
|
||||
brew "lilv"
|
||||
brew "lv2"
|
||||
brew "pkg-config"
|
||||
brew "portaudio"
|
||||
brew "qt@5"
|
||||
brew "sdl2"
|
||||
brew "stk"
|
||||
901
CMakeLists.txt
33
INSTALL
Normal file
@@ -0,0 +1,33 @@
|
||||
Building LMMS got quite simple since 0.4.0 as everything is managed
|
||||
by cmake now. Therefore make sure you have CMake (>= 2.6.0 recommended) and
|
||||
then run
|
||||
|
||||
|
||||
mkdir build
|
||||
cd build
|
||||
cmake ../
|
||||
make
|
||||
sudo make install
|
||||
|
||||
If your system does not have "sudo", become root with your preferred mechanism
|
||||
and run the "make install" command.
|
||||
|
||||
With the above commands an out-of-tree build is performed. You can also run
|
||||
"cmake ." directly in the root of source tree although this is not recommended.
|
||||
When performing an out-of-tree build after there's already an in-tree build,
|
||||
make sure to run "make distclean" before running cmake inside build-directory.
|
||||
|
||||
If you want to use custom compiler flags simply set the environment variables
|
||||
CFLAGS and CXXFLAGS.
|
||||
|
||||
After running cmake (the 3rd command above) you can see a summary of things
|
||||
that are going to be built into LMMS or built as plugins. Install the
|
||||
according libraries and development files if a certain feature is not enabled.
|
||||
Then remove CMakeCache.txt and run cmake again.
|
||||
|
||||
If you want to supply an install prefix to cmake, add the flag:
|
||||
|
||||
-DCMAKE_INSTALL_PREFIX=<prefix>
|
||||
|
||||
Where <prefix> can be /usr, /usr/local, /opt, etc. The default is /usr/local.
|
||||
|
||||
67
INSTALL.txt
@@ -1,67 +0,0 @@
|
||||
This project uses git submodules and several are required for a successful
|
||||
build. If this tarball was NOT provided with submodules (default), some source
|
||||
dependencies will need to be manually added to src/3rdparty.
|
||||
|
||||
If this project WAS provided with submodules, there are detailed dependencies
|
||||
(e.g. supported compilers, cmake requirements, cross-compilation) at
|
||||
doc/wiki/Compiling.md including platform-specific build instructions (e.g.
|
||||
apt-get, dnf, pacman, etc).
|
||||
|
||||
Online documentation:
|
||||
|
||||
https://github.com/LMMS/lmms/wiki/
|
||||
|
||||
Live online chat via Discord (similar to IRC):
|
||||
|
||||
https://lmms.io/chat, Channel #programming
|
||||
|
||||
Basic build steps:
|
||||
|
||||
mkdir build
|
||||
cd build
|
||||
cmake ../
|
||||
make
|
||||
sudo make install
|
||||
# or alternately: su -c 'make install'
|
||||
|
||||
With the above commands an out-of-tree build is performed. You can also run
|
||||
"cmake ." directly in the root of source tree although this is not recommended.
|
||||
When performing an out-of-tree build after there's already an in-tree build,
|
||||
make sure to run "make distclean" before running cmake inside build-directory.
|
||||
|
||||
If you want to use custom compiler flags simply set the environment variables
|
||||
CFLAGS and CXXFLAGS.
|
||||
|
||||
After running cmake (the 3rd command above) you can see a summary of things
|
||||
that are going to be built into LMMS or built as plugins. Install the
|
||||
according libraries and development files if a certain feature is not enabled.
|
||||
Then remove CMakeCache.txt and run cmake again.
|
||||
|
||||
For non-root installs, or to install to a non-standard location, provide an
|
||||
install prefix to cmake, using the flag:
|
||||
|
||||
-DCMAKE_INSTALL_PREFIX=<prefix>
|
||||
|
||||
The Compilation tutorial (see docs/wiki/Compilation.md)
|
||||
specifically uses <prefix> as "../target" for all non-root installations. This
|
||||
is strongly recommended if developing a patch or a feature. For root
|
||||
installations, <prefix> can be /usr, /usr/local, /opt, etc. For most systems,
|
||||
the default is /usr/local.
|
||||
|
||||
If your Qt5 installation does not reside in standard installation paths,
|
||||
additionally pass:
|
||||
|
||||
-DCMAKE_PREFIX_PATH=<prefix>
|
||||
|
||||
Where <prefix> is the location to Qt5 installation, usually /opt/qt5/, etc.
|
||||
|
||||
Important wiki sections:
|
||||
|
||||
doc/wiki/Compiling.md:
|
||||
Dependencies Detailed
|
||||
- Build Toolchain (cmake)
|
||||
- Compiler (gcc, clang)
|
||||
- Libraries (required and optional dependencies)
|
||||
|
||||
doc/wiki/Dependencies-<platform>.md
|
||||
Platform-specific dependencies (Windows, Ubuntu, Fedora, macOS, etc.)
|
||||
@@ -1,18 +0,0 @@
|
||||
The MIT License
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy of
|
||||
this software and associated documentation files (the "Software"), to deal in
|
||||
the Software without restriction, including without limitation the rights to
|
||||
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
|
||||
the Software, and to permit persons to whom the Software is furnished to do so,
|
||||
subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
||||
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
||||
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
|
||||
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
104
README
Normal file
@@ -0,0 +1,104 @@
|
||||
LMMS 1.0.93
|
||||
===========
|
||||
|
||||
Copyright (c) 2004-2014 by LMMS developers
|
||||
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by the
|
||||
Free Software Foundation; either version 2 of the License, or (at your option)
|
||||
any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful, but
|
||||
WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
|
||||
details.
|
||||
|
||||
You should have received a copy of the GNU General Public License along
|
||||
with this program; if not, write to the Free Software Foundation, Inc.,
|
||||
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
|
||||
|
||||
|
||||
What is LMMS?
|
||||
--------------
|
||||
|
||||
LMMS is a free cross-platform alternative to commercial programs like FL Studio (R), which allow you to produce music with your computer. This includes the creation of melodies and beats, the synthesis and mixing of sounds, and arranging of samples. You can have fun with your MIDI-keyboard and much more; all in a user-friendly and modern interface.
|
||||
|
||||
|
||||
Features
|
||||
---------
|
||||
|
||||
* Song-Editor for composing songs
|
||||
* A Beat+Bassline-Editor for creating beats and basslines
|
||||
* An easy-to-use Piano-Roll for editing patterns and melodies
|
||||
* An FX mixer with 64 FX channels and arbitrary number of effects allow unlimited mixing possibilities
|
||||
* Many powerful instrument and effect-plugins out of the box
|
||||
* Full user-defined track-based automation and computer-controlled automation sources
|
||||
* Compatible with many standards such as SoundFont2, VST(i), LADSPA, GUS Patches, and full MIDI support
|
||||
* Import of MIDI and FLP (Fruityloops(R) Project) files
|
||||
|
||||
|
||||
Requirements
|
||||
------------
|
||||
|
||||
The most important requirement is for sure a fast computer, so don't try to get
|
||||
LMMS working on a pentium I with 60 MHz... ;-) Therefore you should have at
|
||||
least 500 MHz, but for really enjoying LMMS less than 1 GHz makes no sense...
|
||||
|
||||
|
||||
Required libraries:
|
||||
|
||||
- Qt >= 4.3.0 with devel-files (4.4.x recommended)
|
||||
|
||||
Optional, but strongly recommended:
|
||||
- JACK with devel-files
|
||||
- libvorbis & libogg with devel-files
|
||||
- libalsa with devel-files
|
||||
- SDL with devel-files
|
||||
- libsamplerate >= 0.1.7 with devel-files
|
||||
- libsndfile with devel-files
|
||||
- WINE + WINE-devel-files
|
||||
- stk, libstk + libstk-dev
|
||||
- libfluidsynth with devel files
|
||||
- fftw3 with devel-files
|
||||
- libfltk1.3 with devel-files (needed by ZynAddSubFx)
|
||||
|
||||
For compiling you should have an up to date GCC with g++.
|
||||
|
||||
If you have problems with compiling or running LMMS, find any bug or have
|
||||
suggestions and so on, please feel free to e-mail me (for mail-address see
|
||||
below)!
|
||||
|
||||
|
||||
|
||||
Building
|
||||
---------
|
||||
|
||||
See INSTALL for information on how to build LMMS.
|
||||
|
||||
|
||||
|
||||
|
||||
Join LMMS-development
|
||||
----------------------
|
||||
|
||||
If you are interested in LMMS, it's programming, artwork, testing, writing
|
||||
demo-songs, (and improving this README...) or something like that,
|
||||
you're welcome to participate on the development of LMMS!
|
||||
|
||||
The project-homepage of LMMS, mailingslists and a list of things you can do
|
||||
can be found at
|
||||
|
||||
http://lmms.io/
|
||||
|
||||
|
||||
Details on development can be found in the Wiki:
|
||||
|
||||
https://github.com/LMMS/lmms/wiki
|
||||
|
||||
Before coding a new big feature, please ALWAYS post your idea and suggestions
|
||||
about your feature and about the intended implementation to the
|
||||
LMMS-devel-mailinglist (lmms-devel@lists.sourceforge.net) and wait for replies!
|
||||
Maybe there're different ideas, improvements, hints or maybe your feature is
|
||||
not welcome/needed at the moment.
|
||||
55
README.md
@@ -1,58 +1,51 @@
|
||||
#  LMMS
|
||||
|
||||
[](https://github.com/LMMS/lmms/actions/workflows/build.yml)
|
||||
[](https://lmms.io/download)
|
||||
[](https://github.com/LMMS/lmms/releases)
|
||||
[](https://discord.gg/3sc5su7)
|
||||
[](https://www.transifex.com/lmms/lmms/)
|
||||
 LMMS
|
||||
=======================
|
||||
[](https://travis-ci.org/LMMS/lmms)
|
||||
|
||||
What is LMMS?
|
||||
--------------
|
||||
|
||||
LMMS is a free cross-platform alternative to commercial programs like
|
||||
FL Studio®, which allow you to produce music with your computer. This includes
|
||||
the creation of melodies and beats, the synthesis and mixing of sounds, and
|
||||
arranging of samples. You can have fun with your MIDI-keyboard and much more;
|
||||
all in a user-friendly and modern interface.
|
||||
LMMS is a free cross-platform alternative to commercial programs like FL Studio®, which allow you to produce music with your computer. This includes the creation of melodies and beats, the synthesis and mixing of sounds, and arranging of samples. You can have fun with your MIDI-keyboard and much more; all in a user-friendly and modern interface.
|
||||
|
||||
[Homepage](https://lmms.io)<br>
|
||||
[Homepage](http://lmms.sf.net)<br>
|
||||
[Downloads/Releases](https://github.com/LMMS/lmms/releases)<br>
|
||||
[Developer Wiki](https://github.com/LMMS/lmms/wiki)<br>
|
||||
[Artist & User Wiki/Documentation](https://lmms.io/documentation)<br>
|
||||
[Sound Demos](https://lmms.io/showcase/)<br>
|
||||
[LMMS Sharing Platform](https://lmms.io/lsp/) Share your songs!
|
||||
[Artist & User Wiki/Documentation](http://lmms.sourceforge.net/wiki/index.php/Main_Page) This still has some useful pages.<br>
|
||||
[Screenshots](http://lmms.io/screenshots/)<br>
|
||||
[Sound Demos](http://lmms.io/showcase/)<br>
|
||||
[LMMS Sharing Platform](http://lmms.io/lsp/) Share your songs!
|
||||
|
||||
Features
|
||||
---------
|
||||
|
||||
* Song-Editor for composing songs
|
||||
* Pattern-Editor for creating beats and patterns
|
||||
* A Beat+Bassline-Editor for creating beats and basslines
|
||||
* An easy-to-use Piano-Roll for editing patterns and melodies
|
||||
* A Mixer with unlimited mixer channels and arbitrary number of effects
|
||||
* An FX mixer with 64 FX channels and arbitrary number of effects allow unlimited mixing possibilities
|
||||
* Many powerful instrument and effect-plugins out of the box
|
||||
* Full user-defined track-based automation and computer-controlled automation sources
|
||||
* Compatible with many standards such as SoundFont2, VST(i), LADSPA, GUS Patches, and full MIDI support
|
||||
* MIDI file importing and exporting
|
||||
* Import of MIDI and FLP (FL Studio®/Fruityloops® Project) files
|
||||
|
||||
[Latest Stable Release (1.0.3)](https://github.com/LMMS/lmms/releases/tag/v1.0.3)
|
||||
---------------------
|
||||
* Fix zyn GUI crash on win32
|
||||
* Fix SF2 note volume
|
||||
* Localization updates
|
||||
* Updated LADSPA search paths
|
||||
* Bugfixes in plugins
|
||||
|
||||
Building
|
||||
---------
|
||||
|
||||
See [Compiling LMMS](https://github.com/LMMS/lmms/wiki/Compiling) on our
|
||||
wiki for information on how to build LMMS.
|
||||
See [Compiling LMMS](https://github.com/LMMS/lmms/wiki/Compiling-lmms) on our wiki for information on how to build LMMS.
|
||||
|
||||
|
||||
Join LMMS-development
|
||||
----------------------
|
||||
|
||||
If you are interested in LMMS, its programming, artwork, testing, writing demo
|
||||
songs, (and improving this README...) or something like that, you're welcome
|
||||
to participate in the development of LMMS!
|
||||
If you are interested in LMMS, it's programming, artwork, testing, writing demo-songs, (and improving this readme…) or something like that, you're welcome to participate on the development of LMMS!
|
||||
|
||||
Information about what you can do and how can be found in the
|
||||
[wiki](https://github.com/LMMS/lmms/wiki).
|
||||
Information about what you can do and how can be found in the [wiki](https://github.com/LMMS/lmms/wiki).
|
||||
|
||||
Before coding a new big feature, please _always_
|
||||
[file an issue](https://github.com/LMMS/lmms/issues/new) for your idea and
|
||||
suggestions about your feature and about the intended implementation on GitHub,
|
||||
or ask in one of the tech channels on Discord and wait for replies! Maybe there are different ideas, improvements, or hints, or
|
||||
maybe your feature is not welcome/needed at the moment.
|
||||
Before coding a new big feature, please _always_ [file an issue](https://github.com/LMMS/lmms/issues/new) for your idea and suggestions about your feature and about the intended implementation on GitHub or post to the LMMS-devel-mailinglist (lmms-devel@lists.sourceforge.net) and wait for replies! Maybe there're different ideas, improvements, hints or maybe your feature is not welcome/needed at the moment.
|
||||
|
||||
32
TODO
Normal file
@@ -0,0 +1,32 @@
|
||||
Version 0.4.x
|
||||
=============
|
||||
|
||||
- save tco-settings in trackContentWidget::saveSettings() etc. instead of
|
||||
track::...
|
||||
- resample sample-track-tcos when exporting at different samplerate
|
||||
- message to user when importing unsupported MIDI-file (track-count = 0)
|
||||
- piano roll: mouse cursor isn't updated correctly in selection mode
|
||||
(from resizing note edit area)
|
||||
- when you add vestige, have it automatically pop the find VST plugin dialog
|
||||
- try to make vestige-plugin-dlls relative
|
||||
- select all MIDI devices by default when you bring up the "connect to controller"
|
||||
window and wait for first event - then uncheck all other MIDI devices that no
|
||||
events were detected from
|
||||
- load asdlol.mmpz. if you render it without playing it, or if you play it
|
||||
the first time, you hear unwanted artifacts. (solution: apply automation
|
||||
before playing)
|
||||
- autosave every 30s (configurable!) and offer recovery at startup after crash
|
||||
- speed up painting of sampleTCO
|
||||
- do not process effects when playing frozen patterns
|
||||
- copy-pasted automation patterns have to be manually linked back to
|
||||
their knob for some reason
|
||||
- improve TrackLabelButton: split 80%-20% (80%=name, 20%=button showing a popup
|
||||
menu with track operations, make the midi input a top-level menu item)
|
||||
- when you click and drag a mixer bar, it doesn't click and drag, it sets
|
||||
absolutely. this is annoying
|
||||
|
||||
|
||||
See TODO file in master branch and/or the TODO list in the Wiki for details
|
||||
regarding the development series.
|
||||
|
||||
|
||||
@@ -1,13 +0,0 @@
|
||||
SET(CMAKE_AUTOMOC ON)
|
||||
|
||||
ADD_EXECUTABLE(benchmarks
|
||||
EXCLUDE_FROM_ALL
|
||||
benchmark.cpp
|
||||
)
|
||||
|
||||
# TODO replace usages of include_directories in src/CMakeLists.txt with target_include_directories
|
||||
# and remove this line (also in tests/CMakeLists.txt)
|
||||
target_include_directories(benchmarks PRIVATE $<TARGET_PROPERTY:lmmsobjs,INCLUDE_DIRECTORIES>)
|
||||
|
||||
target_static_libraries(benchmarks PRIVATE lmmsobjs)
|
||||
target_compile_features(benchmarks PRIVATE cxx_std_17)
|
||||
@@ -1,130 +0,0 @@
|
||||
#include <thread>
|
||||
|
||||
#include <QtCore/QCoreApplication>
|
||||
#include <QtCore/QDebug>
|
||||
|
||||
#include "libcds.h"
|
||||
#include <cds/container/vyukov_mpmc_cycle_queue.h>
|
||||
|
||||
#include "Engine.h"
|
||||
#include "PerfLog.h"
|
||||
|
||||
#include "LocklessList.h"
|
||||
#include "MemoryPool.h"
|
||||
|
||||
#include "NotePlayHandle.h"
|
||||
|
||||
using namespace lmms;
|
||||
|
||||
template<typename T>
|
||||
using LocklessQueue = cds::container::VyukovMPMCCycleQueue<T>;
|
||||
|
||||
template<typename Alloc>
|
||||
void benchmark_allocator(QString name, Alloc&& alloc, size_t n, size_t I)
|
||||
{
|
||||
using T = typename Alloc::value_type;
|
||||
constexpr size_t S = sizeof(T);
|
||||
|
||||
std::vector<T*> ptrs{n};
|
||||
PerfLogTimer timer(QString("Allocate: %1 x %2 x %3 bytes, %4")
|
||||
.arg(I).arg(n).arg(S).arg(name));
|
||||
|
||||
for (size_t i=0; i < I; i++)
|
||||
{
|
||||
for (size_t j=0; j < n; j++) {
|
||||
ptrs[j] = alloc.allocate(1);
|
||||
}
|
||||
for (size_t j=0; j < n; j++) {
|
||||
alloc.deallocate(ptrs[j], 1);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
template<typename Alloc>
|
||||
void benchmark_allocator_threaded(QString name, Alloc&& alloc, size_t n, size_t t)
|
||||
{
|
||||
using T = typename Alloc::value_type;
|
||||
constexpr size_t S = sizeof(T);
|
||||
|
||||
LocklessQueue<T*> ptrs{n};
|
||||
|
||||
PerfLogTimer timer(QString("Allocate multi-threaded: %1 x %2 bytes using %3 threads, %4")
|
||||
.arg(n).arg(S).arg(t).arg(name));
|
||||
|
||||
std::vector<std::thread> threads; threads.reserve(t*2);
|
||||
|
||||
std::atomic_uint_fast64_t allocated{0};
|
||||
std::atomic_uint_fast64_t deallocated{0};
|
||||
|
||||
for (size_t i=0; i < t; i++) {
|
||||
threads.emplace_back([&]() {
|
||||
while(allocated++ < n) {
|
||||
auto ptr = alloc.allocate(1);
|
||||
ptrs.push(ptr);
|
||||
}
|
||||
});
|
||||
}
|
||||
for (size_t i=0; i < t; i++) {
|
||||
threads.emplace_back([&]() {
|
||||
while(deallocated++ < n) {
|
||||
T* ptr;
|
||||
while (! ptrs.pop(ptr));
|
||||
alloc.deallocate(ptr, 1);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
for (std::thread& thread : threads) {
|
||||
thread.join();
|
||||
}
|
||||
}
|
||||
|
||||
int main(int argc, char* argv[])
|
||||
{
|
||||
new QCoreApplication(argc, argv);
|
||||
|
||||
using Stack = LocklessList<size_t>;
|
||||
{
|
||||
size_t n = 100 * 1000 * 1000;
|
||||
Stack stack{n};
|
||||
PerfLogTimer timer("LocklessList: Insert 100m entries, single-threaded, pre-allocated");
|
||||
for (size_t i=0; i < n; i++) {
|
||||
stack.push(i);
|
||||
}
|
||||
}
|
||||
{
|
||||
size_t n = 50 * 1000 * 1000;
|
||||
size_t t = 5;
|
||||
Stack stack{n};
|
||||
std::vector<std::thread> threads; threads.reserve(t);
|
||||
PerfLogTimer timer("LocklessList: Push 50m entries, multi-threaded, pre-allocated");
|
||||
|
||||
for (int i=0; i < 5; i++) {
|
||||
threads.emplace_back([&]() {
|
||||
for (size_t j=0; j < n / t; j++) {
|
||||
stack.push(j);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
for (int i=0; i < 5; i++) {
|
||||
threads.at(i).join();
|
||||
}
|
||||
}
|
||||
|
||||
{
|
||||
size_t n = 10 * 1000 * 1000;
|
||||
constexpr size_t S = 256;
|
||||
using T = std::array<char, S>;
|
||||
benchmark_allocator("std::allocator", std::allocator<T>{}, n, 1);
|
||||
benchmark_allocator("MemoryPool", MemoryPool<T>{n}, n, 1);
|
||||
}
|
||||
{
|
||||
size_t n = 10 * 1000 * 1000;
|
||||
constexpr size_t S = 256;
|
||||
using T = std::array<char, S>;
|
||||
benchmark_allocator_threaded("std::allocator", std::allocator<T>{}, n, 4);
|
||||
benchmark_allocator_threaded("MemoryPool", MemoryPool<T>{n}, n, 4);
|
||||
}
|
||||
}
|
||||
7
build_mingw32
Executable file
@@ -0,0 +1,7 @@
|
||||
MINGW=/opt/mingw32
|
||||
export PATH=$PATH:$MINGW/bin
|
||||
#export CFLAGS="-march=pentium3 -mtune=generic -mpreferred-stack-boundary=5 -fno-tree-vectorize"
|
||||
export CFLAGS="-march=pentium3 -mtune=generic -mpreferred-stack-boundary=5"
|
||||
export CXXFLAGS="$CFLAGS"
|
||||
cmake .. -DCMAKE_TOOLCHAIN_FILE=../cmake/modules/Win32Toolchain.cmake -DCMAKE_MODULE_PATH=`pwd`/../cmake/modules/
|
||||
|
||||
6
build_mingw64
Executable file
@@ -0,0 +1,6 @@
|
||||
MINGW=/opt/mingw64
|
||||
export PATH=$PATH:$MINGW/bin
|
||||
#export CFLAGS="-fno-tree-vectorize"
|
||||
export CXXFLAGS="$CFLAGS"
|
||||
cmake .. -DCMAKE_TOOLCHAIN_FILE=../cmake/modules/Win64Toolchain.cmake -DCMAKE_MODULE_PATH=`pwd`/../cmake/modules/
|
||||
|
||||
212
buildtools/bin2res.cpp
Normal file
@@ -0,0 +1,212 @@
|
||||
/*
|
||||
* bin2res.cpp - generate embedded resources from binary data (based on qembed)
|
||||
*
|
||||
* Copyright (c) 2005-2008 Tobias Doerffel <tobydox/at/users.sourceforge.net>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public
|
||||
* License along with this program (see COPYING); if not, write to the
|
||||
* Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
|
||||
* Boston, MA 02110-1301 USA.
|
||||
*
|
||||
*/
|
||||
|
||||
|
||||
#include <string>
|
||||
#include <vector>
|
||||
#include <iostream>
|
||||
#include <fstream>
|
||||
|
||||
static void embedData( const char * _input, int _size, std::ostream & _output );
|
||||
static std::string convertFileNameToCIdentifier( const std::string & _s );
|
||||
|
||||
|
||||
struct embed
|
||||
{
|
||||
unsigned int size;
|
||||
std::string name;
|
||||
std::string cname;
|
||||
} ;
|
||||
|
||||
typedef std::vector<std::string> stringlist;
|
||||
|
||||
const int MAX_FILE_SIZE = 256*256*256; // = 16 MB
|
||||
|
||||
|
||||
int main( int argc, char * * argv )
|
||||
{
|
||||
if( argc < 2 )
|
||||
{
|
||||
std::cerr << "Usage:" << std::endl << "\t" << argv[0] <<
|
||||
" files" << std::endl;
|
||||
return( 1 );
|
||||
}
|
||||
|
||||
std::cout << "// Generated by bin2res" << std::endl;
|
||||
|
||||
std::vector<embed *> embedded_data;
|
||||
|
||||
std::cout << "#ifndef _EMBEDDED_RESOURCES_H" << std::endl;
|
||||
std::cout << "#define _EMBEDDED_RESOURCES_H" << std::endl;
|
||||
|
||||
stringlist files;
|
||||
for( int i = 1; i < argc; ++i )
|
||||
{
|
||||
files.push_back( std::string( argv[i] ) );
|
||||
}
|
||||
for( stringlist::iterator it = files.begin(); it != files.end(); ++it )
|
||||
{
|
||||
std::ifstream f( it->c_str(), std::ios::binary );
|
||||
if( f.fail() )
|
||||
{
|
||||
std::cerr << "Cannot open file " << *it <<
|
||||
", ignoring it" << std::endl;
|
||||
continue;
|
||||
}
|
||||
f.seekg( 0, std::ios::end );
|
||||
int fsize = f.tellg();
|
||||
f.seekg( 0 );
|
||||
if( fsize == 0 || fsize > MAX_FILE_SIZE )
|
||||
{
|
||||
std::cerr << "File " << *it << " has zero size or is "
|
||||
"too large to be processed with bin2res." <<
|
||||
std::endl;
|
||||
}
|
||||
char * data = new char[fsize];
|
||||
f.read( data, fsize );
|
||||
embed * e = new embed;
|
||||
e->size = fsize;
|
||||
if( it->rfind( '/' ) != std::string::npos )
|
||||
{
|
||||
e->name = std::string( it->c_str() +
|
||||
it->rfind( '/' ) + 1 );
|
||||
}
|
||||
else
|
||||
{
|
||||
e->name = *it;
|
||||
}
|
||||
e->cname = convertFileNameToCIdentifier( e->name );
|
||||
embedded_data.push_back( e );
|
||||
std::string s;
|
||||
std::cout << "static const unsigned char " << e->cname <<
|
||||
"_data[] = {";
|
||||
embedData( data, fsize, std::cout );
|
||||
std::cout << std::endl << "};" << std::endl << std::endl;
|
||||
delete[] data;
|
||||
}
|
||||
|
||||
if( embedded_data.size() > 0 )
|
||||
{
|
||||
std::cout << "static const unsigned char dummy_data[] ="
|
||||
"{ 0x00 };" << std::endl << std::endl;
|
||||
embed * dummy = new embed;
|
||||
dummy->size = 1;
|
||||
dummy->name = "dummy";
|
||||
dummy->cname = convertFileNameToCIdentifier(
|
||||
std::string( "dummy" ) );
|
||||
embedded_data.push_back( dummy );
|
||||
|
||||
std::cout << "#include <string.h>" << std::endl << std::endl;
|
||||
std::cout << "#include \"embed.h\"" << std::endl << std::endl;
|
||||
std::cout << "static embed::descriptor embed_vec[] = {" << std::endl;
|
||||
/* << "{" << std::endl
|
||||
<< " int size;" << std::endl
|
||||
<< " const unsigned char * data;" <<
|
||||
std::endl
|
||||
<< " const char * name;" << std::endl
|
||||
<< "} embed_vec[] = {" << std::endl;*/
|
||||
while( embedded_data.size() > 0 )
|
||||
{
|
||||
embed * e = embedded_data[0];
|
||||
std::cout << " { " << e->size << ", " << e->cname <<
|
||||
"_data, " << "\"" << e->name <<
|
||||
"\" }," << std::endl;
|
||||
delete e;
|
||||
embedded_data.erase( embedded_data.begin() );
|
||||
}
|
||||
std::cout << " { 0, 0, 0 }" << std::endl << "};" << std::endl
|
||||
<< std::endl
|
||||
<< "static const embed::descriptor & "
|
||||
"findEmbeddedData( const char * _name )"
|
||||
<< std::endl << "{" << std::endl
|
||||
<< " for( int i = 0; embed_vec[i].data; "
|
||||
"i++ )" << std::endl
|
||||
<< " {" << std::endl
|
||||
<< " if( strcmp( embed_vec[i].name, "
|
||||
"_name ) == 0 )" << std::endl
|
||||
<< " {" << std::endl
|
||||
<< " return( "
|
||||
"embed_vec[i] );" << std::endl
|
||||
<< " }" << std::endl
|
||||
<< " }" << std::endl
|
||||
/* << " printf( \"warning: embedded resource "
|
||||
"%s not found!\\n\", _name );"
|
||||
<< std::endl*/
|
||||
<< " return( findEmbeddedData( "
|
||||
"\"dummy\" ) );" << std::endl
|
||||
<< "}" << std::endl << std::endl;
|
||||
}
|
||||
std::cout << "#endif" << std::endl;
|
||||
return( 0 );
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
std::string convertFileNameToCIdentifier( const std::string & _s )
|
||||
{
|
||||
std::string r = _s;
|
||||
int len = r.length();
|
||||
if ( len > 0 && !isalpha( (char)r[0] ) )
|
||||
{
|
||||
r[0] = '_';
|
||||
}
|
||||
for ( int i = 1; i < len; i++ )
|
||||
{
|
||||
if ( !isalnum( (char)r[i] ) )
|
||||
{
|
||||
r[i] = '_';
|
||||
}
|
||||
}
|
||||
return( r );
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
void embedData( const char * _input, int _nbytes, std::ostream & _output )
|
||||
{
|
||||
static const char hexdigits[] = "0123456789abcdef";
|
||||
std::string s;
|
||||
for( int i = 0; i < _nbytes; i++ )
|
||||
{
|
||||
if( ( i%14 ) == 0 )
|
||||
{
|
||||
s += "\n ";
|
||||
_output << s;
|
||||
s = "";
|
||||
}
|
||||
unsigned int v = _input[i];
|
||||
s += "0x";
|
||||
s += hexdigits[(v >> 4) & 15];
|
||||
s += hexdigits[v & 15];
|
||||
if( i < _nbytes-1 )
|
||||
{
|
||||
s += ',';
|
||||
}
|
||||
}
|
||||
if ( s.length() )
|
||||
{
|
||||
_output << s;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,71 +0,0 @@
|
||||
#!/bin/bash
|
||||
aberr(){ printf "[\e[31mERROR\e[0m]: \e[1m%s\e[0m\n" "$*" >&2; }
|
||||
abinfo(){ printf "[\e[96mINFO\e[0m]: \e[1m%s\e[0m\n" "$*" >&2; }
|
||||
|
||||
function upload_to_tx() {
|
||||
if ! which tx > /dev/null; then
|
||||
aberr "You don't have Transifex client installed. \n Run \`pip install transifex-client\` to install it."
|
||||
exit 1
|
||||
fi
|
||||
abinfo "Uploading to transifex..."
|
||||
if ! tx push -s; then
|
||||
aberr "Problems occurred when uploading strings to Transifex."
|
||||
printf "\t Either there are syntax errors in source file or you don't have permission to update the source file."
|
||||
exit 1
|
||||
fi
|
||||
exit 0
|
||||
}
|
||||
|
||||
function validate() {
|
||||
ERR_LANG=""
|
||||
ERR_BUF=""
|
||||
for i in data/locale/*.ts; do
|
||||
if ! ERR_BUF=$(lconvert-qt5 -i "${i}" -o "/tmp/test.qm" -of qm 2>&1); then
|
||||
ERR_LANG+="\e[96m$(basename "${i}")\e[0m: \e[93m${ERR_BUF}\e[0m "
|
||||
printf "\e[31mx\e[0m"
|
||||
continue
|
||||
fi
|
||||
printf "\e[32m.\e[0m"
|
||||
done
|
||||
echo ""
|
||||
if [[ "x${ERR_LANG}" != "x" ]]; then
|
||||
aberr "The following files failed the validation: "
|
||||
echo -e "${ERR_LANG}"
|
||||
fi
|
||||
}
|
||||
|
||||
abinfo "Checking for your environment..."
|
||||
if ! which lupdate-qt5 > /dev/null; then
|
||||
aberr "You don't seem to have Qt i18n tools installed."
|
||||
printf "\tUsually this comes with your Qt installation, or you need to\n"
|
||||
printf "\tinstall extra packages like \`qt5-tools\` or similar.\n"
|
||||
exit 1;
|
||||
fi
|
||||
|
||||
abinfo "Scanning directories..."
|
||||
|
||||
if test -d src/3rdparty/qt5-x11embed/3rdparty/ECM/; then
|
||||
# prevent from collecting strings in ECM
|
||||
rm -rf src/3rdparty/qt5-x11embed/3rdparty/ECM/
|
||||
fi
|
||||
|
||||
if ! lupdate-qt5 -I include/ src/ plugins/ -ts data/locale/en.ts; then
|
||||
aberr "There are some problems when collecting the strings."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
abinfo "Validating translations..."
|
||||
validate
|
||||
|
||||
abinfo "Translations successfully updated."
|
||||
printf "Do you want to upload translations to Transifex? [y/N]: "
|
||||
read -n 1 -r TX
|
||||
echo ""
|
||||
|
||||
if [[ "$TX" == "y" || "$TX" == "Y" ]]; then
|
||||
upload_to_tx
|
||||
fi
|
||||
|
||||
abinfo "No upload as required."
|
||||
|
||||
exit 0
|
||||
@@ -1,30 +0,0 @@
|
||||
SET(CPACK_PACKAGE_DESCRIPTION_SUMMARY "${PROJECT_DESCRIPTION}")
|
||||
SET(CPACK_PACKAGE_VENDOR "${PROJECT_AUTHOR}")
|
||||
SET(CPACK_PACKAGE_DESCRIPTION_FILE "${CMAKE_SOURCE_DIR}/README.md")
|
||||
SET(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_SOURCE_DIR}/LICENSE.txt")
|
||||
SET(CPACK_PACKAGE_VERSION_MAJOR "${VERSION_MAJOR}")
|
||||
SET(CPACK_PACKAGE_VERSION_MINOR "${VERSION_MINOR}")
|
||||
SET(CPACK_PACKAGE_VERSION_PATCH "${VERSION_RELEASE}")
|
||||
IF(VERSION_STAGE)
|
||||
SET(CPACK_PACKAGE_VERSION_PATCH "${CPACK_PACKAGE_VERSION_PATCH}-${VERSION_STAGE}")
|
||||
ENDIF()
|
||||
IF(VERSION_BUILD)
|
||||
SET(CPACK_PACKAGE_VERSION_PATCH "${CPACK_PACKAGE_VERSION_PATCH}-${VERSION_BUILD}")
|
||||
ENDIF()
|
||||
SET(CPACK_PACKAGE_INSTALL_DIRECTORY "${PROJECT_NAME_UCASE}")
|
||||
SET(CPACK_SOURCE_GENERATOR "TBZ2")
|
||||
SET(CPACK_SOURCE_PACKAGE_FILE_NAME "${CMAKE_PROJECT_NAME}-${VERSION}")
|
||||
IF(NOT DEFINED WIN32)
|
||||
SET(CPACK_STRIP_FILES "bin/${CMAKE_PROJECT_NAME};${PLUGIN_DIR}/*.so")
|
||||
SET(CPACK_PACKAGE_EXECUTABLES "${CMAKE_PROJECT_NAME}" "${PROJECT_NAME_UCASE} binary")
|
||||
ENDIF()
|
||||
|
||||
IF(LMMS_BUILD_WIN32)
|
||||
ADD_SUBDIRECTORY(nsis)
|
||||
ELSEIF(LMMS_BUILD_APPLE)
|
||||
ADD_SUBDIRECTORY(apple)
|
||||
ELSE()
|
||||
ADD_SUBDIRECTORY(linux)
|
||||
ENDIF()
|
||||
|
||||
INCLUDE(CPack)
|
||||
@@ -1,46 +0,0 @@
|
||||
SET(MACOSX_BUNDLE_ICON_FILE "icon.icns")
|
||||
SET(MACOSX_BUNDLE_GUI_IDENTIFIER "${PROJECT_NAME_UCASE}")
|
||||
SET(MACOSX_BUNDLE_LONG_VERSION_STRING "${VERSION}")
|
||||
SET(MACOSX_BUNDLE_BUNDLE_NAME "${PROJECT_NAME_UCASE}")
|
||||
SET(MACOSX_BUNDLE_SHORT_VERSION_STRING "${VERSION}")
|
||||
SET(MACOSX_BUNDLE_BUNDLE_VERSION "${VERSION}")
|
||||
SET(MACOSX_BUNDLE_COPYRIGHT "${PROJECT_COPYRIGHT}")
|
||||
SET(MACOSX_BUNDLE_MIMETYPE "application/x-lmms-project")
|
||||
SET(MACOSX_BUNDLE_MIMETYPE_ICON "project.icns")
|
||||
SET(MACOSX_BUNDLE_MIMETYPE_ID "io.lmms")
|
||||
SET(MACOSX_BUNDLE_PROJECT_URL "${PROJECT_URL}")
|
||||
SET(MACOSX_BUNDLE_DMG_TITLE "${MACOSX_BUNDLE_BUNDLE_NAME} ${MACOSX_BUNDLE_LONG_VERSION_STRING}")
|
||||
|
||||
# FIXME: appdmg won't allow volume names > 27 char
|
||||
# See also https://github.com/LinusU/node-appdmg/issues/48
|
||||
STRING(SUBSTRING "${MACOSX_BUNDLE_DMG_TITLE}" 0 27 MACOSX_BUNDLE_DMG_TITLE)
|
||||
|
||||
CONFIGURE_FILE("lmms.plist.in" "${CMAKE_BINARY_DIR}/Info.plist")
|
||||
CONFIGURE_FILE("install_apple.sh.in" "${CMAKE_BINARY_DIR}/install_apple.sh" @ONLY)
|
||||
CONFIGURE_FILE("package_apple.json.in" "${CMAKE_BINARY_DIR}/package_apple.json" @ONLY)
|
||||
|
||||
IF(CMAKE_OSX_ARCHITECTURES)
|
||||
SET(DMG_ARCH "${CMAKE_OSX_ARCHITECTURES}")
|
||||
ELSEIF(IS_ARM64)
|
||||
# Target arch is host arch
|
||||
SET(DMG_ARCH "arm64")
|
||||
ELSE()
|
||||
# Fallback to Intel
|
||||
SET(DMG_ARCH "x86_64")
|
||||
ENDIF()
|
||||
|
||||
# DMG creation target
|
||||
SET(DMG_FILE "${CMAKE_BINARY_DIR}/${CMAKE_PROJECT_NAME}-${VERSION}-mac${APPLE_OS_VER}-${DMG_ARCH}.dmg")
|
||||
|
||||
FILE(REMOVE "${DMG_FILE}")
|
||||
ADD_CUSTOM_TARGET(removedmg
|
||||
COMMAND touch "\"${DMG_FILE}\"" && rm "\"${DMG_FILE}\""
|
||||
COMMENT "Removing old DMG")
|
||||
ADD_CUSTOM_TARGET(dmg
|
||||
COMMAND appdmg "\"${CMAKE_BINARY_DIR}/package_apple.json\"" "\"${DMG_FILE}\""
|
||||
DEPENDS "${CMAKE_BINARY_DIR}/package_apple.json"
|
||||
COMMENT "Generating DMG")
|
||||
ADD_DEPENDENCIES(dmg removedmg)
|
||||
|
||||
# see also ../postinstall/CMakeLists.txt
|
||||
|
||||
|
Before Width: | Height: | Size: 50 KiB |
|
Before Width: | Height: | Size: 113 KiB |
@@ -1,104 +0,0 @@
|
||||
#!/bin/bash
|
||||
# Creates Apple ".app" bundle for @PROJECT_NAME_UCASE@
|
||||
# Note:
|
||||
# Examine linkings using `otool -L somelib.so`
|
||||
# Debug the loading of dynamic libraries using `export DYLD_PRINT_LIBRARIES=1`
|
||||
|
||||
set -e
|
||||
|
||||
# Place to create ".app" bundle
|
||||
APP="@CMAKE_BINARY_DIR@/@PROJECT_NAME_UCASE@.app"
|
||||
|
||||
MSG_COLOR='\x1B[1;36m'
|
||||
COLOR_RESET='\x1B[0m'
|
||||
echo -e "$MSG_COLOR\n\nCreating App Bundle \"$APP\"...$COLOR_RESET"
|
||||
|
||||
qtpath="$(dirname "@QT_QMAKE_EXECUTABLE@")"
|
||||
export PATH="$PATH:$qtpath"
|
||||
|
||||
# Remove any old .app bundles
|
||||
rm -Rf "$APP"
|
||||
|
||||
# Copy/overwrite Info.plist
|
||||
command cp "@CMAKE_BINARY_DIR@/Info.plist" "@CMAKE_INSTALL_PREFIX@/"
|
||||
|
||||
# Create .app bundle containing contents from CMAKE_INSTALL_PREFIX
|
||||
mkdir -p "$APP/Contents/MacOS"
|
||||
mkdir -p "$APP/Contents/Frameworks"
|
||||
mkdir -p "$APP/Contents/Resources"
|
||||
cd "@CMAKE_INSTALL_PREFIX@"
|
||||
cp -R ./* "$APP/Contents"
|
||||
cp "@CMAKE_SOURCE_DIR@/cmake/apple/"*.icns "$APP/Contents/Resources/"
|
||||
|
||||
# Make all libraries writable for macdeployqt
|
||||
cd "$APP"
|
||||
find . -type f -print0 | xargs -0 chmod u+w
|
||||
|
||||
lmmsbin="MacOS/@CMAKE_PROJECT_NAME@"
|
||||
zynbin="MacOS/RemoteZynAddSubFx"
|
||||
|
||||
# Move lmms binary
|
||||
mv "$APP/Contents/bin/@CMAKE_PROJECT_NAME@" "$APP/Contents/$lmmsbin"
|
||||
|
||||
# Fix zyn linking
|
||||
mv "$APP/Contents/lib/lmms/RemoteZynAddSubFx" "$APP/Contents/$zynbin"
|
||||
|
||||
# Replace @rpath with @loader_path for Carla
|
||||
# See also plugins/CarlaBase/CMakeLists.txt
|
||||
# This MUST be done BEFORE calling macdeployqt
|
||||
install_name_tool -change @rpath/libcarlabase.dylib \
|
||||
@loader_path/libcarlabase.dylib \
|
||||
"$APP/Contents/lib/lmms/libcarlapatchbay.so"
|
||||
|
||||
install_name_tool -change @rpath/libcarlabase.dylib \
|
||||
@loader_path/libcarlabase.dylib \
|
||||
"$APP/Contents/lib/lmms/libcarlarack.so"
|
||||
|
||||
# Link lmms binary
|
||||
_executables="${_executables} -executable=$APP/Contents/$zynbin"
|
||||
|
||||
# Build a list of shared objects in target/lib/lmms
|
||||
for file in "$APP/Contents/lib/lmms/"*.so; do
|
||||
_thisfile="$APP/Contents/lib/lmms/${file##*/}"
|
||||
_executables="${_executables} -executable=$_thisfile"
|
||||
done
|
||||
|
||||
# Build a list of shared objects in target/lib/lmms/ladspa
|
||||
for file in "$APP/Contents/lib/lmms/ladspa/"*.so; do
|
||||
_thisfile="$APP/Contents/lib/lmms/ladspa/${file##*/}"
|
||||
_executables="${_executables} -executable=$_thisfile"
|
||||
done
|
||||
|
||||
# Finalize .app
|
||||
# shellcheck disable=SC2086
|
||||
macdeployqt "$APP" $_executables
|
||||
|
||||
# Carla is a standalone plugin. Remove library, look for it side-by-side LMMS.app
|
||||
# This MUST be done AFTER calling macdeployqt
|
||||
#
|
||||
# For example:
|
||||
# /Applications/LMMS.app
|
||||
# /Applications/Carla.app
|
||||
carlalibs=$(echo "@CARLA_LIBRARIES@"|tr ";" "\n")
|
||||
|
||||
# Loop over all libcarlas, fix linking
|
||||
for file in "$APP/Contents/lib/lmms/"libcarla*; do
|
||||
_thisfile="$APP/Contents/lib/lmms/${file##*/}"
|
||||
for lib in $carlalibs; do
|
||||
_oldpath="../../Frameworks/lib${lib}.dylib"
|
||||
_newpath="Carla.app/Contents/MacOS/lib${lib}.dylib"
|
||||
# shellcheck disable=SC2086
|
||||
install_name_tool -change @loader_path/$_oldpath \
|
||||
@executable_path/../../../$_newpath \
|
||||
"$_thisfile"
|
||||
rm -f "$APP/Contents/Frameworks/lib${lib}.dylib"
|
||||
done
|
||||
done
|
||||
|
||||
# Cleanup
|
||||
rm -rf "$APP/Contents/bin"
|
||||
|
||||
# Codesign
|
||||
codesign --force --deep --sign - "$APP"
|
||||
|
||||
echo -e "\nFinished.\n\n"
|
||||
@@ -1,9 +0,0 @@
|
||||
{
|
||||
"title": "@MACOSX_BUNDLE_DMG_TITLE@",
|
||||
"background": "@CMAKE_SOURCE_DIR@/cmake/apple/dmg_branding.png",
|
||||
"icon-size": 128,
|
||||
"contents": [
|
||||
{ "x": 139, "y": 200, "type": "file", "path": "@CMAKE_BINARY_DIR@/@MACOSX_BUNDLE_BUNDLE_NAME@.app" },
|
||||
{ "x": 568, "y": 200, "type": "link", "path": "/Applications" }
|
||||
]
|
||||
}
|
||||
@@ -1,56 +0,0 @@
|
||||
SET(PLUGIN_FILES "")
|
||||
IF(LMMS_BUILD_WIN32)
|
||||
INSTALL(FILES $<TARGET_FILE:Qt5::QWindowsIntegrationPlugin> DESTINATION platforms)
|
||||
ENDIF()
|
||||
|
||||
IF(LMMS_BUILD_WIN32 OR LMMS_INSTALL_DEPENDENCIES)
|
||||
include(InstallTargetDependencies)
|
||||
|
||||
# Collect directories to search for DLLs
|
||||
GET_FILENAME_COMPONENT(QTBIN_DIR "${QT_QMAKE_EXECUTABLE}" PATH)
|
||||
set(LIB_DIRS "${QTBIN_DIR}")
|
||||
|
||||
GET_PROPERTY(PLUGINS_BUILT GLOBAL PROPERTY PLUGINS_BUILT)
|
||||
|
||||
IF(LMMS_BUILD_WIN32)
|
||||
SET(LMMS_DEP_DESTINATION ${BIN_DIR})
|
||||
SET(PLUGIN_DEP_DESTINATION ${BIN_DIR})
|
||||
ELSE()
|
||||
SET(LMMS_DEP_DESTINATION ${LIB_DIR})
|
||||
SET(PLUGIN_DEP_DESTINATION ${LIB_DIR})
|
||||
ENDIF()
|
||||
|
||||
INSTALL_TARGET_DEPENDENCIES(
|
||||
NAME "main_binary"
|
||||
TARGETS lmms
|
||||
DESTINATION "${LMMS_DEP_DESTINATION}"
|
||||
LIB_DIRS ${LIB_DIRS}
|
||||
)
|
||||
|
||||
INSTALL_TARGET_DEPENDENCIES(
|
||||
NAME "plugins"
|
||||
TARGETS ${PLUGINS_BUILT}
|
||||
DESTINATION ${PLUGIN_DEP_DESTINATION}
|
||||
LIB_DIRS ${LIB_DIRS} "${PLUGIN_DIR}" "${PLUGIN_DIR}/optional"
|
||||
SEARCH_PATHS "${PLUGIN_DIR}" "${PLUGIN_DIR}/optional"
|
||||
)
|
||||
ENDIF()
|
||||
|
||||
# Install STK rawwaves
|
||||
if(LMMS_HAVE_STK AND (LMMS_BUILD_WIN32 OR LMMS_BUILD_APPLE))
|
||||
if(STK_RAWWAVE_ROOT)
|
||||
file(GLOB RAWWAVES "${STK_RAWWAVE_ROOT}/*.raw")
|
||||
install(FILES ${RAWWAVES} DESTINATION "${DATA_DIR}/stk/rawwaves")
|
||||
else()
|
||||
message(WARNING "Can't find STK rawwave root!")
|
||||
endif()
|
||||
endif()
|
||||
|
||||
IF(LMMS_BUILD_APPLE)
|
||||
INSTALL(CODE "EXECUTE_PROCESS(COMMAND chmod u+x ${CMAKE_BINARY_DIR}/install_apple.sh)")
|
||||
INSTALL(CODE "EXECUTE_PROCESS(COMMAND ${CMAKE_BINARY_DIR}/install_apple.sh RESULT_VARIABLE EXIT_CODE)
|
||||
IF(NOT EXIT_CODE EQUAL 0)
|
||||
MESSAGE(FATAL_ERROR \"Execution of install_apple.sh failed\")
|
||||
ENDIF()
|
||||
")
|
||||
ENDIF()
|
||||
@@ -1,27 +0,0 @@
|
||||
# List of DLLs considered to be system libraries.
|
||||
# This is needed when cross-compiling for Windows.
|
||||
ADVAPI32.dll
|
||||
COMCTL32.dll
|
||||
comdlg32.dll
|
||||
d3d11.dll
|
||||
dwmapi.dll
|
||||
dxgi.dll
|
||||
GDI32.dll
|
||||
IMM32.dll
|
||||
KERNEL32.dll
|
||||
MPR.DLL
|
||||
msvcrt.dll
|
||||
netapi32.dll
|
||||
ole32.dll
|
||||
OLEAUT32.dll
|
||||
OPENGL32.DLL
|
||||
SHELL32.dll
|
||||
USER32.dll
|
||||
userenv.dll
|
||||
UxTheme.dll
|
||||
VERSION.dll
|
||||
WINMM.DLL
|
||||
WS2_32.dll
|
||||
RPCRT4.dll
|
||||
dsound.dll
|
||||
SETUPAPI.dll
|
||||
@@ -1,19 +0,0 @@
|
||||
INSTALL(DIRECTORY icons/ DESTINATION "${DATA_DIR}/icons/hicolor")
|
||||
INSTALL(FILES lmms.desktop DESTINATION "${DATA_DIR}/applications")
|
||||
INSTALL(FILES lmms.xml DESTINATION "${DATA_DIR}/mime/packages")
|
||||
|
||||
# AppImage creation target
|
||||
SET(APPIMAGE_FILE "${CMAKE_BINARY_DIR}/${CMAKE_PROJECT_NAME}-${VERSION}-linux-${CMAKE_SYSTEM_PROCESSOR}.AppImage")
|
||||
|
||||
CONFIGURE_FILE("package_linux.sh.in" "${CMAKE_BINARY_DIR}/package_linux.sh" @ONLY)
|
||||
|
||||
FILE(REMOVE "${APPIMAGE_FILE}")
|
||||
ADD_CUSTOM_TARGET(removeappimage
|
||||
COMMAND rm -f "${APPIMAGE_FILE}"
|
||||
COMMENT "Removing old AppImage")
|
||||
ADD_CUSTOM_TARGET(appimage
|
||||
COMMAND chmod +x "${CMAKE_BINARY_DIR}/package_linux.sh"
|
||||
COMMAND "${CMAKE_BINARY_DIR}/package_linux.sh"
|
||||
COMMENT "Generating AppImage"
|
||||
WORKING_DIRECTORY "${CMAKE_BINARY_DIR}")
|
||||
ADD_DEPENDENCIES(appimage removeappimage)
|
||||
|
Before Width: | Height: | Size: 4.4 KiB |
|
Before Width: | Height: | Size: 2.7 KiB |
|
Before Width: | Height: | Size: 8.5 KiB |
|
Before Width: | Height: | Size: 5.2 KiB |
|
Before Width: | Height: | Size: 549 B |
|
Before Width: | Height: | Size: 446 B |
|
Before Width: | Height: | Size: 934 B |
|
Before Width: | Height: | Size: 771 B |
|
Before Width: | Height: | Size: 799 B |
|
Before Width: | Height: | Size: 681 B |
|
Before Width: | Height: | Size: 1.4 KiB |
|
Before Width: | Height: | Size: 1.1 KiB |
|
Before Width: | Height: | Size: 1.0 KiB |
|
Before Width: | Height: | Size: 836 B |
|
Before Width: | Height: | Size: 1.8 KiB |
|
Before Width: | Height: | Size: 1.3 KiB |
|
Before Width: | Height: | Size: 1.3 KiB |
|
Before Width: | Height: | Size: 1.2 KiB |
|
Before Width: | Height: | Size: 2.0 KiB |
|
Before Width: | Height: | Size: 2.1 KiB |
|
Before Width: | Height: | Size: 1.7 KiB |
|
Before Width: | Height: | Size: 1.5 KiB |
|
Before Width: | Height: | Size: 3.0 KiB |
|
Before Width: | Height: | Size: 2.7 KiB |
@@ -1,142 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:xlink="http://www.w3.org/1999/xlink"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
width="64"
|
||||
height="64"
|
||||
id="svg4034"
|
||||
version="1.1"
|
||||
inkscape:version="0.92.3 (2405546, 2018-03-11)"
|
||||
inkscape:export-filename="64x64@2.png"
|
||||
inkscape:export-xdpi="192"
|
||||
inkscape:export-ydpi="192"
|
||||
sodipodi:docname="lmms.svg">
|
||||
<defs
|
||||
id="defs4036">
|
||||
<filter
|
||||
inkscape:collect="always"
|
||||
style="color-interpolation-filters:sRGB"
|
||||
id="filter4173"
|
||||
x="-0.011714286"
|
||||
width="1.0234286"
|
||||
y="-0.0123"
|
||||
height="1.0246">
|
||||
<feGaussianBlur
|
||||
inkscape:collect="always"
|
||||
stdDeviation="0.205"
|
||||
id="feGaussianBlur4175" />
|
||||
</filter>
|
||||
<linearGradient
|
||||
gradientTransform="translate(0,32)"
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient4244-6"
|
||||
id="linearGradient866"
|
||||
x1="35"
|
||||
y1="-14"
|
||||
x2="35"
|
||||
y2="27"
|
||||
gradientUnits="userSpaceOnUse" />
|
||||
<linearGradient
|
||||
id="linearGradient4244-6"
|
||||
inkscape:collect="always">
|
||||
<stop
|
||||
id="stop4428"
|
||||
offset="0"
|
||||
style="stop-color:#27ab5f;stop-opacity:1" />
|
||||
<stop
|
||||
id="stop4430"
|
||||
offset="1"
|
||||
style="stop-color:#249a56;stop-opacity:1" />
|
||||
</linearGradient>
|
||||
</defs>
|
||||
<sodipodi:namedview
|
||||
id="base"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:zoom="1.4142135"
|
||||
inkscape:cx="210.86487"
|
||||
inkscape:cy="3.375495"
|
||||
inkscape:current-layer="svg4034"
|
||||
showgrid="true"
|
||||
inkscape:grid-bbox="true"
|
||||
inkscape:document-units="px"
|
||||
inkscape:window-width="1366"
|
||||
inkscape:window-height="705"
|
||||
inkscape:window-x="253"
|
||||
inkscape:window-y="1072"
|
||||
inkscape:window-maximized="1"
|
||||
showguides="false"
|
||||
inkscape:guide-bbox="true"
|
||||
inkscape:snap-bbox="true"
|
||||
inkscape:object-nodes="true">
|
||||
<inkscape:grid
|
||||
type="xygrid"
|
||||
id="grid4042" />
|
||||
<sodipodi:guide
|
||||
position="37,4"
|
||||
orientation="0,1"
|
||||
id="guide4951"
|
||||
inkscape:locked="false" />
|
||||
<sodipodi:guide
|
||||
position="38,60"
|
||||
orientation="0,1"
|
||||
id="guide4955"
|
||||
inkscape:locked="false" />
|
||||
<sodipodi:guide
|
||||
position="-19,32"
|
||||
orientation="0,1"
|
||||
id="guide4957"
|
||||
inkscape:locked="false" />
|
||||
</sodipodi:namedview>
|
||||
<metadata
|
||||
id="metadata4039">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title />
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<rect
|
||||
rx="4"
|
||||
y="4"
|
||||
x="4"
|
||||
height="56"
|
||||
width="56"
|
||||
id="rect5093"
|
||||
style="display:inline;opacity:0.98999999;fill:#34d07b;fill-opacity:1;stroke:none;stroke-opacity:1" />
|
||||
<rect
|
||||
rx="3"
|
||||
y="5"
|
||||
x="5"
|
||||
height="54"
|
||||
width="54"
|
||||
id="rect5095"
|
||||
style="display:inline;opacity:1;fill:url(#linearGradient866);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||
<path
|
||||
sodipodi:nodetypes="ccccccccccccccccc"
|
||||
inkscape:connector-curvature="0"
|
||||
id="path5085-3-6"
|
||||
d="M 32,13 11,25 v 24 l 7,4 7,-4 v -8 l -7,-4 v -8 l 14,-8 14,8 v 8 l -7,4 v 8 l 7,4 7,-4 V 25 Z"
|
||||
style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;baseline-shift:baseline;text-anchor:start;white-space:normal;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:0.15;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.97797471;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;filter:url(#filter4173);color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" />
|
||||
<path
|
||||
sodipodi:nodetypes="ccccccccccccccccc"
|
||||
inkscape:connector-curvature="0"
|
||||
id="path5085-3"
|
||||
d="M 32,11 11,23 v 24 l 7,4 7,-4 v -8 l -7,-4 v -8 l 14,-8 14,8 v 8 l -7,4 v 8 l 7,4 7,-4 V 23 Z"
|
||||
style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;baseline-shift:baseline;text-anchor:start;white-space:normal;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.97797471;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;filter:url(#filter5497);color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" />
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 6.0 KiB |
@@ -1,173 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:xlink="http://www.w3.org/1999/xlink"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
width="64"
|
||||
height="64"
|
||||
id="svg4034"
|
||||
version="1.1"
|
||||
inkscape:version="0.91 r13725"
|
||||
inkscape:export-filename="/home/umcaruje/d/Dropbox/lmms icons/project-256x256.png"
|
||||
inkscape:export-xdpi="360"
|
||||
inkscape:export-ydpi="360"
|
||||
sodipodi:docname="application-x-lmms-project.svg"
|
||||
enable-background="new">
|
||||
<defs
|
||||
id="defs4036">
|
||||
<linearGradient
|
||||
id="linearGradient4244-6"
|
||||
inkscape:collect="always">
|
||||
<stop
|
||||
id="stop4428"
|
||||
offset="0"
|
||||
style="stop-color:#27ab5f;stop-opacity:1" />
|
||||
<stop
|
||||
id="stop4430"
|
||||
offset="1"
|
||||
style="stop-color:#249a56;stop-opacity:1" />
|
||||
</linearGradient>
|
||||
<filter
|
||||
inkscape:collect="always"
|
||||
style="color-interpolation-filters:sRGB"
|
||||
id="filter4400"
|
||||
x="-0.024"
|
||||
width="1.048"
|
||||
y="-0.024"
|
||||
height="1.048">
|
||||
<feGaussianBlur
|
||||
inkscape:collect="always"
|
||||
stdDeviation="0.14999999"
|
||||
id="feGaussianBlur4402" />
|
||||
</filter>
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient4244-6"
|
||||
id="linearGradient4432"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
x1="9.8838835"
|
||||
y1="-9.8994951"
|
||||
x2="10.275496"
|
||||
y2="27.930717" />
|
||||
<filter
|
||||
inkscape:collect="always"
|
||||
style="color-interpolation-filters:sRGB"
|
||||
id="filter4442"
|
||||
x="-0.0116"
|
||||
width="1.0232"
|
||||
y="-0.012428571"
|
||||
height="1.0248571">
|
||||
<feGaussianBlur
|
||||
inkscape:collect="always"
|
||||
stdDeviation="0.145"
|
||||
id="feGaussianBlur4444" />
|
||||
</filter>
|
||||
</defs>
|
||||
<sodipodi:namedview
|
||||
id="base"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:zoom="5.6568542"
|
||||
inkscape:cx="4.2102935"
|
||||
inkscape:cy="18.651114"
|
||||
inkscape:current-layer="g4263"
|
||||
showgrid="false"
|
||||
inkscape:grid-bbox="true"
|
||||
inkscape:document-units="px"
|
||||
inkscape:window-width="1366"
|
||||
inkscape:window-height="740"
|
||||
inkscape:window-x="339"
|
||||
inkscape:window-y="1080"
|
||||
inkscape:window-maximized="1"
|
||||
showguides="false"
|
||||
inkscape:guide-bbox="true"
|
||||
inkscape:snap-bbox="true"
|
||||
inkscape:object-nodes="true">
|
||||
<inkscape:grid
|
||||
type="xygrid"
|
||||
id="grid4042" />
|
||||
<sodipodi:guide
|
||||
position="37,4"
|
||||
orientation="0,1"
|
||||
id="guide4951" />
|
||||
<sodipodi:guide
|
||||
position="38,60"
|
||||
orientation="0,1"
|
||||
id="guide4955" />
|
||||
<sodipodi:guide
|
||||
position="-19,32"
|
||||
orientation="0,1"
|
||||
id="guide4957" />
|
||||
</sodipodi:namedview>
|
||||
<metadata
|
||||
id="metadata4039">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title />
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<g
|
||||
inkscape:groupmode="layer"
|
||||
id="g4263"
|
||||
inkscape:label="mimetype"
|
||||
style="display:inline">
|
||||
<g
|
||||
id="g4189">
|
||||
<path
|
||||
sodipodi:nodetypes="ssssssccccs"
|
||||
inkscape:connector-curvature="0"
|
||||
id="path4273"
|
||||
d="m 10,-30 c -1.108,0 -2,0.892 -2,2 l 0,56 c 0,1.108 0.892,2 2,2 l 44,0 c 1.108,0 2,-0.892 2,-2 l 0,-43 c 0,-1 -1,-2 -1,-2 L 43,-29 c 0,0 -1,-1 -2,-1 z"
|
||||
style="display:inline;opacity:1;fill:#34d07b;fill-opacity:1;stroke:none;stroke-opacity:1"
|
||||
transform="translate(0,32)" />
|
||||
<path
|
||||
sodipodi:nodetypes="sssssscccs"
|
||||
inkscape:connector-curvature="0"
|
||||
id="path4275"
|
||||
d="m 10,-29 c -0.554,0 -1,0.446 -1,1 l 0,56 c 0,0.554 0.446,1 1,1 l 44,0 c 0.554,0 1,-0.446 1,-1 l 0,-43 -13,-1 -1,-13 z"
|
||||
style="display:inline;opacity:1;fill:url(#linearGradient4432);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
transform="translate(0,32)" />
|
||||
<path
|
||||
sodipodi:nodetypes="ccccccc"
|
||||
inkscape:connector-curvature="0"
|
||||
id="path4339-5"
|
||||
d="m 40,-29 0,11.999999 c 0,2 1,3 3,3 l 11.999999,0 0,-1 L 41,-29 Z"
|
||||
style="display:inline;opacity:0.12999998;fill:#222222;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;filter:url(#filter4400)"
|
||||
transform="translate(0,32)" />
|
||||
<path
|
||||
sodipodi:nodetypes="ccccccc"
|
||||
inkscape:connector-curvature="0"
|
||||
id="path4339"
|
||||
d="m 41,-29 0,12 c 0,1.03125 0.9375,2 2,2 l 12,0 0,-1 -13,-13 z"
|
||||
style="display:inline;fill:#34d07b;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
transform="translate(0,32)" />
|
||||
<path
|
||||
sodipodi:nodetypes="ccccccccccccccccc"
|
||||
inkscape:connector-curvature="0"
|
||||
id="path4436"
|
||||
d="m 32,22 -15,8 0,17.5 5,2.5 4.999999,-2.5 0,-6 L 22,39 l 0,-6 10,-5.5 10,5.5 0,6 -4.999999,2.5 0,6 L 42,50 47,47.5 47,30 Z"
|
||||
style="display:inline;color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;baseline-shift:baseline;text-anchor:start;white-space:normal;clip-rule:nonzero;overflow:visible;visibility:visible;opacity:0.15;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.97797471;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;filter:url(#filter4442);color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" />
|
||||
<path
|
||||
style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;baseline-shift:baseline;text-anchor:start;white-space:normal;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.97797471;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;filter:url(#filter5497);color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
|
||||
d="m 32,20 -15,8 0,17.5 5,2.5 4.999999,-2.5 0,-6 L 22,37 l 0,-6 10,-5.5 10,5.5 0,6 -4.999999,2.5 0,6 L 42,48 47,45.5 47,28 Z"
|
||||
id="path4265"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="ccccccccccccccccc" />
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 7.8 KiB |
@@ -1,24 +0,0 @@
|
||||
#!/usr/bin/env bash
|
||||
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
|
||||
export PATH="$PATH:/sbin"
|
||||
if command -v carla > /dev/null 2>&1; then
|
||||
CARLAPATH="$(command -v carla)"
|
||||
CARLAPREFIX="${CARLAPATH%/bin*}"
|
||||
echo "Carla appears to be installed on this system at $CARLAPREFIX/lib[64]/carla so we'll use it." >&2
|
||||
export LD_LIBRARY_PATH=$CARLAPREFIX/lib/carla:$CARLAPREFIX/lib64/carla:$LD_LIBRARY_PATH
|
||||
else
|
||||
echo "Carla does not appear to be installed. That's OK, please ignore any related library errors." >&2
|
||||
fi
|
||||
export LD_LIBRARY_PATH=$DIR/usr/lib/:$DIR/usr/lib/lmms:$LD_LIBRARY_PATH
|
||||
# Prevent segfault on VirualBox
|
||||
if lsmod |grep vboxguest > /dev/null 2>&1; then
|
||||
echo "VirtualBox detected. Forcing libgl software rendering." >&2
|
||||
export LIBGL_ALWAYS_SOFTWARE=1;
|
||||
fi
|
||||
if ldconfig -p | grep libjack.so.0 > /dev/null 2>&1; then
|
||||
echo "Jack appears to be installed on this system, so we'll use it." >&2
|
||||
else
|
||||
echo "Jack does not appear to be installed. That's OK, we'll use a dummy version instead." >&2
|
||||
export LD_LIBRARY_PATH=$DIR/usr/lib/lmms/optional:$LD_LIBRARY_PATH
|
||||
fi
|
||||
QT_X11_NO_NATIVE_MENUBAR=1 "$DIR"/usr/bin/lmms.real "$@"
|
||||
@@ -1,4 +0,0 @@
|
||||
?package(lmms):needs="X11" section="Apps/Sound" \
|
||||
title="LMMS" hints="Audio" command="/usr/bin/lmms" \
|
||||
longtitle="LMMS" \
|
||||
icon="/usr/share/icons/hicolor/scalable/apps/lmms.svg"
|
||||
@@ -1,17 +0,0 @@
|
||||
[Desktop Entry]
|
||||
Name=LMMS
|
||||
GenericName=Music production suite
|
||||
GenericName[ca]=Programari de producció musical
|
||||
GenericName[de]=Software zur Musik-Produktion
|
||||
GenericName[fr]=Suite de production musicale
|
||||
GenericName[pl]=Narzędzia do produkcji muzyki
|
||||
Comment=Music sequencer and synthesizer
|
||||
Comment[ca]=Producció fàcil de música per a tothom!
|
||||
Comment[fr]=Séquenceur et synthétiseur de musique
|
||||
Comment[pl]=Prosta produkcja muzyki dla każdego!
|
||||
Icon=lmms
|
||||
Exec=lmms %f
|
||||
Terminal=false
|
||||
Type=Application
|
||||
Categories=Qt;AudioVideo;Audio;Midi;
|
||||
MimeType=application/x-lmms-project;
|
||||
@@ -1,10 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<mime-info xmlns="http://www.freedesktop.org/standards/shared-mime-info">
|
||||
<mime-type type="application/x-lmms-project">
|
||||
<sub-class-of type="application/xml"/>
|
||||
<comment>LMMS project</comment>
|
||||
<comment xml:lang="ca">Projecte LMMS</comment>
|
||||
<glob pattern="*.mmpz"/>
|
||||
<glob pattern="*.mmp"/>
|
||||
</mime-type>
|
||||
</mime-info>
|
||||
@@ -1,213 +0,0 @@
|
||||
#!/usr/bin/env bash
|
||||
# Creates Linux ".AppImage" for @PROJECT_NAME_UCASE@
|
||||
#
|
||||
# Depends: linuxdeployqt
|
||||
#
|
||||
# Notes: Will attempt to fetch linuxdeployqt automatically (x86_64 only)
|
||||
# See Also: https://github.com/probonopd/linuxdeployqt/blob/master/BUILDING.md
|
||||
|
||||
VERBOSITY=2 # 3=debug
|
||||
LOGFILE="@CMAKE_BINARY_DIR@/appimage.log"
|
||||
APPDIR="@CMAKE_BINARY_DIR@/@PROJECT_NAME_UCASE@.AppDir/"
|
||||
DESKTOPFILE="${APPDIR}usr/share/applications/lmms.desktop"
|
||||
STRIP=""
|
||||
|
||||
# Don't strip for Debug|RelWithDebInfo builds
|
||||
# shellcheck disable=SC2193
|
||||
if [[ "@CMAKE_BUILD_TYPE@" == *"Deb"* ]]; then
|
||||
STRIP="-no-strip"
|
||||
fi
|
||||
|
||||
# Console colors
|
||||
RED="\\x1B[1;31m"
|
||||
GREEN="\\x1B[1;32m"
|
||||
YELLOW="\\x1B[1;33m"
|
||||
PLAIN="\\x1B[0m"
|
||||
|
||||
function error {
|
||||
echo -e " ${PLAIN}[${RED}error${PLAIN}] ${1}"
|
||||
return 1
|
||||
}
|
||||
|
||||
function success {
|
||||
echo -e " ${PLAIN}[${GREEN}success${PLAIN}] ${1}"
|
||||
}
|
||||
|
||||
function skipped {
|
||||
echo -e " ${PLAIN}[${YELLOW}skipped${PLAIN}] ${1}"
|
||||
}
|
||||
|
||||
# Exit with error message if any command fails
|
||||
trap "error 'Failed to generate AppImage'; exit 1" ERR
|
||||
|
||||
# Run a command silently, but print output if it fails
|
||||
function run_and_log {
|
||||
echo -e "\n\n>>>>> $1" >> "$LOGFILE"
|
||||
output="$("$@" 2>&1)"
|
||||
status=$?
|
||||
echo "$output" >> "$LOGFILE"
|
||||
[[ $status != 0 ]] && echo "$output"
|
||||
return $status
|
||||
}
|
||||
|
||||
# Blindly assume system arch is appimage arch
|
||||
ARCH=$(uname -m)
|
||||
export ARCH
|
||||
|
||||
# Check for problematic install locations
|
||||
INSTALL=$(echo "@CMAKE_INSTALL_PREFIX@" | sed 's/\/*$//g')
|
||||
if [ "$INSTALL" == "/usr/local" ] || [ "$INSTALL" == "/usr" ] ; then
|
||||
error "Incompatible CMAKE_INSTALL_PREFIX for creating AppImage: @CMAKE_INSTALL_PREFIX@"
|
||||
fi
|
||||
|
||||
# Ensure linuxdeployqt uses the same qmake version as cmake
|
||||
PATH="$(dirname "@QT_QMAKE_EXECUTABLE@"):$PATH"
|
||||
export PATH
|
||||
|
||||
# Use linuxdeployqt from env or in PATH
|
||||
[[ $LINUXDEPLOYQT ]] || LINUXDEPLOYQT="$(which linuxdeployqt 2>/dev/null)" || true
|
||||
[[ $APPIMAGETOOL ]] || APPIMAGETOOL="$(which appimagetool 2>/dev/null)" || true
|
||||
|
||||
# Fetch portable linuxdeployqt if not in PATH
|
||||
if [[ -z $LINUXDEPLOYQT || -z $APPIMAGETOOL ]]; then
|
||||
filename="linuxdeployqt-continuous-$ARCH.AppImage"
|
||||
url="https://github.com/probonopd/linuxdeployqt/releases/download/continuous/$filename"
|
||||
echo " [.......] Downloading: ${url}"
|
||||
wget -N -q "$url" && err=0 || err=$?
|
||||
case "$err" in
|
||||
0) success "Downloaded $PWD/$filename" ;;
|
||||
# 8 == server issued 4xx error
|
||||
8) error "Download failed (perhaps no package available for $ARCH)" ;;
|
||||
*) error "Download failed" ;;
|
||||
esac
|
||||
|
||||
# Extract AppImage and replace LINUXDEPLOYQT variable with extracted binary
|
||||
# to support systems without fuse
|
||||
# Also, we need to set LD_LIBRARY_PATH, but linuxdepoyqt's AppRun unsets it
|
||||
# See https://github.com/probonopd/linuxdeployqt/pull/370/
|
||||
chmod +x "$filename"
|
||||
./"$filename" --appimage-extract >/dev/null
|
||||
success "Extracted $filename"
|
||||
|
||||
# Use the extracted linuxdeployqt and appimagetool
|
||||
PATH="$(pwd -P)/squashfs-root/usr/bin:$PATH"
|
||||
[[ $LINUXDEPLOYQT ]] || LINUXDEPLOYQT="$(which linuxdeployqt)"
|
||||
[[ $APPIMAGETOOL ]] || APPIMAGETOOL="$(which appimagetool)"
|
||||
fi
|
||||
|
||||
# Make skeleton AppDir
|
||||
echo -e "\nCreating ${APPDIR}..."
|
||||
rm -rf "${APPDIR}"
|
||||
mkdir -p "${APPDIR}usr"
|
||||
success "Created ${APPDIR}"
|
||||
|
||||
# Clone install to AppDir
|
||||
echo -e "\nCopying @CMAKE_INSTALL_PREFIX@ to ${APPDIR}..."
|
||||
cp -R "@CMAKE_INSTALL_PREFIX@/." "${APPDIR}usr"
|
||||
rm -rf "${APPDIR}usr/include"
|
||||
success "${APPDIR}"
|
||||
|
||||
# Copy rawwaves directory for stk/mallets
|
||||
mkdir -p "${APPDIR}usr/share/stk/"
|
||||
cp -R /usr/share/stk/rawwaves/ "${APPDIR}usr/share/stk/"
|
||||
|
||||
# Create a wrapper script which calls the lmms executable
|
||||
mv "${APPDIR}usr/bin/lmms" "${APPDIR}usr/bin/lmms.real"
|
||||
|
||||
cp "@CMAKE_CURRENT_SOURCE_DIR@/launch_lmms.sh" "${APPDIR}usr/bin/lmms"
|
||||
|
||||
chmod +x "${APPDIR}usr/bin/lmms"
|
||||
|
||||
# Per https://github.com/probonopd/linuxdeployqt/issues/129
|
||||
unset LD_LIBRARY_PATH
|
||||
|
||||
# Ensure linuxdeployqt can find shared objects
|
||||
export LD_LIBRARY_PATH="${APPDIR}"usr/lib/lmms/:"${APPDIR}"usr/lib/lmms/optional:"$LD_LIBRARY_PATH"
|
||||
|
||||
# Move executables so linuxdeployqt can find them
|
||||
ZYNLIB="${APPDIR}usr/lib/lmms/RemoteZynAddSubFx"
|
||||
VSTLIB32="${APPDIR}usr/lib/lmms/32/RemoteVstPlugin32.exe.so"
|
||||
VSTLIB64="${APPDIR}usr/lib/lmms/RemoteVstPlugin64.exe.so"
|
||||
|
||||
ZYNBIN="${APPDIR}usr/bin/RemoteZynAddSubFx"
|
||||
VSTBIN32="${APPDIR}usr/bin/RemoteVstPlugin32.exe.so"
|
||||
VSTBIN64="${APPDIR}usr/bin/RemoteVstPlugin64.exe.so"
|
||||
|
||||
mv "$ZYNLIB" "$ZYNBIN"
|
||||
mv "$VSTLIB32" "$VSTBIN32" || true
|
||||
mv "$VSTLIB64" "$VSTBIN64" || true
|
||||
|
||||
# Handle wine linking
|
||||
if [ -d "@WINE_32_LIBRARY_DIR@" ] && \
|
||||
ldd "$VSTBIN32" | grep "libwine\.so" | grep "not found"; then
|
||||
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:"@WINE_32_LIBRARY_DIRS@"
|
||||
fi
|
||||
if [ -d "@WINE_64_LIBRARY_DIR@" ] && \
|
||||
ldd "$VSTBIN64" | grep "libwine\.so" | grep "not found"; then
|
||||
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:"@WINE_64_LIBRARY_DIRS@"
|
||||
fi
|
||||
|
||||
# Patch the desktop file
|
||||
sed -i 's/.*Exec=.*/Exec=lmms.real/' "$DESKTOPFILE"
|
||||
echo "X-AppImage-Version=@VERSION@" >> "$DESKTOPFILE"
|
||||
|
||||
# Fix linking for soft-linked plugins
|
||||
for file in "${APPDIR}usr/lib/lmms/"*.so; do
|
||||
thisfile="${APPDIR}usr/lib/lmms/${file##*/}"
|
||||
executables="${executables} -executable=$thisfile"
|
||||
done
|
||||
executables="${executables} -executable=${ZYNBIN}"
|
||||
executables="${executables} -executable=${VSTBIN32}"
|
||||
executables="${executables} -executable=${VSTBIN64}"
|
||||
executables="${executables} -executable=${APPDIR}usr/lib/lmms/ladspa/imp_1199.so"
|
||||
executables="${executables} -executable=${APPDIR}usr/lib/lmms/ladspa/imbeq_1197.so"
|
||||
executables="${executables} -executable=${APPDIR}usr/lib/lmms/ladspa/pitch_scale_1193.so"
|
||||
executables="${executables} -executable=${APPDIR}usr/lib/lmms/ladspa/pitch_scale_1194.so"
|
||||
|
||||
echo -e "\nWriting verbose output to \"${LOGFILE}\""
|
||||
echo -n > "$LOGFILE"
|
||||
|
||||
# Bundle both qt and non-qt dependencies into appimage format
|
||||
echo -e "\nBundling and relinking system dependencies..."
|
||||
|
||||
# shellcheck disable=SC2086
|
||||
run_and_log "$LINUXDEPLOYQT" "$DESKTOPFILE" $executables -bundle-non-qt-libs -verbose=$VERBOSITY $STRIP
|
||||
success "Bundled and relinked dependencies"
|
||||
|
||||
# Link to original location so lmms can find them
|
||||
ln -sr "$ZYNBIN" "$ZYNLIB"
|
||||
ln -sr "$VSTBIN32" "$VSTLIB32" || true
|
||||
ln -sr "$VSTBIN64" "$VSTLIB64" || true
|
||||
|
||||
# Remove wine library conflict
|
||||
rm -f "${APPDIR}/usr/lib/libwine.so.1"
|
||||
|
||||
# Use system-provided carla
|
||||
rm -f "${APPDIR}usr/lib/"libcarla*.so
|
||||
rm -f "${APPDIR}usr/lib/lmms/optional/"libcarla*.so
|
||||
|
||||
# Remove bundled jack in LD_LIBRARY_PATH if exists
|
||||
if [ -e "${APPDIR}/usr/lib/libjack.so.0" ]; then
|
||||
rm "${APPDIR}/usr/lib/libjack.so.0"
|
||||
fi
|
||||
|
||||
# Bundle jack out of LD_LIBRARY_PATH
|
||||
JACK_LIB=$(ldd "${APPDIR}/usr/bin/lmms.real" | sed -n 's/\tlibjack\.so\.0 => \(.\+\) (0x[0-9a-f]\+)/\1/p')
|
||||
if [ -e "$JACK_LIB" ]; then
|
||||
mkdir -p "${APPDIR}usr/lib/lmms/optional/"
|
||||
cp "$JACK_LIB" "${APPDIR}usr/lib/lmms/optional/"
|
||||
fi
|
||||
|
||||
# Point the AppRun to the shim launcher
|
||||
rm -f "${APPDIR}/AppRun"
|
||||
ln -sr "${APPDIR}/usr/bin/lmms" "${APPDIR}/AppRun"
|
||||
|
||||
# Add icon
|
||||
ln -srf "${APPDIR}/lmms.png" "${APPDIR}/.DirIcon"
|
||||
|
||||
# Create AppImage
|
||||
echo -e "\nFinishing the AppImage..."
|
||||
run_and_log "$APPIMAGETOOL" "${APPDIR}" "@APPIMAGE_FILE@"
|
||||
success "Created @APPIMAGE_FILE@"
|
||||
|
||||
echo -e "\nFinished"
|
||||
@@ -1,93 +0,0 @@
|
||||
# A wrapper around pkg-config-provided and cmake-provided bash completion that
|
||||
# will have dynamic behavior at INSTALL() time to allow both root-level
|
||||
# INSTALL() as well as user-level INSTALL().
|
||||
#
|
||||
# See also https://github.com/scop/bash-completion
|
||||
#
|
||||
# Copyright (c) 2018, Tres Finocchiaro, <tres.finocchiaro@gmail.com>
|
||||
# Redistribution and use is allowed according to the terms of the BSD license.
|
||||
# For details see the accompanying COPYING-CMAKE-SCRIPTS file.
|
||||
#
|
||||
# Usage:
|
||||
# INCLUDE(BashCompletion)
|
||||
# BASHCOMP_INSTALL(foo)
|
||||
# ... where "foo" is a shell script adjacent to the CMakeLists.txt
|
||||
#
|
||||
# How it determines BASHCOMP_PKG_PATH, in order:
|
||||
# 1. Uses BASHCOMP_PKG_PATH if already set (e.g. -DBASHCOMP_PKG_PATH=...)
|
||||
# a. If not, uses pkg-config's PKG_CHECK_MODULES to determine path
|
||||
# b. Fallback to cmake's FIND_PACKAGE(bash-completion) path
|
||||
# c. Fallback to hard-coded /usr/share/bash-completion/completions
|
||||
# 2. Final fallback to ${CMAKE_INSTALL_PREFIX}/share/bash-completion/completions if
|
||||
# detected path is unwritable.
|
||||
|
||||
# - Windows does not support bash completion
|
||||
# - macOS support should eventually be added for Homebrew (TODO)
|
||||
IF(WIN32)
|
||||
MESSAGE(STATUS "Bash completion is not supported on this platform.")
|
||||
ELSEIF(APPLE)
|
||||
MESSAGE(STATUS "Bash completion is not yet implemented for this platform.")
|
||||
ELSE()
|
||||
INCLUDE(FindUnixCommands)
|
||||
# Honor manual override if provided
|
||||
IF(NOT BASHCOMP_PKG_PATH)
|
||||
# First, use pkg-config, which is the most reliable
|
||||
FIND_PACKAGE(PkgConfig QUIET)
|
||||
IF(PKGCONFIG_FOUND)
|
||||
PKG_CHECK_MODULES(BASH_COMPLETION bash-completion)
|
||||
PKG_GET_VARIABLE(BASHCOMP_PKG_PATH bash-completion completionsdir)
|
||||
ELSE()
|
||||
# Second, use cmake (preferred but less common)
|
||||
FIND_PACKAGE(bash-completion QUIET)
|
||||
IF(BASH_COMPLETION_FOUND)
|
||||
SET(BASHCOMP_PKG_PATH "${BASH_COMPLETION_COMPLETIONSDIR}")
|
||||
ENDIF()
|
||||
ENDIF()
|
||||
|
||||
# Third, use a hard-coded fallback value
|
||||
IF("${BASHCOMP_PKG_PATH}" STREQUAL "")
|
||||
SET(BASHCOMP_PKG_PATH "/usr/share/bash-completion/completions")
|
||||
ENDIF()
|
||||
ENDIF()
|
||||
|
||||
# Always provide a fallback for non-root INSTALL()
|
||||
SET(BASHCOMP_USER_PATH "${CMAKE_INSTALL_PREFIX}/share/bash-completion/completions")
|
||||
|
||||
# Cmake doesn't allow easy use of conditional logic at INSTALL() time
|
||||
# this is a problem because ${BASHCOMP_PKG_PATH} may not be writable and we
|
||||
# need sane fallback behavior for bundled INSTALL() (e.g. .AppImage, etc).
|
||||
#
|
||||
# The reason this can't be detected by cmake is that it's fairly common to
|
||||
# run "cmake" as a one user (i.e. non-root) and "make install" as another user
|
||||
# (i.e. root).
|
||||
#
|
||||
# - Creates a script called "install_${SCRIPT_NAME}_completion.sh" into the
|
||||
# working binary directory and invokes this script at install.
|
||||
# - Script handles INSTALL()-time conditional logic for sane ballback behavior
|
||||
# when ${BASHCOMP_PKG_PATH} is unwritable (i.e. non-root); Something cmake
|
||||
# can't handle on its own at INSTALL() time)
|
||||
MACRO(BASHCOMP_INSTALL SCRIPT_NAME)
|
||||
# A shell script for wrapping conditionl logic
|
||||
SET(BASHCOMP_SCRIPT "${CMAKE_CURRENT_BINARY_DIR}/install_${SCRIPT_NAME}_completion.sh")
|
||||
|
||||
FILE(WRITE ${BASHCOMP_SCRIPT} "\
|
||||
#!${BASH}\n\
|
||||
set -e\n\
|
||||
if [ -w \"${BASHCOMP_PKG_PATH}\" ]; then\n\
|
||||
BASHCOMP_PKG_PATH=\"${BASHCOMP_PKG_PATH}\"\n\
|
||||
else \n\
|
||||
BASHCOMP_PKG_PATH=\"\$DESTDIR${BASHCOMP_USER_PATH}\"\n\
|
||||
fi\n\
|
||||
echo -e \"\\nInstalling bash completion...\\n\"\n\
|
||||
mkdir -p \"\$BASHCOMP_PKG_PATH\"\n\
|
||||
cp \"${CMAKE_CURRENT_SOURCE_DIR}/${SCRIPT_NAME}\" \"\$BASHCOMP_PKG_PATH\"\n\
|
||||
chmod a+r \"\$BASHCOMP_PKG_PATH/${SCRIPT_NAME}\"\n\
|
||||
echo -e \"Bash completion for ${SCRIPT_NAME} has been installed to \$BASHCOMP_PKG_PATH/${SCRIPT_NAME}\"\n\
|
||||
")
|
||||
INSTALL(CODE "EXECUTE_PROCESS(COMMAND chmod u+x \"install_${SCRIPT_NAME}_completion.sh\" WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} )")
|
||||
INSTALL(CODE "EXECUTE_PROCESS(COMMAND \"./install_${SCRIPT_NAME}_completion.sh\" WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} )")
|
||||
|
||||
MESSAGE(STATUS "Bash completion script for ${SCRIPT_NAME} will be installed to ${BASHCOMP_PKG_PATH} or fallback to ${BASHCOMP_USER_PATH} if unwritable.")
|
||||
ENDMACRO()
|
||||
ENDIF()
|
||||
|
||||
@@ -1,93 +1,98 @@
|
||||
# BuildPlugin.cmake - Copyright (c) 2008 Tobias Doerffel
|
||||
#
|
||||
# description: build LMMS-plugin
|
||||
# usage: BUILD_PLUGIN(<PLUGIN_NAME> <PLUGIN_SOURCES> MOCFILES <HEADERS_FOR_MOC> EMBEDDED_RESOURCES <LIST_OF_FILES_TO_EMBED> LINK <SHARED|MODULE>)
|
||||
# usage: BUILD_PLUGIN(<PLUGIN_NAME> <PLUGIN_SOURCES> MOCFILES <HEADERS_FOR_MOC> EMBEDDED_RESOURCES <LIST_OF_FILES_TO_EMBED> UICFILES <UI_FILES_TO_COMPILE> )
|
||||
|
||||
INCLUDE(GenQrc)
|
||||
MACRO(CAR var)
|
||||
SET(${var} ${ARGV1})
|
||||
ENDMACRO(CAR)
|
||||
|
||||
MACRO(BUILD_PLUGIN PLUGIN_NAME)
|
||||
CMAKE_PARSE_ARGUMENTS(PLUGIN "" "LINK;EXPORT_BASE_NAME" "MOCFILES;EMBEDDED_RESOURCES" ${ARGN})
|
||||
SET(PLUGIN_SOURCES ${PLUGIN_UNPARSED_ARGUMENTS})
|
||||
MACRO(CDR var junk)
|
||||
SET(${var} ${ARGN})
|
||||
ENDMACRO(CDR)
|
||||
|
||||
INCLUDE_DIRECTORIES("${CMAKE_CURRENT_BINARY_DIR}" "${CMAKE_BINARY_DIR}" "${CMAKE_SOURCE_DIR}/include")
|
||||
MACRO(LIST_CONTAINS var value)
|
||||
SET(${var})
|
||||
FOREACH (value2 ${ARGN})
|
||||
IF (${value} STREQUAL ${value2})
|
||||
SET(${var} TRUE)
|
||||
ENDIF (${value} STREQUAL ${value2})
|
||||
ENDFOREACH (value2)
|
||||
ENDMACRO(LIST_CONTAINS)
|
||||
|
||||
MACRO(PARSE_ARGUMENTS prefix arg_names option_names)
|
||||
SET(DEFAULT_ARGS)
|
||||
FOREACH(arg_name ${arg_names})
|
||||
SET(${prefix}_${arg_name})
|
||||
ENDFOREACH(arg_name)
|
||||
FOREACH(option ${option_names})
|
||||
SET(${prefix}_${option} FALSE)
|
||||
ENDFOREACH(option)
|
||||
|
||||
SET(current_arg_name DEFAULT_ARGS)
|
||||
SET(current_arg_list)
|
||||
FOREACH(arg ${ARGN})
|
||||
LIST_CONTAINS(is_arg_name ${arg} ${arg_names})
|
||||
IF (is_arg_name)
|
||||
SET(${prefix}_${current_arg_name} ${current_arg_list})
|
||||
SET(current_arg_name ${arg})
|
||||
SET(current_arg_list)
|
||||
ELSE (is_arg_name)
|
||||
LIST_CONTAINS(is_option ${arg} ${option_names})
|
||||
IF (is_option)
|
||||
SET(${prefix}_${arg} TRUE)
|
||||
ELSE (is_option)
|
||||
SET(current_arg_list ${current_arg_list} ${arg})
|
||||
ENDIF (is_option)
|
||||
ENDIF (is_arg_name)
|
||||
ENDFOREACH(arg)
|
||||
SET(${prefix}_${current_arg_name} ${current_arg_list})
|
||||
ENDMACRO(PARSE_ARGUMENTS)
|
||||
|
||||
MACRO(BUILD_PLUGIN)
|
||||
PARSE_ARGUMENTS(PLUGIN "MOCFILES;EMBEDDED_RESOURCES;UICFILES" "" ${ARGN} )
|
||||
CAR(PLUGIN_NAME ${PLUGIN_DEFAULT_ARGS})
|
||||
CDR(PLUGIN_SOURCES ${PLUGIN_DEFAULT_ARGS})
|
||||
|
||||
INCLUDE_DIRECTORIES(${CMAKE_CURRENT_BINARY_DIR} ${CMAKE_BINARY_DIR} ${CMAKE_SOURCE_DIR}/include ${CMAKE_SOURCE_DIR}/src/gui)
|
||||
|
||||
ADD_DEFINITIONS(-DPLUGIN_NAME=${PLUGIN_NAME})
|
||||
|
||||
LIST(LENGTH PLUGIN_EMBEDDED_RESOURCES ER_LEN)
|
||||
IF(ER_LEN)
|
||||
# Expand and sort arguments to avoid locale dependent sorting in
|
||||
# shell
|
||||
SET(NEW_ARGS)
|
||||
FOREACH(ARG ${PLUGIN_EMBEDDED_RESOURCES})
|
||||
FILE(GLOB EXPANDED "${ARG}")
|
||||
LIST(SORT EXPANDED)
|
||||
FOREACH(ITEM ${EXPANDED})
|
||||
LIST(APPEND NEW_ARGS "${ITEM}")
|
||||
ENDFOREACH()
|
||||
ENDFOREACH()
|
||||
SET(PLUGIN_EMBEDDED_RESOURCES ${NEW_ARGS})
|
||||
|
||||
ADD_GEN_QRC(RCC_OUT "${PLUGIN_NAME}.qrc" PREFIX artwork/${PLUGIN_NAME} ${PLUGIN_EMBEDDED_RESOURCES})
|
||||
SET(ER_H ${CMAKE_CURRENT_BINARY_DIR}/embedded_resources.h)
|
||||
ADD_CUSTOM_COMMAND(OUTPUT ${ER_H}
|
||||
COMMAND ${BIN2RES}
|
||||
ARGS ${PLUGIN_EMBEDDED_RESOURCES} > ${ER_H}
|
||||
DEPENDS ${BIN2RES})
|
||||
ENDIF(ER_LEN)
|
||||
|
||||
QT5_WRAP_CPP(plugin_MOC_out ${PLUGIN_MOCFILES})
|
||||
|
||||
QT4_WRAP_CPP(plugin_MOC_out ${PLUGIN_MOCFILES})
|
||||
QT4_WRAP_UI(plugin_UIC_out ${PLUGIN_UICFILES})
|
||||
FOREACH(f ${PLUGIN_SOURCES})
|
||||
ADD_FILE_DEPENDENCIES(${f} ${RCC_OUT})
|
||||
ADD_FILE_DEPENDENCIES(${f} ${ER_H} ${plugin_MOC_out} ${plugin_UIC_out})
|
||||
ENDFOREACH(f)
|
||||
|
||||
IF(LMMS_BUILD_APPLE)
|
||||
LINK_DIRECTORIES("${CMAKE_BINARY_DIR}")
|
||||
LINK_LIBRARIES(${QT_LIBRARIES})
|
||||
LINK_DIRECTORIES(${CMAKE_BINARY_DIR})
|
||||
LINK_LIBRARIES(${QT_LIBRARIES})
|
||||
ENDIF(LMMS_BUILD_APPLE)
|
||||
IF(LMMS_BUILD_WIN32)
|
||||
LINK_DIRECTORIES("${CMAKE_BINARY_DIR}" "${CMAKE_SOURCE_DIR}")
|
||||
LINK_LIBRARIES(${QT_LIBRARIES})
|
||||
LINK_DIRECTORIES(${CMAKE_BINARY_DIR} ${CMAKE_SOURCE_DIR})
|
||||
LINK_LIBRARIES(-llmms ${QT_LIBRARIES})
|
||||
ENDIF(LMMS_BUILD_WIN32)
|
||||
|
||||
IF (NOT PLUGIN_LINK)
|
||||
SET(PLUGIN_LINK "MODULE")
|
||||
ENDIF()
|
||||
|
||||
ADD_LIBRARY(${PLUGIN_NAME} ${PLUGIN_LINK} ${PLUGIN_SOURCES} ${plugin_MOC_out} ${RCC_OUT})
|
||||
|
||||
target_link_libraries("${PLUGIN_NAME}" lmms Qt5::Widgets Qt5::Xml)
|
||||
|
||||
INSTALL(TARGETS ${PLUGIN_NAME}
|
||||
LIBRARY DESTINATION "${PLUGIN_DIR}"
|
||||
RUNTIME DESTINATION "${PLUGIN_DIR}"
|
||||
)
|
||||
ADD_LIBRARY(${PLUGIN_NAME} MODULE ${PLUGIN_SOURCES})
|
||||
INSTALL(TARGETS ${PLUGIN_NAME} LIBRARY DESTINATION "${PLUGIN_DIR}")
|
||||
|
||||
IF(LMMS_BUILD_APPLE)
|
||||
IF ("${PLUGIN_LINK}" STREQUAL "SHARED")
|
||||
TARGET_LINK_OPTIONS(${PLUGIN_NAME} PRIVATE -undefined dynamic_lookup)
|
||||
ENDIF()
|
||||
SET_TARGET_PROPERTIES(${PLUGIN_NAME} PROPERTIES LINK_FLAGS "-bundle_loader ${CMAKE_BINARY_DIR}/lmms")
|
||||
ENDIF(LMMS_BUILD_APPLE)
|
||||
IF(LMMS_BUILD_WIN32)
|
||||
add_custom_command(
|
||||
TARGET "${PLUGIN_NAME}"
|
||||
POST_BUILD
|
||||
COMMAND "${STRIP_COMMAND}" "$<TARGET_FILE:${PLUGIN_NAME}>"
|
||||
VERBATIM
|
||||
COMMAND_EXPAND_LISTS
|
||||
)
|
||||
SET_TARGET_PROPERTIES(${PLUGIN_NAME} PROPERTIES PREFIX "")
|
||||
ENDIF()
|
||||
ADD_CUSTOM_COMMAND(TARGET ${PLUGIN_NAME} POST_BUILD COMMAND ${STRIP} ${CMAKE_CURRENT_BINARY_DIR}/${PLUGIN_NAME}.dll)
|
||||
ENDIF(LMMS_BUILD_WIN32)
|
||||
|
||||
SET_DIRECTORY_PROPERTIES(PROPERTIES ADDITIONAL_MAKE_CLEAN_FILES "${RCC_OUT} ${plugin_MOC_out}")
|
||||
|
||||
IF(NOT PLUGIN_EXPORT_BASE_NAME)
|
||||
SET(PLUGIN_EXPORT_BASE_NAME "PLUGIN")
|
||||
ENDIF()
|
||||
|
||||
GENERATE_EXPORT_HEADER(${PLUGIN_NAME}
|
||||
BASE_NAME ${PLUGIN_EXPORT_BASE_NAME}
|
||||
)
|
||||
TARGET_INCLUDE_DIRECTORIES(${PLUGIN_NAME}
|
||||
PUBLIC $<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}>
|
||||
)
|
||||
|
||||
SET_PROPERTY(GLOBAL APPEND PROPERTY PLUGINS_BUILT ${PLUGIN_NAME})
|
||||
GET_PROPERTY(PLUGINS_BUILT GLOBAL PROPERTY PLUGINS_BUILT)
|
||||
SET_DIRECTORY_PROPERTIES(PROPERTIES ADDITIONAL_MAKE_CLEAN_FILES "${ER_H} ${plugin_MOC_out}")
|
||||
ENDMACRO(BUILD_PLUGIN)
|
||||
|
||||
|
||||
@@ -1,22 +0,0 @@
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
modification, are permitted provided that the following conditions
|
||||
are met:
|
||||
|
||||
1. Redistributions of source code must retain the copyright
|
||||
notice, this list of conditions and the following disclaimer.
|
||||
2. Redistributions in binary form must reproduce the copyright
|
||||
notice, this list of conditions and the following disclaimer in the
|
||||
documentation and/or other materials provided with the distribution.
|
||||
3. The name of the author may not be used to endorse or promote products
|
||||
derived from this software without specific prior written permission.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
|
||||
IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
|
||||
OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||
IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
||||
THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
@@ -1,33 +0,0 @@
|
||||
|
||||
macro(CHECK_CXX_PREPROCESSOR VAR DIRECTIVE)
|
||||
string(RANDOM DEFINED_KEY)
|
||||
string(RANDOM UNDEFINED_KEY)
|
||||
|
||||
set(TMP_FILENAME "${CMAKE_CURRENT_BINARY_DIR}/CxxTmp/src.cpp")
|
||||
SET(SRC "
|
||||
#if ${DIRECTIVE}
|
||||
#error ${DEFINED_KEY}
|
||||
#else
|
||||
#error ${UNDEFINED_KEY}
|
||||
#endif
|
||||
")
|
||||
file(WRITE ${TMP_FILENAME} "${SRC}")
|
||||
try_compile(RESULT_VAR
|
||||
${CMAKE_CURRENT_BINARY_DIR}
|
||||
${TMP_FILENAME}
|
||||
OUTPUT_VARIABLE OUTPUT_VAR
|
||||
)
|
||||
|
||||
if(OUTPUT_VAR MATCHES ${DEFINED_KEY})
|
||||
set(${VAR} ON)
|
||||
elseif(OUTPUT_VAR MATCHES ${UNDEFINED_KEY})
|
||||
set(${VAR} OFF)
|
||||
else()
|
||||
message(FATAL_ERROR "Can't determine if \"${DIRECTIVE}\" is true.")
|
||||
endif()
|
||||
endmacro()
|
||||
|
||||
|
||||
macro(CHECK_CXX_DEFINE VAR DEFINE)
|
||||
CHECK_CXX_PREPROCESSOR(${VAR} "defined(${DEFINE})")
|
||||
endmacro()
|
||||
@@ -1,213 +0,0 @@
|
||||
# Utility for validating and, if needed, cloning all submodules
|
||||
#
|
||||
# Looks for a .gitmodules in the root project folder
|
||||
# Loops over all modules looking well-known configure/build scripts
|
||||
#
|
||||
# Usage:
|
||||
# INCLUDE(CheckSubmodules)
|
||||
#
|
||||
# Options:
|
||||
# SET(PLUGIN_LIST "ZynAddSubFx;...") # skips submodules for plugins not explicitely listed
|
||||
#
|
||||
# Or via command line:
|
||||
# cmake -PLUGIN_LIST=foo;bar
|
||||
#
|
||||
# Copyright (c) 2019, Tres Finocchiaro, <tres.finocchiaro@gmail.com>
|
||||
#
|
||||
# Redistribution and use is allowed according to the terms of the BSD license.
|
||||
# For details see the accompanying COPYING-CMAKE-SCRIPTS file.
|
||||
|
||||
# Files which confirm a successful clone
|
||||
SET(VALID_CRUMBS "CMakeLists.txt;Makefile;Makefile.in;Makefile.am;configure.ac;configure.py;autogen.sh;.gitignore;LICENSE;Home.md;license.txt")
|
||||
|
||||
OPTION(NO_SHALLOW_CLONE "Disable shallow cloning of submodules" OFF)
|
||||
|
||||
# Try and use the specified shallow clone on submodules, if supported
|
||||
SET(DEPTH_VALUE 100)
|
||||
|
||||
# Number of times git commands will retry before failing
|
||||
SET(MAX_ATTEMPTS 2)
|
||||
|
||||
MESSAGE("\nChecking submodules...")
|
||||
IF(NOT EXISTS "${CMAKE_SOURCE_DIR}/.gitmodules")
|
||||
MESSAGE("Skipping the check because .gitmodules not detected."
|
||||
"Please make sure you have all submodules in the source tree!"
|
||||
)
|
||||
RETURN()
|
||||
ENDIF()
|
||||
FILE(READ "${CMAKE_SOURCE_DIR}/.gitmodules" SUBMODULE_DATA)
|
||||
|
||||
# Force English locale
|
||||
SET(LC_ALL_BACKUP "$ENV{LC_ALL}")
|
||||
SET(LANG_BACKUP "$ENV{LANG}")
|
||||
SET(ENV{LC_ALL} "C")
|
||||
SET(ENV{LANG} "en_US")
|
||||
|
||||
# Submodule list pairs, unparsed (WARNING: Assumes alpha-numeric paths)
|
||||
STRING(REGEX MATCHALL "path = [-0-9A-Za-z/_]+" SUBMODULE_LIST_RAW ${SUBMODULE_DATA})
|
||||
STRING(REGEX MATCHALL "url = [.:%-0-9A-Za-z/_]+" SUBMODULE_URL_RAW ${SUBMODULE_DATA})
|
||||
|
||||
# Submodule list pairs, parsed
|
||||
SET(SUBMODULE_LIST "")
|
||||
SET(SUBMODULE_URL "")
|
||||
|
||||
FOREACH(_path ${SUBMODULE_LIST_RAW})
|
||||
# Parse SUBMODULE_PATH
|
||||
STRING(REPLACE "path = " "" SUBMODULE_PATH "${_path}")
|
||||
|
||||
# Grab index for matching SUBMODULE_URL
|
||||
LIST(FIND SUBMODULE_LIST_RAW "${_path}" SUBMODULE_INDEX)
|
||||
LIST(GET SUBMODULE_URL_RAW ${SUBMODULE_INDEX} _url)
|
||||
|
||||
# Parse SUBMODULE_URL
|
||||
STRING(REPLACE "url = " "" SUBMODULE_URL "${_url}")
|
||||
|
||||
SET(SKIP false)
|
||||
|
||||
# Loop over skipped plugins, add to SKIP_SUBMODULES (e.g. -DPLUGIN_LIST=foo;bar)
|
||||
IF(${SUBMODULE_PATH} MATCHES "^plugins/")
|
||||
SET(REMOVE_PLUGIN true)
|
||||
FOREACH(_plugin ${PLUGIN_LIST})
|
||||
IF(_plugin STREQUAL "")
|
||||
CONTINUE()
|
||||
ENDIF()
|
||||
IF(${SUBMODULE_PATH} MATCHES "${_plugin}")
|
||||
SET(REMOVE_PLUGIN false)
|
||||
ENDIF()
|
||||
ENDFOREACH()
|
||||
|
||||
IF(REMOVE_PLUGIN)
|
||||
LIST(APPEND SKIP_SUBMODULES "${SUBMODULE_PATH}")
|
||||
ENDIF()
|
||||
ENDIF()
|
||||
|
||||
# Finally, loop and mark "SKIP" on match
|
||||
IF(SKIP_SUBMODULES)
|
||||
FOREACH(_skip ${SKIP_SUBMODULES})
|
||||
IF("${SUBMODULE_PATH}" MATCHES "${_skip}")
|
||||
MESSAGE("-- Skipping ${SUBMODULE_PATH} matches \"${_skip}\" (absent in PLUGIN_LIST)")
|
||||
SET(SKIP true)
|
||||
BREAK()
|
||||
ENDIF()
|
||||
ENDFOREACH()
|
||||
ENDIF()
|
||||
|
||||
IF(NOT SKIP)
|
||||
LIST(APPEND SUBMODULE_LIST "${SUBMODULE_PATH}")
|
||||
LIST(APPEND SUBMODULE_URL "${SUBMODULE_URL}")
|
||||
ENDIF()
|
||||
ENDFOREACH()
|
||||
|
||||
# Once called, status is stored in GIT_RESULT respectively.
|
||||
# Note: Git likes to write to stderr. Don't assume stderr is error; Check GIT_RESULT instead.
|
||||
MACRO(GIT_SUBMODULE SUBMODULE_PATH FORCE_DEINIT FORCE_REMOTE NO_DEPTH)
|
||||
FIND_PACKAGE(Git REQUIRED)
|
||||
# Handle missing commits
|
||||
SET(FORCE_REMOTE_FLAG "${FORCE_REMOTE}")
|
||||
SET(NO_DEPTH_FLAG "${NO_DEPTH}")
|
||||
IF(FORCE_REMOTE_FLAG)
|
||||
MESSAGE("-- Adding remote submodulefix to ${SUBMODULE_PATH}")
|
||||
EXECUTE_PROCESS(
|
||||
COMMAND "${GIT_EXECUTABLE}" remote rm submodulefix
|
||||
COMMAND "${GIT_EXECUTABLE}" remote add submodulefix ${FORCE_REMOTE}
|
||||
COMMAND "${GIT_EXECUTABLE}" fetch submodulefix
|
||||
WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}/${SUBMODULE_PATH}"
|
||||
OUTPUT_QUIET ERROR_QUIET
|
||||
)
|
||||
# Recurse
|
||||
GIT_SUBMODULE(${SUBMODULE_PATH} false false ${NO_DEPTH_FLAG})
|
||||
ELSEIF(${FORCE_DEINIT})
|
||||
MESSAGE("-- Resetting ${SUBMODULE_PATH}")
|
||||
EXECUTE_PROCESS(
|
||||
COMMAND "${GIT_EXECUTABLE}" submodule deinit -f "${CMAKE_SOURCE_DIR}/${SUBMODULE_PATH}"
|
||||
WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}"
|
||||
OUTPUT_QUIET
|
||||
)
|
||||
MESSAGE("-- Deleting ${CMAKE_SOURCE_DIR}/.git/${SUBMODULE_PATH}")
|
||||
FILE(REMOVE_RECURSE "${CMAKE_SOURCE_DIR}/.git/modules/${SUBMODULE_PATH}")
|
||||
# Recurse without depth
|
||||
GIT_SUBMODULE(${SUBMODULE_PATH} false false true)
|
||||
ELSE()
|
||||
# Try to use the depth switch
|
||||
IF(NO_SHALLOW_CLONE OR GIT_VERSION_STRING VERSION_LESS "1.8.4" OR NO_DEPTH_FLAG)
|
||||
# Shallow submodules were introduced in 1.8.4
|
||||
MESSAGE("-- Fetching ${SUBMODULE_PATH}")
|
||||
SET(DEPTH_CMD "")
|
||||
SET(DEPTH_VAL "")
|
||||
ELSE()
|
||||
MESSAGE("-- Fetching ${SUBMODULE_PATH} @ --depth ${DEPTH_VALUE}")
|
||||
SET(DEPTH_CMD "--depth")
|
||||
SET(DEPTH_VAL "${DEPTH_VALUE}")
|
||||
ENDIF()
|
||||
|
||||
EXECUTE_PROCESS(
|
||||
COMMAND "${GIT_EXECUTABLE}" submodule update --init --recursive ${DEPTH_CMD} ${DEPTH_VAL} "${CMAKE_SOURCE_DIR}/${SUBMODULE_PATH}"
|
||||
WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}"
|
||||
RESULT_VARIABLE GIT_RESULT
|
||||
OUTPUT_VARIABLE GIT_STDOUT
|
||||
ERROR_VARIABLE GIT_STDERR
|
||||
)
|
||||
|
||||
SET(GIT_MESSAGE "${GIT_STDOUT}${GIT_STDERR}")
|
||||
MESSAGE("${GIT_MESSAGE}")
|
||||
ENDIF()
|
||||
ENDMACRO()
|
||||
|
||||
SET(MISSING_COMMIT_PHRASES "no such remote ref;reference is not a tree;unadvertised object")
|
||||
SET(RETRY_PHRASES "Failed to recurse;cannot create directory;already exists;${MISSING_COMMIT_PHRASES}")
|
||||
|
||||
# Attempt to do lazy clone
|
||||
FOREACH(_submodule ${SUBMODULE_LIST})
|
||||
STRING(REPLACE "/" ";" PATH_PARTS "${_submodule}")
|
||||
LIST(REVERSE PATH_PARTS)
|
||||
LIST(GET PATH_PARTS 0 SUBMODULE_NAME)
|
||||
|
||||
MESSAGE("-- Checking ${SUBMODULE_NAME}...")
|
||||
SET(CRUMB_FOUND false)
|
||||
FOREACH(_crumb ${VALID_CRUMBS})
|
||||
IF(EXISTS "${CMAKE_SOURCE_DIR}/${_submodule}/${_crumb}")
|
||||
SET(CRUMB_FOUND true)
|
||||
MESSAGE("-- Found ${_submodule}/${_crumb}")
|
||||
BREAK()
|
||||
ENDIF()
|
||||
ENDFOREACH()
|
||||
IF(NOT CRUMB_FOUND)
|
||||
GIT_SUBMODULE("${_submodule}" false false false)
|
||||
|
||||
SET(COUNTED 0)
|
||||
# Handle edge-cases where submodule didn't clone properly or re-uses a non-empty directory
|
||||
WHILE(NOT GIT_RESULT EQUAL 0 AND COUNTED LESS MAX_ATTEMPTS)
|
||||
MATH(EXPR COUNTED "${COUNTED}+1")
|
||||
SET(MISSING_COMMIT false)
|
||||
FOREACH(_phrase ${MISSING_COMMIT_PHRASES})
|
||||
IF("${GIT_MESSAGE}" MATCHES "${_phrase}")
|
||||
SET(MISSING_COMMIT true)
|
||||
BREAK()
|
||||
ENDIF()
|
||||
ENDFOREACH()
|
||||
FOREACH(_phrase ${RETRY_PHRASES})
|
||||
IF(${MISSING_COMMIT} AND COUNTED LESS 2)
|
||||
LIST(FIND SUBMODULE_LIST ${_submodule} SUBMODULE_INDEX)
|
||||
LIST(GET SUBMODULE_URL_LIST ${SUBMODULE_INDEX} SUBMODULE_URL)
|
||||
MESSAGE("-- Retrying ${_submodule} using 'remote add submodulefix' (attempt ${COUNTED} of ${MAX_ATTEMPTS})...")
|
||||
|
||||
GIT_SUBMODULE("${_submodule}" false "${SUBMODULE_URL}" false)
|
||||
BREAK()
|
||||
ELSEIF("${GIT_MESSAGE}" MATCHES "${_phrase}")
|
||||
MESSAGE("-- Retrying ${_submodule} using 'deinit' (attempt ${COUNTED} of ${MAX_ATTEMPTS})...")
|
||||
GIT_SUBMODULE("${_submodule}" true false false)
|
||||
BREAK()
|
||||
ENDIF()
|
||||
ENDFOREACH()
|
||||
ENDWHILE()
|
||||
|
||||
IF(NOT GIT_RESULT EQUAL 0)
|
||||
MESSAGE(FATAL_ERROR "${GIT_EXECUTABLE} exited with status of ${GIT_RESULT}")
|
||||
ENDIF()
|
||||
ENDIF()
|
||||
ENDFOREACH()
|
||||
MESSAGE("-- Done validating submodules.\n")
|
||||
|
||||
# Reset locale
|
||||
SET(ENV{LC_ALL} "${LC_ALL_BACKUP}")
|
||||
SET(ENV{LANG} "${LANG_BACKUP}")
|
||||
@@ -1,27 +0,0 @@
|
||||
INCLUDE(CheckCXXSourceCompiles)
|
||||
|
||||
FUNCTION(CheckWineGcc BITNESS WINEGCC_EXECUTABLE RESULT)
|
||||
FILE(WRITE "${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/winegcc_test.cxx" "
|
||||
#include <iostream>
|
||||
#define USE_WS_PREFIX
|
||||
#include <windows.h>
|
||||
int main(int argc, const char* argv[]) {
|
||||
return 0;
|
||||
}
|
||||
")
|
||||
EXECUTE_PROCESS(COMMAND ${WINEGCC_EXECUTABLE} "-m${BITNESS}"
|
||||
"${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/winegcc_test.cxx"
|
||||
"-o" "${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/winegcc_test"
|
||||
OUTPUT_QUIET ERROR_QUIET
|
||||
RESULT_VARIABLE WINEGCC_RESULT
|
||||
)
|
||||
FILE(REMOVE "${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/winegcc_test.cxx"
|
||||
"${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/winegcc_test"
|
||||
"${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/winegcc_test.exe.so"
|
||||
)
|
||||
IF(WINEGCC_RESULT EQUAL 0)
|
||||
SET(${RESULT} True PARENT_SCOPE)
|
||||
ELSE()
|
||||
SET(${RESULT} False PARENT_SCOPE)
|
||||
ENDIF()
|
||||
ENDFUNCTION()
|
||||
@@ -1,40 +0,0 @@
|
||||
option(USE_COMPILE_CACHE "Use a compiler cache for compilation" OFF)
|
||||
|
||||
# Compatibility for old option name
|
||||
if(USE_CCACHE)
|
||||
set(USE_COMPILE_CACHE ON)
|
||||
endif()
|
||||
|
||||
if(NOT USE_COMPILE_CACHE)
|
||||
return()
|
||||
endif()
|
||||
|
||||
if(NOT CMAKE_CXX_COMPILER_ID MATCHES "(GNU|AppleClang|Clang|MSVC)")
|
||||
message(WARNING "Compiler cache only available with MSVC or GNU")
|
||||
return()
|
||||
endif()
|
||||
|
||||
set(CACHE_TOOL_NAME ccache)
|
||||
find_program(CACHE_TOOL "${CACHE_TOOL_NAME}")
|
||||
if(NOT CACHE_TOOL)
|
||||
message(WARNING "USE_COMPILE_CACHE enabled, but no ${CACHE_TOOL_NAME} found")
|
||||
return()
|
||||
endif()
|
||||
|
||||
if(MSVC)
|
||||
# ccache doesn't support debug information in the PDB format. Setting the
|
||||
# debug information format requires CMP0141, introduced with CMake 3.25, to
|
||||
# be set to NEW prior to the initial `project` command.
|
||||
if(CMAKE_VERSION VERSION_LESS "3.25")
|
||||
message(WARNING "Use of compiler cache with MSVC requires at least CMake 3.25")
|
||||
return()
|
||||
endif()
|
||||
|
||||
set(CMAKE_MSVC_DEBUG_INFORMATION_FORMAT "$<$<CONFIG:Debug,RelWithDebInfo>:Embedded>")
|
||||
endif()
|
||||
|
||||
message(STATUS "Using ${CACHE_TOOL} for compiler caching")
|
||||
|
||||
# TODO CMake 3.21: Use CMAKE_<LANG>_<COMPILER|LINKER>_LAUNCHER variables instead
|
||||
set_property(GLOBAL PROPERTY RULE_LAUNCH_COMPILE "${CACHE_TOOL}")
|
||||
set_property(GLOBAL PROPERTY RULE_LAUNCH_LINK "${CACHE_TOOL}")
|
||||
@@ -1,21 +0,0 @@
|
||||
function(CreateTempFilePath)
|
||||
set(options CONFIG_SUFFIX)
|
||||
set(oneValueArgs OUTPUT_VAR TAG)
|
||||
set(multiValueArgs CONTENT)
|
||||
cmake_parse_arguments(TEMP "${options}" "${oneValueArgs}"
|
||||
"${multiValueArgs}" ${ARGN} )
|
||||
|
||||
# Use hash to create a unique identifier
|
||||
# for this file.
|
||||
string(SHA1 hashed_content "${TEMP_CONTENT}")
|
||||
|
||||
set(file_name "${CMAKE_BINARY_DIR}/${TEMP_TAG}_${hashed_content}")
|
||||
set(${TEMP_OUTPUT_VAR} "${file_name}" PARENT_SCOPE)
|
||||
if(TEMP_CONFIG_SUFFIX)
|
||||
set(file_name "${file_name}_$<CONFIG>")
|
||||
endif()
|
||||
|
||||
file(GENERATE OUTPUT "${file_name}"
|
||||
CONTENT "${TEMP_CONTENT}")
|
||||
|
||||
endfunction()
|
||||
@@ -1,31 +0,0 @@
|
||||
# This functions forwards a variable to
|
||||
# the install stage.
|
||||
# Parameters:
|
||||
# CONTENT: Variable content.
|
||||
# NAME: Variable name.
|
||||
# Options:
|
||||
# GENERATOR_EXPRESSION: Support generator expression for CONTENT.
|
||||
function(DEFINE_INSTALL_VAR)
|
||||
set(options GENERATOR_EXPRESSION)
|
||||
set(oneValueArgs NAME )
|
||||
set(multiValueArgs CONTENT)
|
||||
cmake_parse_arguments(VAR "${options}" "${oneValueArgs}"
|
||||
"${multiValueArgs}" ${ARGN} )
|
||||
|
||||
# install(CODE) does not support generator expression in ver<3.14
|
||||
if(VAR_GENERATOR_EXPRESSION AND ${CMAKE_VERSION} VERSION_LESS "3.14.0")
|
||||
include(CreateTempFile)
|
||||
if(CMAKE_CONFIGURATION_TYPES) # in case of multi-config generators like MSVC generators
|
||||
CreateTempFilePath(OUTPUT_VAR file_path TAG "${VAR_NAME}" CONTENT "${VAR_CONTENT}" CONFIG_SUFFIX)
|
||||
install(CODE "file(READ \"${file_path}_\${CMAKE_INSTALL_CONFIG_NAME}\" \"${VAR_NAME}\")")
|
||||
else()
|
||||
CreateTempFilePath(OUTPUT_VAR file_path TAG "${VAR_NAME}" CONTENT "${VAR_CONTENT}")
|
||||
install(CODE "file(READ \"${file_path}\" \"${VAR_NAME}\")")
|
||||
endif()
|
||||
else()
|
||||
if(VAR_GENERATOR_EXPRESSION)
|
||||
cmake_policy(SET CMP0087 NEW) # install(CODE) and install(SCRIPT) support generator expressions.
|
||||
endif()
|
||||
install(CODE "set(\"${VAR_NAME}\" \"${VAR_CONTENT}\")")
|
||||
endif()
|
||||
endfunction()
|
||||
@@ -1,144 +1,40 @@
|
||||
IF(WIN32)
|
||||
SET(LMMS_BUILD_WIN32 1)
|
||||
ELSEIF(APPLE)
|
||||
SET(LMMS_BUILD_APPLE 1)
|
||||
ELSEIF(${CMAKE_SYSTEM_NAME} MATCHES "OpenBSD")
|
||||
SET(LMMS_BUILD_OPENBSD 1)
|
||||
ELSEIF(${CMAKE_SYSTEM_NAME} MATCHES "FreeBSD")
|
||||
SET(LMMS_BUILD_FREEBSD 1)
|
||||
ELSEIF(HAIKU)
|
||||
SET(LMMS_BUILD_HAIKU 1)
|
||||
ELSE()
|
||||
SET(LMMS_BUILD_LINUX 1)
|
||||
ELSE(WIN32)
|
||||
IF(APPLE)
|
||||
SET(LMMS_BUILD_APPLE 1)
|
||||
ELSE(APPLE)
|
||||
SET(LMMS_BUILD_LINUX 1)
|
||||
ENDIF(APPLE)
|
||||
ENDIF(WIN32)
|
||||
|
||||
MESSAGE("PROCESSOR: ${CMAKE_SYSTEM_PROCESSOR}")
|
||||
SET(LMMS_HOST_X86 FALSE)
|
||||
SET(LMMS_HOST_X86_64 FALSE)
|
||||
SET(LMMS_HOST_ARM32 FALSE)
|
||||
SET(LMMS_HOST_ARM64 FALSE)
|
||||
SET(LMMS_HOST_RISCV32 FALSE)
|
||||
SET(LMMS_HOST_RISCV64 FALSE)
|
||||
|
||||
IF(NOT DEFINED WIN64 AND CMAKE_SIZEOF_VOID_P EQUAL 8)
|
||||
# TODO: This seems a bit presumptous
|
||||
SET(WIN64 ON)
|
||||
ENDIF()
|
||||
|
||||
IF(WIN32)
|
||||
if(MSVC)
|
||||
SET(MSVC_VER ${CMAKE_CXX_COMPILER_VERSION})
|
||||
|
||||
# Detect target architecture
|
||||
IF(CMAKE_GENERATOR_PLATFORM)
|
||||
STRING(TOLOWER "${CMAKE_GENERATOR_PLATFORM}" MSVC_TARGET_PLATFORM)
|
||||
ELSE()
|
||||
STRING(TOLOWER "${CMAKE_VS_PLATFORM_NAME_DEFAULT}" MSVC_TARGET_PLATFORM)
|
||||
ENDIF()
|
||||
|
||||
IF(MSVC_TARGET_PLATFORM MATCHES "x64")
|
||||
SET(IS_X86_64 TRUE)
|
||||
SET(LMMS_BUILD_WIN64 TRUE)
|
||||
ELSEIF(MSVC_TARGET_PLATFORM MATCHES "win32")
|
||||
SET(IS_X86 TRUE)
|
||||
ELSEIF(MSVC_TARGET_PLATFORM MATCHES "arm64")
|
||||
SET(IS_ARM64 TRUE)
|
||||
ELSEIF(MSVC_TARGET_PLATFORM MATCHES "arm")
|
||||
SET(IS_ARM32 TRUE)
|
||||
ELSEIF(CMAKE_CXX_COMPILER MATCHES "amd64/cl.exe$" OR CMAKE_CXX_COMPILER MATCHES "x64/cl.exe$")
|
||||
SET(IS_X86_64 TRUE)
|
||||
SET(LMMS_BUILD_WIN64 TRUE)
|
||||
ELSEIF(CMAKE_CXX_COMPILER MATCHES "bin/cl.exe$" OR CMAKE_CXX_COMPILER MATCHES "x86/cl.exe$")
|
||||
SET(IS_X86 TRUE)
|
||||
ELSEIF(CMAKE_CXX_COMPILER MATCHES "arm64/cl.exe$")
|
||||
SET(IS_ARM64 TRUE)
|
||||
ELSEIF(CMAKE_CXX_COMPILER MATCHES "arm/cl.exe$")
|
||||
SET(IS_ARM32 TRUE)
|
||||
ELSE()
|
||||
MESSAGE(WARNING "Unknown target architecture: ${MSVC_TARGET_PLATFORM}")
|
||||
ENDIF()
|
||||
|
||||
IF(MSVC_VER VERSION_GREATER 19.30 OR MSVC_VER VERSION_EQUAL 19.30)
|
||||
SET(LMMS_MSVC_GENERATOR "Visual Studio 17 2022")
|
||||
SET(LMMS_MSVC_YEAR 2022)
|
||||
ELSEIF(MSVC_VER VERSION_GREATER 19.20 OR MSVC_VER VERSION_EQUAL 19.20)
|
||||
SET(LMMS_MSVC_GENERATOR "Visual Studio 16 2019")
|
||||
SET(LMMS_MSVC_YEAR 2019) # Qt only provides binaries for MSVC 2017, but 2019 is binary compatible
|
||||
ELSEIF(MSVC_VER VERSION_GREATER 19.10 OR MSVC_VER VERSION_EQUAL 19.10)
|
||||
SET(LMMS_MSVC_GENERATOR "Visual Studio 15 2017")
|
||||
SET(LMMS_MSVC_YEAR 2017)
|
||||
ELSEIF(MSVC_VER VERSION_GREATER 19.0 OR MSVC_VER VERSION_EQUAL 19.0)
|
||||
SET(LMMS_MSVC_GENERATOR "Visual Studio 14 2015")
|
||||
SET(LMMS_MSVC_YEAR 2015)
|
||||
ELSE()
|
||||
MESSAGE(SEND_WARNING "Can't detect MSVC version: ${MSVC_VER}")
|
||||
ENDIF()
|
||||
|
||||
unset(MSVC_VER)
|
||||
else()
|
||||
# Cross-compiled
|
||||
# TODO: Handle Windows ARM64 targets
|
||||
IF(WIN64)
|
||||
SET(IS_X86_64 TRUE)
|
||||
SET(LMMS_BUILD_WIN64 TRUE)
|
||||
ELSE(WIN64)
|
||||
SET(IS_X86 TRUE)
|
||||
ENDIF(WIN64)
|
||||
endif()
|
||||
ELSE()
|
||||
# Detect target architecture based on compiler target triple e.g. "x86_64-pc-linux"
|
||||
execute_process(COMMAND ${CMAKE_C_COMPILER} -dumpmachine ${CMAKE_C_FLAGS} OUTPUT_VARIABLE Machine)
|
||||
IF(WIN64)
|
||||
SET(IS_X86_64 TRUE)
|
||||
SET(LMMS_BUILD_WIN64 TRUE)
|
||||
ELSE(WIN64)
|
||||
SET(IS_X86 TRUE)
|
||||
ENDIF(WIN64)
|
||||
ELSE(WIN32)
|
||||
EXEC_PROGRAM( ${CMAKE_C_COMPILER} ARGS "-dumpmachine" OUTPUT_VARIABLE Machine )
|
||||
MESSAGE("Machine: ${Machine}")
|
||||
STRING(REGEX MATCH "i.86" IS_X86 "${Machine}")
|
||||
STRING(REGEX MATCH "86_64|amd64" IS_X86_64 "${Machine}")
|
||||
IF(Machine MATCHES "arm|aarch64")
|
||||
IF(Machine MATCHES "arm64|aarch64")
|
||||
SET(IS_ARM64 TRUE)
|
||||
ELSE()
|
||||
SET(IS_ARM32 TRUE)
|
||||
ENDIF()
|
||||
ELSEIF(Machine MATCHES "rv|riscv")
|
||||
IF(Machine MATCHES "rv64|riscv64")
|
||||
SET(IS_RISCV64 TRUE)
|
||||
ELSE()
|
||||
SET(IS_RISCV32 TRUE)
|
||||
ENDIF()
|
||||
ELSEIF(Machine MATCHES "ppc|powerpc")
|
||||
IF(Machine MATCHES "ppc64|powerpc64")
|
||||
SET(IS_PPC64 TRUE)
|
||||
ELSE()
|
||||
SET(IS_PPC32 TRUE)
|
||||
ENDIF()
|
||||
ENDIF()
|
||||
ENDIF()
|
||||
STRING(REGEX MATCH "86_64" IS_X86_64 "${Machine}")
|
||||
ENDIF(WIN32)
|
||||
|
||||
IF(IS_X86)
|
||||
MESSAGE("-- Target host is 32 bit, Intel")
|
||||
MESSAGE("-- Target host is 32 bit")
|
||||
SET(LMMS_HOST_X86 TRUE)
|
||||
ELSEIF(IS_X86_64)
|
||||
MESSAGE("-- Target host is 64 bit, Intel")
|
||||
MESSAGE("-- Target host is 64 bit")
|
||||
SET(LMMS_HOST_X86_64 TRUE)
|
||||
ELSEIF(IS_ARM32)
|
||||
MESSAGE("-- Target host is 32 bit, ARM")
|
||||
SET(LMMS_HOST_ARM32 TRUE)
|
||||
ELSEIF(IS_ARM64)
|
||||
MESSAGE("-- Target host is 64 bit, ARM")
|
||||
SET(LMMS_HOST_ARM64 TRUE)
|
||||
ELSEIF(IS_RISCV32)
|
||||
MESSAGE("-- Target host is 32 bit, RISC-V")
|
||||
SET(LMMS_HOST_RISCV32 TRUE)
|
||||
ELSEIF(IS_RISCV64)
|
||||
MESSAGE("-- Target host is 64 bit, RISC-V")
|
||||
SET(LMMS_HOST_RISCV64 TRUE)
|
||||
ELSEIF(IS_PPC32)
|
||||
MESSAGE("-- Target host is 32 bit, PPC")
|
||||
SET(LMMS_HOST_PPC32 TRUE)
|
||||
ELSEIF(IS_PPC64)
|
||||
MESSAGE("-- Target host is 64 bit, PPC")
|
||||
SET(LMMS_HOST_PPC64 TRUE)
|
||||
ELSE()
|
||||
ELSE(IS_X86)
|
||||
MESSAGE("Can't identify target host. Assuming 32 bit platform.")
|
||||
ENDIF()
|
||||
ENDIF(IS_X86)
|
||||
|
||||
IF(CMAKE_INSTALL_LIBDIR)
|
||||
SET(LIB_DIR "${CMAKE_INSTALL_LIBDIR}")
|
||||
@@ -159,23 +55,4 @@ ELSE(LMMS_BUILD_WIN32)
|
||||
SET(LMMS_DATA_DIR ${DATA_DIR}/lmms)
|
||||
ENDIF(LMMS_BUILD_WIN32)
|
||||
|
||||
IF(LMMS_BUILD_APPLE)
|
||||
# Detect Homebrew versus Macports environment
|
||||
EXECUTE_PROCESS(COMMAND brew --prefix RESULT_VARIABLE DETECT_HOMEBREW OUTPUT_VARIABLE HOMEBREW_PREFIX ERROR_QUIET OUTPUT_STRIP_TRAILING_WHITESPACE)
|
||||
EXECUTE_PROCESS(COMMAND which port RESULT_VARIABLE DETECT_MACPORTS OUTPUT_VARIABLE MACPORTS_PREFIX ERROR_QUIET OUTPUT_STRIP_TRAILING_WHITESPACE)
|
||||
IF(${DETECT_HOMEBREW} EQUAL 0)
|
||||
SET(HOMEBREW 1)
|
||||
SET(APPLE_PREFIX "${HOMEBREW_PREFIX}")
|
||||
ELSEIF(${DETECT_MACPORTS} EQUAL 0)
|
||||
SET(MACPORTS 1)
|
||||
GET_FILENAME_COMPONENT(MACPORTS_PREFIX ${MACPORTS_PREFIX} DIRECTORY)
|
||||
GET_FILENAME_COMPONENT(MACPORTS_PREFIX ${MACPORTS_PREFIX} DIRECTORY)
|
||||
SET(APPLE_PREFIX "${MACPORTS_PREFIX}")
|
||||
LINK_DIRECTORIES(${LINK_DIRECTORIES} ${APPLE_PREFIX}/lib)
|
||||
ENDIF()
|
||||
|
||||
# Detect OS Version
|
||||
EXECUTE_PROCESS(COMMAND sw_vers -productVersion OUTPUT_VARIABLE APPLE_OS_VER ERROR_QUIET OUTPUT_STRIP_TRAILING_WHITESPACE)
|
||||
STRING(REGEX REPLACE "\\.[0-9]*$" "" APPLE_OS_VER "${APPLE_OS_VER}")
|
||||
SET(CMAKE_MACOSX_RPATH 1)
|
||||
ENDIF()
|
||||
|
||||
@@ -1,72 +0,0 @@
|
||||
# Shim the SYSTEM property for older CMake versions - we rely on this property
|
||||
# to determine which set of error flags to use.
|
||||
if(CMAKE_VERSION VERSION_LESS "3.25")
|
||||
define_property(TARGET
|
||||
PROPERTY SYSTEM
|
||||
INHERITED
|
||||
BRIEF_DOCS "Shim of built-in SYSTEM property for CMake versions less than 3.25"
|
||||
FULL_DOCS "Non-functional, but allows the property to be inherited properly."
|
||||
"See the CMake documentation at https://cmake.org/cmake/help/latest/prop_tgt/SYSTEM.html."
|
||||
)
|
||||
endif()
|
||||
|
||||
# Allow the user to control whether to treat warnings as errors
|
||||
option(USE_WERROR "Treat compiler warnings as errors" OFF)
|
||||
|
||||
# Compute the appropriate flags for the current compiler and options
|
||||
if(CMAKE_CXX_COMPILER_ID MATCHES "GNU|Clang")
|
||||
set(COMPILE_ERROR_FLAGS
|
||||
"-Wall" # Enable most warnings by default
|
||||
)
|
||||
set(THIRD_PARTY_COMPILE_ERROR_FLAGS
|
||||
"-w" # Disable all warnings
|
||||
)
|
||||
|
||||
if(CMAKE_COMPILER_IS_GNUCXX)
|
||||
list(APPEND COMPILE_ERROR_FLAGS
|
||||
# The following warning generates false positives that are difficult
|
||||
# to work around, in particular when inlining calls to standard
|
||||
# algorithms performed on single-element arrays. See, for example,
|
||||
# https://gcc.gnu.org/bugzilla/show_bug.cgi?id=111273.
|
||||
"-Wno-array-bounds" # Permit out-of-bounds array subscripts
|
||||
)
|
||||
|
||||
if(CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL "11")
|
||||
list(APPEND COMPILE_ERROR_FLAGS
|
||||
# This has the same problems described above for "array-bounds".
|
||||
"-Wno-stringop-overread" # Permit string functions overreading the source
|
||||
)
|
||||
endif()
|
||||
endif()
|
||||
|
||||
if(USE_WERROR)
|
||||
list(APPEND COMPILE_ERROR_FLAGS
|
||||
"-Werror" # Treat warnings as errors
|
||||
)
|
||||
endif()
|
||||
elseif(MSVC)
|
||||
set(COMPILE_ERROR_FLAGS
|
||||
"/W2" # Enable some warnings by default
|
||||
"/external:W0" # Don't emit warnings for third-party code
|
||||
"/external:anglebrackets" # Consider headers included with angle brackets to be third-party
|
||||
"/external:templates-" # Still emit warnings from first-party instantiations of third-party templates
|
||||
# Silence "class X needs to have DLL-interface to be used by clients of
|
||||
# class Y" warnings. These aren't trivial to address, and don't pose a
|
||||
# problem for us since we build all modules with the same compiler and
|
||||
# options, and dynamically link the CRT.
|
||||
"/wd4251"
|
||||
)
|
||||
set(THIRD_PARTY_COMPILE_ERROR_FLAGS
|
||||
"/W0" # Disable all warnings
|
||||
)
|
||||
|
||||
if(USE_WERROR)
|
||||
list(APPEND COMPILE_ERROR_FLAGS
|
||||
"/WX" # Treat warnings as errors
|
||||
)
|
||||
endif()
|
||||
endif()
|
||||
|
||||
# Add the flags to the whole directory tree. We use the third-party flags for
|
||||
# targets whose SYSTEM property is true, and the normal flags otherwise.
|
||||
add_compile_options("$<IF:$<BOOL:$<TARGET_PROPERTY:SYSTEM>>,${THIRD_PARTY_COMPILE_ERROR_FLAGS},${COMPILE_ERROR_FLAGS}>")
|
||||
@@ -1,47 +0,0 @@
|
||||
# FindFFTW.cmake - Try to find FFTW3
|
||||
# Copyright (c) 2018 Lukas W <lukaswhl/at/gmail.com>
|
||||
# This file is MIT licensed.
|
||||
# See http://opensource.org/licenses/MIT
|
||||
|
||||
# Try pkgconfig for hints
|
||||
find_package(PkgConfig QUIET)
|
||||
|
||||
if(NOT FFTW_FIND_COMPONENTS)
|
||||
set(FFTW_FIND_COMPONENTS fftw3f fftw3 fftwl)
|
||||
endif()
|
||||
|
||||
if(PKG_CONFIG_FOUND)
|
||||
pkg_check_modules(FFTW_PKG QUIET fftw>=3.0.0)
|
||||
pkg_check_modules(FFTW3_PKG QUIET fftw3>=3.0.0)
|
||||
endif()
|
||||
|
||||
find_path(FFTW_INCLUDE_DIR
|
||||
NAMES fftw3.h
|
||||
PATHS ${FFTW_PKG_INCLUDE_DIRS} ${FFTW3_PKG_INCLUDE_DIRS}
|
||||
)
|
||||
|
||||
set(check_list)
|
||||
|
||||
foreach(comp ${FFTW_FIND_COMPONENTS})
|
||||
string(TOUPPER ${comp} COMP)
|
||||
if(PKG_CONFIG_FOUND)
|
||||
pkg_check_modules(${COMP}_PKG QUIET ${comp}>=3.0.0)
|
||||
endif()
|
||||
|
||||
find_library(${COMP}_LIBRARY
|
||||
NAMES ${comp}
|
||||
PATHS ${comp}_PKG_LIBRARY_DIRS
|
||||
)
|
||||
list(APPEND check_list ${COMP}_LIBRARY)
|
||||
|
||||
set(${COMP}_LIBRARIES ${${COMP}_LIBRARY} CACHE FILEPATH "${COMP} library path")
|
||||
set(${COMP}_INCLUDE_DIRS ${FFTW_INCLUDE_DIR} CACHE PATH "${COMP} include path")
|
||||
mark_as_advanced(${COMP}_LIBRARIES ${COMP}_INCLUDE_DIRS)
|
||||
endforeach()
|
||||
|
||||
find_package(PackageHandleStandardArgs)
|
||||
find_package_handle_standard_args(FFTW DEFAULT_MSG FFTW_INCLUDE_DIR ${check_list})
|
||||
|
||||
set(FFTW_INCLUDE_DIRS ${FFTW_INCLUDE_DIR})
|
||||
|
||||
mark_as_advanced(FFTW_LIBRARY FFTW_LIBRARIES FFTW_INCLUDE_DIR FFTW_INCLUDE_DIRS ${check_list})
|
||||
@@ -1,73 +0,0 @@
|
||||
# Copyright (c) 2022 Dominic Clark
|
||||
#
|
||||
# Redistribution and use is allowed according to the terms of the New BSD license.
|
||||
# For details see the accompanying COPYING-CMAKE-SCRIPTS file.
|
||||
|
||||
# Return if we already have FluidSynth
|
||||
if(TARGET fluidsynth)
|
||||
set(FluidSynth_FOUND 1)
|
||||
return()
|
||||
endif()
|
||||
|
||||
# Attempt to find FluidSynth using PkgConfig
|
||||
find_package(PkgConfig QUIET)
|
||||
if(PKG_CONFIG_FOUND)
|
||||
pkg_check_modules(FLUIDSYNTH_PKG fluidsynth)
|
||||
endif()
|
||||
|
||||
# Find the library and headers using the results from PkgConfig as a guide
|
||||
find_path(FluidSynth_INCLUDE_DIR
|
||||
NAMES "fluidsynth.h"
|
||||
HINTS ${FLUIDSYNTH_PKG_INCLUDE_DIRS}
|
||||
)
|
||||
|
||||
find_library(FluidSynth_LIBRARY
|
||||
NAMES "fluidsynth"
|
||||
HINTS ${FLUIDSYNTH_PKG_LIBRARY_DIRS}
|
||||
)
|
||||
|
||||
if(FluidSynth_INCLUDE_DIR AND FluidSynth_LIBRARY)
|
||||
add_library(fluidsynth UNKNOWN IMPORTED)
|
||||
set_target_properties(fluidsynth PROPERTIES
|
||||
INTERFACE_INCLUDE_DIRECTORIES "${FluidSynth_INCLUDE_DIR}"
|
||||
)
|
||||
|
||||
if(VCPKG_INSTALLED_DIR)
|
||||
include(ImportedTargetHelpers)
|
||||
get_vcpkg_library_configs(FluidSynth_IMPLIB_RELEASE FluidSynth_IMPLIB_DEBUG "${FluidSynth_LIBRARY}")
|
||||
else()
|
||||
set(FluidSynth_IMPLIB_RELEASE "${FluidSynth_LIBRARY}")
|
||||
endif()
|
||||
|
||||
if(FluidSynth_IMPLIB_DEBUG)
|
||||
set_target_properties(fluidsynth PROPERTIES
|
||||
IMPORTED_LOCATION_RELEASE "${FluidSynth_IMPLIB_RELEASE}"
|
||||
IMPORTED_LOCATION_DEBUG "${FluidSynth_IMPLIB_DEBUG}"
|
||||
)
|
||||
else()
|
||||
set_target_properties(fluidsynth PROPERTIES
|
||||
IMPORTED_LOCATION "${FluidSynth_IMPLIB_RELEASE}"
|
||||
)
|
||||
endif()
|
||||
|
||||
if(EXISTS "${FluidSynth_INCLUDE_DIR}/fluidsynth/version.h")
|
||||
file(STRINGS
|
||||
"${FluidSynth_INCLUDE_DIR}/fluidsynth/version.h"
|
||||
_version_string
|
||||
REGEX "^#[\t ]*define[\t ]+FLUIDSYNTH_VERSION[\t ]+\".*\""
|
||||
)
|
||||
string(REGEX REPLACE
|
||||
"^.*FLUIDSYNTH_VERSION[\t ]+\"([^\"]*)\".*$"
|
||||
"\\1"
|
||||
FluidSynth_VERSION_STRING
|
||||
"${_version_string}"
|
||||
)
|
||||
unset(_version_string)
|
||||
endif()
|
||||
endif()
|
||||
|
||||
include(FindPackageHandleStandardArgs)
|
||||
find_package_handle_standard_args(FluidSynth
|
||||
REQUIRED_VARS FluidSynth_LIBRARY FluidSynth_INCLUDE_DIR
|
||||
VERSION_VAR FluidSynth_VERSION_STRING
|
||||
)
|
||||
@@ -1,31 +0,0 @@
|
||||
# Copyright (c) 2023 Dominic Clark
|
||||
#
|
||||
# Redistribution and use is allowed according to the terms of the New BSD license.
|
||||
# For details see the accompanying COPYING-CMAKE-SCRIPTS file.
|
||||
|
||||
include(ImportedTargetHelpers)
|
||||
|
||||
find_package_config_mode_with_fallback(mp3lame mp3lame::mp3lame
|
||||
LIBRARY_NAMES "mp3lame"
|
||||
INCLUDE_NAMES "lame/lame.h"
|
||||
PREFIX Lame
|
||||
)
|
||||
|
||||
determine_version_from_source(Lame_VERSION mp3lame::mp3lame [[
|
||||
#include <iostream>
|
||||
#include <lame/lame.h>
|
||||
|
||||
auto main() -> int
|
||||
{
|
||||
auto version = lame_version_t{};
|
||||
get_lame_version_numerical(&version);
|
||||
std::cout << version.major << "." << version.minor;
|
||||
}
|
||||
]])
|
||||
|
||||
include(FindPackageHandleStandardArgs)
|
||||
|
||||
find_package_handle_standard_args(Lame
|
||||
REQUIRED_VARS Lame_LIBRARY Lame_INCLUDE_DIRS
|
||||
VERSION_VAR Lame_VERSION
|
||||
)
|
||||
@@ -1,68 +1,86 @@
|
||||
# Copyright (c) 2023 Dominic Clark
|
||||
# - Try to find the OggVorbis libraries
|
||||
# Once done this will define
|
||||
#
|
||||
# Redistribution and use is allowed according to the terms of the New BSD license.
|
||||
# OGGVORBIS_FOUND - system has OggVorbis
|
||||
# OGGVORBIS_VERSION - set either to 1 or 2
|
||||
# OGGVORBIS_INCLUDE_DIR - the OggVorbis include directory
|
||||
# OGGVORBIS_LIBRARIES - The libraries needed to use OggVorbis
|
||||
# OGG_LIBRARY - The Ogg library
|
||||
# VORBIS_LIBRARY - The Vorbis library
|
||||
# VORBISFILE_LIBRARY - The VorbisFile library
|
||||
# VORBISENC_LIBRARY - The VorbisEnc library
|
||||
|
||||
# Copyright (c) 2006, Richard Laerkaeng, <richard@goteborg.utfors.se>
|
||||
#
|
||||
# Redistribution and use is allowed according to the terms of the BSD license.
|
||||
# For details see the accompanying COPYING-CMAKE-SCRIPTS file.
|
||||
|
||||
include(ImportedTargetHelpers)
|
||||
|
||||
find_package_config_mode_with_fallback(Ogg Ogg::ogg
|
||||
LIBRARY_NAMES "ogg"
|
||||
INCLUDE_NAMES "ogg/ogg.h"
|
||||
PKG_CONFIG ogg
|
||||
)
|
||||
include (CheckLibraryExists)
|
||||
|
||||
find_package_config_mode_with_fallback(Vorbis Vorbis::vorbis
|
||||
LIBRARY_NAMES "vorbis"
|
||||
INCLUDE_NAMES "vorbis/codec.h"
|
||||
PKG_CONFIG vorbis
|
||||
DEPENDS Ogg::ogg
|
||||
)
|
||||
find_path(VORBIS_INCLUDE_DIR vorbis/vorbisfile.h)
|
||||
find_path(OGG_INCLUDE_DIR ogg/ogg.h)
|
||||
|
||||
find_package_config_mode_with_fallback(Vorbis Vorbis::vorbisfile
|
||||
LIBRARY_NAMES "vorbisfile"
|
||||
INCLUDE_NAMES "vorbis/vorbisfile.h"
|
||||
PKG_CONFIG vorbisfile
|
||||
DEPENDS Vorbis::vorbis
|
||||
PREFIX VorbisFile
|
||||
)
|
||||
find_library(OGG_LIBRARY NAMES ogg)
|
||||
find_library(VORBIS_LIBRARY NAMES vorbis)
|
||||
find_library(VORBISFILE_LIBRARY NAMES vorbisfile)
|
||||
find_library(VORBISENC_LIBRARY NAMES vorbisenc)
|
||||
|
||||
find_package_config_mode_with_fallback(Vorbis Vorbis::vorbisenc
|
||||
LIBRARY_NAMES "vorbisenc"
|
||||
INCLUDE_NAMES "vorbis/vorbisenc.h"
|
||||
PKG_CONFIG vorbisenc
|
||||
DEPENDS Vorbis::vorbis
|
||||
PREFIX VorbisEnc
|
||||
)
|
||||
|
||||
determine_version_from_source(Vorbis_VERSION Vorbis::vorbis [[
|
||||
#include <iostream>
|
||||
#include <string_view>
|
||||
#include <vorbis/codec.h>
|
||||
if (VORBIS_INCLUDE_DIR AND VORBIS_LIBRARY AND VORBISFILE_LIBRARY AND VORBISENC_LIBRARY)
|
||||
set(OGGVORBIS_FOUND TRUE)
|
||||
|
||||
auto main() -> int
|
||||
{
|
||||
// Version string has the format "org name version"
|
||||
const auto version = std::string_view{vorbis_version_string()};
|
||||
const auto nameBegin = version.find(' ') + 1;
|
||||
const auto versionBegin = version.find(' ', nameBegin) + 1;
|
||||
std::cout << version.substr(versionBegin);
|
||||
}
|
||||
]])
|
||||
set(OGGVORBIS_LIBRARIES ${OGG_LIBRARY} ${VORBIS_LIBRARY} ${VORBISFILE_LIBRARY} ${VORBISENC_LIBRARY})
|
||||
|
||||
include(FindPackageHandleStandardArgs)
|
||||
set(_CMAKE_REQUIRED_LIBRARIES_TMP ${CMAKE_REQUIRED_LIBRARIES})
|
||||
set(CMAKE_REQUIRED_LIBRARIES ${CMAKE_REQUIRED_LIBRARIES} ${OGGVORBIS_LIBRARIES})
|
||||
check_library_exists(vorbis vorbis_bitrate_addblock "" HAVE_LIBVORBISENC2)
|
||||
set(CMAKE_REQUIRED_LIBRARIES ${_CMAKE_REQUIRED_LIBRARIES_TMP})
|
||||
|
||||
if (HAVE_LIBVORBISENC2)
|
||||
set (OGGVORBIS_VERSION 2)
|
||||
else (HAVE_LIBVORBISENC2)
|
||||
set (OGGVORBIS_VERSION 1)
|
||||
endif (HAVE_LIBVORBISENC2)
|
||||
|
||||
else (VORBIS_INCLUDE_DIR AND VORBIS_LIBRARY AND VORBISFILE_LIBRARY AND VORBISENC_LIBRARY)
|
||||
set (OGGVORBIS_VERSION)
|
||||
set(OGGVORBIS_FOUND FALSE)
|
||||
endif (VORBIS_INCLUDE_DIR AND VORBIS_LIBRARY AND VORBISFILE_LIBRARY AND VORBISENC_LIBRARY)
|
||||
|
||||
|
||||
if (OGGVORBIS_FOUND)
|
||||
if (NOT OggVorbis_FIND_QUIETLY)
|
||||
message(STATUS "Found OggVorbis: ${OGGVORBIS_LIBRARIES}")
|
||||
endif (NOT OggVorbis_FIND_QUIETLY)
|
||||
else (OGGVORBIS_FOUND)
|
||||
if (OggVorbis_FIND_REQUIRED)
|
||||
message(FATAL_ERROR "Could NOT find OggVorbis libraries")
|
||||
endif (OggVorbis_FIND_REQUIRED)
|
||||
if (NOT OggVorbis_FIND_QUITELY)
|
||||
message(STATUS "Could NOT find OggVorbis libraries")
|
||||
endif (NOT OggVorbis_FIND_QUITELY)
|
||||
endif (OGGVORBIS_FOUND)
|
||||
|
||||
#check_include_files(vorbis/vorbisfile.h HAVE_VORBISFILE_H)
|
||||
#check_library_exists(ogg ogg_page_version "" HAVE_LIBOGG)
|
||||
#check_library_exists(vorbis vorbis_info_init "" HAVE_LIBVORBIS)
|
||||
#check_library_exists(vorbisfile ov_open "" HAVE_LIBVORBISFILE)
|
||||
#check_library_exists(vorbisenc vorbis_info_clear "" HAVE_LIBVORBISENC)
|
||||
#check_library_exists(vorbis vorbis_bitrate_addblock "" HAVE_LIBVORBISENC2)
|
||||
|
||||
#if (HAVE_LIBOGG AND HAVE_VORBISFILE_H AND HAVE_LIBVORBIS AND HAVE_LIBVORBISFILE AND HAVE_LIBVORBISENC)
|
||||
# message(STATUS "Ogg/Vorbis found")
|
||||
# set (VORBIS_LIBS "-lvorbis -logg")
|
||||
# set (VORBISFILE_LIBS "-lvorbisfile")
|
||||
# set (VORBISENC_LIBS "-lvorbisenc")
|
||||
# set (OGGVORBIS_FOUND TRUE)
|
||||
# if (HAVE_LIBVORBISENC2)
|
||||
# set (HAVE_VORBIS 2)
|
||||
# else (HAVE_LIBVORBISENC2)
|
||||
# set (HAVE_VORBIS 1)
|
||||
# endif (HAVE_LIBVORBISENC2)
|
||||
#else (HAVE_LIBOGG AND HAVE_VORBISFILE_H AND HAVE_LIBVORBIS AND HAVE_LIBVORBISFILE AND HAVE_LIBVORBISENC)
|
||||
# message(STATUS "Ogg/Vorbis not found")
|
||||
#endif (HAVE_LIBOGG AND HAVE_VORBISFILE_H AND HAVE_LIBVORBIS AND HAVE_LIBVORBISFILE AND HAVE_LIBVORBISENC)
|
||||
|
||||
find_package_handle_standard_args(OggVorbis
|
||||
REQUIRED_VARS
|
||||
Ogg_LIBRARY
|
||||
Ogg_INCLUDE_DIRS
|
||||
Vorbis_LIBRARY
|
||||
Vorbis_INCLUDE_DIRS
|
||||
VorbisFile_LIBRARY
|
||||
VorbisFile_INCLUDE_DIRS
|
||||
VorbisEnc_LIBRARY
|
||||
VorbisEnc_INCLUDE_DIRS
|
||||
# This only reports the Vorbis version - Ogg can have a different version,
|
||||
# so if we ever care about that, it should be split off into a different
|
||||
# find module.
|
||||
VERSION_VAR Vorbis_VERSION
|
||||
)
|
||||
|
||||
@@ -1,34 +1,36 @@
|
||||
# Copyright (c) 2023 Dominic Clark
|
||||
# - Try to find Portaudio
|
||||
# Once done this will define
|
||||
#
|
||||
# PORTAUDIO_FOUND - system has Portaudio
|
||||
# PORTAUDIO_INCLUDE_DIRS - the Portaudio include directory
|
||||
# PORTAUDIO_LIBRARIES - Link these to use Portaudio
|
||||
# PORTAUDIO_DEFINITIONS - Compiler switches required for using Portaudio
|
||||
#
|
||||
# Copyright (c) 2006 Andreas Schneider <mail@cynapses.org>
|
||||
#
|
||||
# Redistribution and use is allowed according to the terms of the New BSD license.
|
||||
# For details see the accompanying COPYING-CMAKE-SCRIPTS file.
|
||||
#
|
||||
|
||||
include(ImportedTargetHelpers)
|
||||
|
||||
find_package_config_mode_with_fallback(portaudio portaudio
|
||||
LIBRARY_NAMES "portaudio"
|
||||
INCLUDE_NAMES "portaudio.h"
|
||||
PKG_CONFIG portaudio-2.0
|
||||
PREFIX Portaudio
|
||||
)
|
||||
if (PORTAUDIO_LIBRARIES AND PORTAUDIO_INCLUDE_DIRS)
|
||||
# in cache already
|
||||
set(PORTAUDIO_FOUND TRUE)
|
||||
else (PORTAUDIO_LIBRARIES AND PORTAUDIO_INCLUDE_DIRS)
|
||||
include(FindPkgConfig)
|
||||
pkg_check_modules(PORTAUDIO portaudio-2.0)
|
||||
if (PORTAUDIO_FOUND)
|
||||
if (NOT Portaudio_FIND_QUIETLY)
|
||||
message(STATUS "Found Portaudio: ${PORTAUDIO_LIBRARIES}")
|
||||
endif (NOT Portaudio_FIND_QUIETLY)
|
||||
else (PORTAUDIO_FOUND)
|
||||
if (Portaudio_FIND_REQUIRED)
|
||||
message(FATAL_ERROR "Could not find Portaudio")
|
||||
endif (Portaudio_FIND_REQUIRED)
|
||||
endif (PORTAUDIO_FOUND)
|
||||
|
||||
determine_version_from_source(Portaudio_VERSION portaudio [[
|
||||
#include <iostream>
|
||||
#include "portaudio.h"
|
||||
# show the PORTAUDIO_INCLUDE_DIRS and PORTAUDIO_LIBRARIES variables only in the advanced view
|
||||
mark_as_advanced(PORTAUDIO_INCLUDE_DIRS PORTAUDIO_LIBRARIES)
|
||||
|
||||
auto main() -> int
|
||||
{
|
||||
// Version number has the format 0xMMmmpp
|
||||
const auto version = Pa_GetVersion();
|
||||
std::cout << ((version >> 16) & 0xff)
|
||||
<< "." << ((version >> 8) & 0xff)
|
||||
<< "." << ((version >> 0) & 0xff);
|
||||
}
|
||||
]])
|
||||
endif (PORTAUDIO_LIBRARIES AND PORTAUDIO_INCLUDE_DIRS)
|
||||
|
||||
include(FindPackageHandleStandardArgs)
|
||||
|
||||
find_package_handle_standard_args(Portaudio
|
||||
REQUIRED_VARS Portaudio_LIBRARY Portaudio_INCLUDE_DIRS
|
||||
VERSION_VAR Portaudio_VERSION
|
||||
)
|
||||
|
||||
@@ -18,15 +18,13 @@ ENDIF (PULSEAUDIO_INCLUDE_DIR AND PULSEAUDIO_LIBRARIES)
|
||||
IF (NOT WIN32)
|
||||
# use pkg-config to get the directories and then use these values
|
||||
# in the FIND_PATH() and FIND_LIBRARY() calls
|
||||
find_package(PkgConfig QUIET)
|
||||
if(PKG_CONFIG_FOUND)
|
||||
pkg_check_modules(PA libpulse)
|
||||
set(_PASIncDir ${PA_INCLUDE_DIRS})
|
||||
set(_PASLinkDir ${PA_LIBRARY_DIRS})
|
||||
set(_PASLinkFlags ${PA_LDFLAGS})
|
||||
set(_PASCflags ${PA_CFLAGS})
|
||||
set(PULSEAUDIO_DEFINITIONS ${_PASCflags})
|
||||
endif()
|
||||
INCLUDE(FindPkgConfig)
|
||||
pkg_check_modules(PA libpulse)
|
||||
set(_PASIncDir ${PA_INCLUDE_DIRS})
|
||||
set(_PASLinkDir ${PA_LIBRARY_DIRS})
|
||||
set(_PASLinkFlags ${PA_LDFLAGS})
|
||||
set(_PASCflags ${PA_CFLAGS})
|
||||
SET(PULSEAUDIO_DEFINITIONS ${_PASCflags})
|
||||
ENDIF (NOT WIN32)
|
||||
|
||||
FIND_PATH(PULSEAUDIO_INCLUDE_DIR pulse/pulseaudio.h
|
||||
|
||||
@@ -1,130 +0,0 @@
|
||||
# This module defines
|
||||
# SDL2::SDL2, a target providing SDL2 itself
|
||||
# SDL2_LIBRARY, the name of the library to link against
|
||||
# SDL2_FOUND, if false, do not try to link to SDL2
|
||||
# SDL2_INCLUDE_DIR, where to find SDL.h
|
||||
#
|
||||
# On OSX, this will prefer the Framework version (if found) over others.
|
||||
# People will have to manually change the cache values of
|
||||
# SDL2_LIBRARY to override this selection or set the CMake environment
|
||||
# CMAKE_INCLUDE_PATH to modify the search paths.
|
||||
#
|
||||
# $SDL2DIR is an environment variable that would
|
||||
# correspond to the ./configure --prefix=$SDL2DIR
|
||||
# used in building SDL2.
|
||||
#
|
||||
# Modified by Eric Wing, l.e.galup, and Dominic Clark
|
||||
#
|
||||
#=============================================================================
|
||||
# Copyright 2003-2009 Kitware, Inc.
|
||||
#
|
||||
# Distributed under the OSI-approved BSD License (the "License");
|
||||
# see accompanying file COPYING-CMAKE-SCRIPTS for details.
|
||||
#
|
||||
# This software is distributed WITHOUT ANY WARRANTY; without even the
|
||||
# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
||||
# See the License for more information.
|
||||
#=============================================================================
|
||||
# (To distribute this file outside of CMake, substitute the full
|
||||
# License text for the above reference.)
|
||||
|
||||
# Try config mode first - anything SDL2 itself provides is likely to be more
|
||||
# reliable than our guesses.
|
||||
find_package(SDL2 CONFIG QUIET)
|
||||
|
||||
if(TARGET SDL2::SDL2)
|
||||
# SDL2::SDL2 under MinGW is an interface target for reasons, so we can't get
|
||||
# the library location from it. Print minimal information and return early.
|
||||
get_target_property(sdl2_target_type SDL2::SDL2 TYPE)
|
||||
if(sdl2_target_type STREQUAL "INTERFACE_LIBRARY")
|
||||
unset(sdl2_target_type)
|
||||
if(NOT SDL2_FIND_QUIETLY)
|
||||
message(STATUS "Found SDL2 (found version \"${SDL2_VERSION}\")")
|
||||
endif()
|
||||
return()
|
||||
endif()
|
||||
unset(sdl2_target_type)
|
||||
|
||||
# Extract details for find_package_handle_standard_args
|
||||
get_target_property(SDL2_LIBRARY SDL2::SDL2 LOCATION)
|
||||
get_target_property(SDL2_INCLUDE_DIR SDL2::SDL2 INTERFACE_INCLUDE_DIRECTORIES)
|
||||
else()
|
||||
set(SDL2_SEARCH_PATHS
|
||||
~/Library/Frameworks
|
||||
/Library/Frameworks
|
||||
/usr/local
|
||||
/usr
|
||||
/sw # Fink
|
||||
/opt/local # DarwinPorts
|
||||
/opt/csw # Blastwave
|
||||
/opt
|
||||
${SDL2_PATH}
|
||||
)
|
||||
|
||||
find_path(SDL2_INCLUDE_DIR
|
||||
NAMES SDL.h
|
||||
HINTS $ENV{SDL2DIR} ${SDL2_INCLUDE_DIRS}
|
||||
PATH_SUFFIXES SDL2 include/SDL2 include
|
||||
PATHS ${SDL2_SEARCH_PATHS}
|
||||
)
|
||||
|
||||
if(CMAKE_SIZEOF_VOID_P EQUAL 8)
|
||||
set(PATH_SUFFIXES lib64 lib/x64 lib)
|
||||
else()
|
||||
set(PATH_SUFFIXES lib/x86 lib)
|
||||
endif()
|
||||
|
||||
find_library(SDL2_LIBRARY
|
||||
NAMES SDL2
|
||||
HINTS $ENV{SDL2DIR} ${SDL2_LIBDIR}
|
||||
PATH_SUFFIXES ${PATH_SUFFIXES}
|
||||
PATHS ${SDL2_SEARCH_PATHS}
|
||||
)
|
||||
|
||||
# SDL2 may require threads on your system.
|
||||
# The Apple build may not need an explicit flag because one of the
|
||||
# frameworks may already provide it.
|
||||
# But for non-OSX systems, I will use the CMake Threads package.
|
||||
if(NOT APPLE)
|
||||
find_package(Threads)
|
||||
endif()
|
||||
|
||||
if(SDL2_LIBRARY AND SDL2_INCLUDE_DIR)
|
||||
add_library(SDL2::SDL2 UNKNOWN IMPORTED)
|
||||
set_target_properties(SDL2::SDL2 PROPERTIES
|
||||
IMPORTED_LOCATION "${SDL2_LIBRARY}"
|
||||
INTERFACE_INCLUDE_DIRECTORIES "${SDL2_INCLUDE_DIR}"
|
||||
)
|
||||
|
||||
# For OS X, SDL2 uses Cocoa as a backend so it must link to Cocoa.
|
||||
if(APPLE)
|
||||
set_property(TARGET SDL2::SDL2 APPEND PROPERTY
|
||||
INTERFACE_LINK_OPTIONS "-framework Cocoa"
|
||||
)
|
||||
endif()
|
||||
|
||||
# For threads, as mentioned Apple doesn't need this.
|
||||
# In fact, there seems to be a problem if I used the Threads package
|
||||
# and try using this line, so I'm just skipping it entirely for OS X.
|
||||
if(NOT APPLE AND Threads_FOUND)
|
||||
set_property(TARGET SDL2::SDL2 APPEND PROPERTY
|
||||
INTERFACE_LINK_LIBRARIES "Threads::Threads"
|
||||
)
|
||||
endif()
|
||||
|
||||
if(EXISTS "${SDL2_INCLUDE_DIR}/SDL_version.h")
|
||||
file(READ "${SDL2_INCLUDE_DIR}/SDL_version.h" _sdl_version_h)
|
||||
string(REGEX REPLACE ".*#[\t ]*define[\t ]+SDL_MAJOR_VERSION[\t ]+([0-9]+).*" "\\1" SDL2_VERSION_MAJOR "${_sdl_version_h}")
|
||||
string(REGEX REPLACE ".*#[\t ]*define[\t ]+SDL_MINOR_VERSION[\t ]+([0-9]+).*" "\\1" SDL2_VERSION_MINOR "${_sdl_version_h}")
|
||||
string(REGEX REPLACE ".*#[\t ]*define[\t ]+SDL_PATCHLEVEL[\t ]+([0-9]+).*" "\\1" SDL2_VERSION_PATCH "${_sdl_version_h}")
|
||||
set(SDL2_VERSION "${SDL2_VERSION_MAJOR}.${SDL2_VERSION_MINOR}.${SDL2_VERSION_PATCH}")
|
||||
unset(_sdl_version_h)
|
||||
endif()
|
||||
endif()
|
||||
endif()
|
||||
|
||||
include(FindPackageHandleStandardArgs)
|
||||
find_package_handle_standard_args(SDL2
|
||||
REQUIRED_VARS SDL2_LIBRARY SDL2_INCLUDE_DIR
|
||||
VERSION_VAR SDL2_VERSION
|
||||
)
|
||||
@@ -1,27 +1,20 @@
|
||||
include(ImportedTargetHelpers)
|
||||
FIND_PATH(STK_INCLUDE_DIR Stk.h /usr/include/stk /usr/local/include/stk ${CMAKE_INSTALL_PREFIX}/include/stk ${CMAKE_FIND_ROOT_PATH}/include/stk)
|
||||
|
||||
# TODO CMake 3.18: Alias this target to something less hideous
|
||||
find_package_config_mode_with_fallback(unofficial-libstk unofficial::libstk::libstk
|
||||
LIBRARY_NAMES "stk"
|
||||
INCLUDE_NAMES "stk/Stk.h"
|
||||
LIBRARY_HINTS "/usr/lib" "/usr/local/lib" "${CMAKE_INSTALL_PREFIX}/lib" "${CMAKE_FIND_ROOT_PATH}/lib"
|
||||
INCLUDE_HINTS "/usr/include" "/usr/local/include" "${CMAKE_INSTALL_PREFIX}/include" "${CMAKE_FIND_ROOT_PATH}/include"
|
||||
PREFIX STK
|
||||
)
|
||||
FIND_LIBRARY(STK_LIBRARY NAMES stk PATH /usr/lib /usr/local/lib ${CMAKE_INSTALL_PREFIX}/lib ${CMAKE_FIND_ROOT_PATH}/lib)
|
||||
|
||||
# Find STK rawwave path
|
||||
if(STK_INCLUDE_DIRS)
|
||||
list(GET STK_INCLUDE_DIRS 0 STK_INCLUDE_DIR)
|
||||
find_path(STK_RAWWAVE_ROOT
|
||||
NAMES silence.raw sinewave.raw
|
||||
HINTS "${STK_INCLUDE_DIR}/.."
|
||||
PATH_SUFFIXES share/stk/rawwaves share/libstk/rawwaves
|
||||
)
|
||||
endif()
|
||||
IF (STK_INCLUDE_DIR AND STK_LIBRARY)
|
||||
SET(STK_FOUND TRUE)
|
||||
ENDIF (STK_INCLUDE_DIR AND STK_LIBRARY)
|
||||
|
||||
include(FindPackageHandleStandardArgs)
|
||||
|
||||
find_package_handle_standard_args(STK
|
||||
REQUIRED_VARS STK_LIBRARY STK_INCLUDE_DIR
|
||||
# STK doesn't appear to expose its version, so we can't pass it here
|
||||
)
|
||||
IF (STK_FOUND)
|
||||
IF (NOT STK_FIND_QUIETLY)
|
||||
MESSAGE(STATUS "Found STK: ${STK_LIBRARY}")
|
||||
SET(HAVE_STK TRUE)
|
||||
ENDIF (NOT STK_FIND_QUIETLY)
|
||||
ELSE (STK_FOUND)
|
||||
IF (STK_FIND_REQUIRED)
|
||||
MESSAGE(FATAL_ERROR "Could not find STK")
|
||||
ENDIF (STK_FIND_REQUIRED)
|
||||
ENDIF (STK_FOUND)
|
||||
|
||||
|
||||
@@ -1,35 +0,0 @@
|
||||
# Copyright (c) 2023 Dominic Clark
|
||||
#
|
||||
# Redistribution and use is allowed according to the terms of the New BSD license.
|
||||
# For details see the accompanying COPYING-CMAKE-SCRIPTS file.
|
||||
|
||||
include(ImportedTargetHelpers)
|
||||
|
||||
find_package_config_mode_with_fallback(SampleRate SampleRate::samplerate
|
||||
LIBRARY_NAMES "samplerate" "libsamplerate" "libsamplerate-0"
|
||||
INCLUDE_NAMES "samplerate.h"
|
||||
PKG_CONFIG samplerate
|
||||
PREFIX Samplerate
|
||||
)
|
||||
|
||||
determine_version_from_source(Samplerate_VERSION SampleRate::samplerate [[
|
||||
#include <iostream>
|
||||
#include <string_view>
|
||||
#include <samplerate.h>
|
||||
|
||||
auto main() -> int
|
||||
{
|
||||
// Version string has the format "name-version copyright"
|
||||
const auto version = std::string_view{src_get_version()};
|
||||
const auto begin = version.find('-') + 1;
|
||||
const auto end = version.find(' ', begin);
|
||||
std::cout << version.substr(begin, end - begin);
|
||||
}
|
||||
]])
|
||||
|
||||
include(FindPackageHandleStandardArgs)
|
||||
|
||||
find_package_handle_standard_args(Samplerate
|
||||
REQUIRED_VARS Samplerate_LIBRARY Samplerate_INCLUDE_DIRS
|
||||
VERSION_VAR Samplerate_VERSION
|
||||
)
|
||||
@@ -1,34 +0,0 @@
|
||||
# Copyright (c) 2023 Dominic Clark
|
||||
#
|
||||
# Redistribution and use is allowed according to the terms of the New BSD license.
|
||||
# For details see the accompanying COPYING-CMAKE-SCRIPTS file.
|
||||
|
||||
include(ImportedTargetHelpers)
|
||||
|
||||
find_package_config_mode_with_fallback(SndFile SndFile::sndfile
|
||||
LIBRARY_NAMES "sndfile" "libsndfile" "libsndfile-1"
|
||||
INCLUDE_NAMES "sndfile.h"
|
||||
PKG_CONFIG sndfile
|
||||
)
|
||||
|
||||
determine_version_from_source(SndFile_VERSION SndFile::sndfile [[
|
||||
#include <iostream>
|
||||
#include <string_view>
|
||||
#include <sndfile.h>
|
||||
|
||||
auto main() -> int
|
||||
{
|
||||
// Version string has the format "name-version", optionally followed by "-exp"
|
||||
const auto version = std::string_view{sf_version_string()};
|
||||
const auto begin = version.find('-') + 1;
|
||||
const auto end = version.find('-', begin);
|
||||
std::cout << version.substr(begin, end - begin);
|
||||
}
|
||||
]])
|
||||
|
||||
include(FindPackageHandleStandardArgs)
|
||||
|
||||
find_package_handle_standard_args(SndFile
|
||||
REQUIRED_VARS SndFile_LIBRARY SndFile_INCLUDE_DIRS
|
||||
VERSION_VAR SndFile_VERSION
|
||||
)
|
||||
@@ -1,34 +0,0 @@
|
||||
# sndio check, based on FindAlsa.cmake
|
||||
#
|
||||
|
||||
# Copyright (c) 2006, David Faure, <faure@kde.org>
|
||||
# Copyright (c) 2007, Matthias Kretz <kretz@kde.org>
|
||||
# Copyright (c) 2009, Jacob Meuser <jakemsr@sdf.lonestar.org>
|
||||
#
|
||||
# Redistribution and use is allowed according to the terms of the BSD license.
|
||||
# For details see the accompanying COPYING-CMAKE-SCRIPTS file.
|
||||
|
||||
include(CheckIncludeFiles)
|
||||
include(CheckIncludeFileCXX)
|
||||
include(CheckLibraryExists)
|
||||
|
||||
# Already done by toplevel
|
||||
find_library(SNDIO_LIBRARY sndio)
|
||||
set(SNDIO_LIBRARY_DIR "")
|
||||
if(SNDIO_LIBRARY)
|
||||
get_filename_component(SNDIO_LIBRARY_DIR ${SNDIO_LIBRARY} PATH)
|
||||
endif(SNDIO_LIBRARY)
|
||||
|
||||
check_library_exists(sndio sio_open "${SNDIO_LIBRARY_DIR}" HAVE_SIO_OPEN)
|
||||
|
||||
find_path(SNDIO_INCLUDE_DIR sndio.h)
|
||||
|
||||
include(FindPackageHandleStandardArgs)
|
||||
find_package_handle_standard_args(Sndio DEFAULT_MSG SNDIO_LIBRARY SNDIO_INCLUDE_DIR HAVE_SIO_OPEN)
|
||||
|
||||
if(SNDIO_FOUND)
|
||||
set(SNDIO_INCLUDE_DIRS "${SNDIO_INCLUDE_DIR}")
|
||||
set(SNDIO_LIBRARIES "${SNDIO_LIBRARY}")
|
||||
endif()
|
||||
|
||||
mark_as_advanced(SNDIO_INCLUDE_DIR SNDIO_LIBRARY SNDIO_INCLUDE_DIRS SNDIO_LIBRARIES)
|
||||
@@ -1,16 +0,0 @@
|
||||
# Copyright (c) 2015 Andrew Kelley
|
||||
# This file is MIT licensed.
|
||||
# See http://opensource.org/licenses/MIT
|
||||
|
||||
# SOUNDIO_FOUND
|
||||
# SOUNDIO_INCLUDE_DIR
|
||||
# SOUNDIO_LIBRARY
|
||||
|
||||
find_path(SOUNDIO_INCLUDE_DIR NAMES soundio/soundio.h)
|
||||
|
||||
find_library(SOUNDIO_LIBRARY NAMES soundio)
|
||||
|
||||
include(FindPackageHandleStandardArgs)
|
||||
find_package_handle_standard_args(SoundIo DEFAULT_MSG SOUNDIO_LIBRARY SOUNDIO_INCLUDE_DIR)
|
||||
|
||||
mark_as_advanced(SOUNDIO_INCLUDE_DIR SOUNDIO_LIBRARY)
|
||||
@@ -2,177 +2,19 @@
|
||||
# Once done this will define
|
||||
#
|
||||
# WINE_FOUND - System has wine
|
||||
#
|
||||
# WINE_INCLUDE_DIR - Wine include directory
|
||||
# WINE_BUILD - Path to winebuild
|
||||
# WINE_CXX - Path to wineg++
|
||||
# WINE_GCC - Path to winegcc
|
||||
# WINE_32_LIBRARY_DIRS - Path(s) to 32-bit wine libs
|
||||
# WINE_32_FLAGS - 32-bit linker flags
|
||||
# WINE_64_LIBRARY_DIRS - Path(s) to 64-bit wine libs
|
||||
# WINE_64_FLAGS - 64-bit linker flags
|
||||
# WINE_INCLUDE_DIRS - The wine include directories
|
||||
# WINE_LIBRARIES - The libraries needed to use wine
|
||||
# WINE_DEFINITIONS - Compiler switches required for using wine
|
||||
#
|
||||
|
||||
MACRO(_findwine_find_flags output expression result)
|
||||
STRING(REPLACE " " ";" WINEBUILD_FLAGS "${output}")
|
||||
FOREACH(FLAG ${WINEBUILD_FLAGS})
|
||||
IF("${FLAG}" MATCHES "${expression}")
|
||||
LIST(APPEND ${result} "${FLAG}")
|
||||
ENDIF()
|
||||
ENDFOREACH()
|
||||
ENDMACRO()
|
||||
FIND_PATH(WINE_INCLUDE_DIR windows/windows.h PATH_SUFFIXES wine)
|
||||
FIND_LIBRARY(WINE_LIBRARY NAMES wine PATH_SUFFIXES wine)
|
||||
FIND_PROGRAM(WINE_CXX NAMES wineg++)
|
||||
|
||||
MACRO(_regex_replace_foreach EXPRESSION REPLACEMENT RESULT INPUT)
|
||||
SET(${RESULT} "")
|
||||
FOREACH(ITEM ${INPUT})
|
||||
STRING(REGEX REPLACE "${EXPRESSION}" "${REPLACEMENT}" ITEM "${ITEM}")
|
||||
LIST(APPEND ${RESULT} "${ITEM}")
|
||||
ENDFOREACH()
|
||||
ENDMACRO()
|
||||
|
||||
# Prefer newest wine first
|
||||
list(APPEND WINE_LOCATIONS
|
||||
/opt/wine-staging
|
||||
/opt/wine-devel
|
||||
/opt/wine-stable
|
||||
/usr/lib/wine)
|
||||
|
||||
# Prepare bin search
|
||||
foreach(_loc ${WINE_LOCATIONS})
|
||||
if(_loc STREQUAL /usr/lib/wine)
|
||||
# /usr/lib/wine doesn't have a "bin"
|
||||
list(APPEND WINE_CXX_LOCATIONS "${_loc}")
|
||||
else()
|
||||
# expect "bin"
|
||||
list(APPEND WINE_CXX_LOCATIONS "${_loc}/bin")
|
||||
endif()
|
||||
endforeach()
|
||||
# Fallback
|
||||
list(APPEND WINE_CXX_LOCATIONS "/usr/bin")
|
||||
|
||||
# Prefer most-common to least common
|
||||
FIND_PROGRAM(WINE_CXX NAMES
|
||||
wineg++
|
||||
wineg++-stable
|
||||
PATHS
|
||||
${WINE_CXX_LOCATIONS}
|
||||
NO_DEFAULT_PATH
|
||||
)
|
||||
|
||||
FIND_PROGRAM(WINE_GCC NAMES
|
||||
winegcc
|
||||
winegcc-stable
|
||||
PATHS
|
||||
${WINE_CXX_LOCATIONS}
|
||||
NO_DEFAULT_PATH
|
||||
)
|
||||
|
||||
FIND_PROGRAM(WINE_BUILD NAMES winebuild PATHS ${WINE_CXX_LOCATIONS} NO_DEFAULT_PATH)
|
||||
# Detect wine paths and handle linking problems
|
||||
IF(WINE_CXX)
|
||||
# call wineg++ to obtain implied includes and libs
|
||||
execute_process(COMMAND ${WINE_CXX} -m32 -v /dev/zero OUTPUT_VARIABLE WINEBUILD_OUTPUT_32 ERROR_QUIET)
|
||||
execute_process(COMMAND ${WINE_CXX} -m64 -v /dev/zero OUTPUT_VARIABLE WINEBUILD_OUTPUT_64 ERROR_QUIET)
|
||||
_findwine_find_flags("${WINEBUILD_OUTPUT_32}" "^-isystem/usr/include$" BUGGED_WINEGCC)
|
||||
_findwine_find_flags("${WINEBUILD_OUTPUT_32}" "^-isystem" WINEGCC_INCLUDE_DIR)
|
||||
_findwine_find_flags("${WINEBUILD_OUTPUT_32}" "libwinecrt0\\.a.*" WINECRT_32)
|
||||
_findwine_find_flags("${WINEBUILD_OUTPUT_64}" "libwinecrt0\\.a.*" WINECRT_64)
|
||||
_regex_replace_foreach("^-isystem" "" WINE_INCLUDE_HINT "${WINEGCC_INCLUDE_DIR}")
|
||||
_regex_replace_foreach("/wine/windows$" "" WINE_INCLUDE_HINT "${WINE_INCLUDE_HINT}")
|
||||
STRING(REGEX REPLACE "wine/libwinecrt0\\.a.*" "" WINE_32_LIBRARY_DIR "${WINECRT_32}")
|
||||
STRING(REGEX REPLACE "wine/libwinecrt0\\.a.*" "" WINE_64_LIBRARY_DIR "${WINECRT_64}")
|
||||
# Handle winehq
|
||||
STRING(REGEX REPLACE "/libwinecrt0\\.a.*" "/" WINE_32_LIBRARY_DIR "${WINE_32_LIBRARY_DIR}")
|
||||
STRING(REGEX REPLACE "/libwinecrt0\\.a.*" "/" WINE_64_LIBRARY_DIR "${WINE_64_LIBRARY_DIR}")
|
||||
|
||||
IF(BUGGED_WINEGCC)
|
||||
MESSAGE(WARNING "Your winegcc is unusable due to https://bugs.winehq.org/show_bug.cgi?id=46293,\n
|
||||
Consider either upgrading or downgrading wine.")
|
||||
RETURN()
|
||||
ENDIF()
|
||||
IF(WINE_32_LIBRARY_DIR STREQUAL WINE_64_LIBRARY_DIR)
|
||||
MESSAGE(STATUS "Old winegcc detected, trying to use workaround linking")
|
||||
# Fix library search directory according to the target bitness
|
||||
IF(WINE_32_LIBRARY_DIR MATCHES "/lib/(x86_64|i386)-")
|
||||
# Debian systems
|
||||
STRING(REPLACE "/lib/x86_64-" "/lib/i386-" WINE_32_LIBRARY_DIR "${WINE_32_LIBRARY_DIR}")
|
||||
STRING(REPLACE "/lib/i386-" "/lib/x86_64-" WINE_64_LIBRARY_DIR "${WINE_64_LIBRARY_DIR}")
|
||||
ELSEIF(WINE_32_LIBRARY_DIR MATCHES "/(lib|lib64)/wine/$")
|
||||
# WineHQ (/opt/wine-stable, /opt/wine-devel, /opt/wine-staging)
|
||||
STRING(REGEX REPLACE "/lib64/wine/$" "/lib/wine/" WINE_32_LIBRARY_DIR "${WINE_32_LIBRARY_DIR}")
|
||||
STRING(REGEX REPLACE "/lib/wine/$" "/lib64/wine/" WINE_64_LIBRARY_DIR "${WINE_64_LIBRARY_DIR}")
|
||||
ELSEIF(WINE_32_LIBRARY_DIR MATCHES "/lib32/")
|
||||
# Systems with old multilib layout
|
||||
STRING(REPLACE "/lib32/" "/lib/" WINE_64_LIBRARY_DIR "${WINE_32_LIBRARY_DIR}")
|
||||
ELSEIF(WINE_32_LIBRARY_DIR MATCHES "/lib64/")
|
||||
# We need to test if the corresponding 64bit library directory is lib or lib32
|
||||
STRING(REPLACE "/lib64/" "/lib32/" WINE_32_LIBRARY_DIR "${WINE_64_LIBRARY_DIR}")
|
||||
IF(NOT EXISTS "${WINE_32_LIBRARY_DIR}")
|
||||
STRING(REPLACE "/lib64/" "/lib/" WINE_32_LIBRARY_DIR "${WINE_64_LIBRARY_DIR}")
|
||||
ENDIF()
|
||||
ELSEIF(WINE_32_LIBRARY_DIR MATCHES "/lib/")
|
||||
# Test if this directory is for 32bit or 64bit
|
||||
STRING(REPLACE "/lib/" "/lib32/" WINE_32_LIBRARY_DIR "${WINE_64_LIBRARY_DIR}")
|
||||
IF(NOT EXISTS "${WINE_32_LIBRARY_DIR}")
|
||||
SET(WINE_32_LIBRARY_DIR "${WINE_64_LIBRARY_DIR}")
|
||||
STRING(REPLACE "/lib/" "/lib64/" WINE_64_LIBRARY_DIR "${WINE_64_LIBRARY_DIR}")
|
||||
ENDIF()
|
||||
ELSE()
|
||||
MESSAGE(WARNING "Can't detect wine installation layout. You may get some build errors.")
|
||||
ENDIF()
|
||||
SET(WINE_LIBRARY_FIX "${WINE_32_LIBRARY_DIR} and ${WINE_64_LIBRARY_DIR}")
|
||||
ENDIF()
|
||||
ENDIF()
|
||||
|
||||
FIND_PATH(WINE_INCLUDE_DIR wine/exception.h
|
||||
HINTS ${WINE_INCLUDE_HINT}
|
||||
)
|
||||
|
||||
SET(_ARCHITECTURE ${CMAKE_LIBRARY_ARCHITECTURE})
|
||||
|
||||
SET(CMAKE_LIBRARY_ARCHITECTURE ${_ARCHITECTURE})
|
||||
|
||||
SET(WINE_INCLUDE_DIRS ${WINE_INCLUDE_DIR} )
|
||||
set(WINE_INCLUDE_DIRS ${WINE_INCLUDE_DIR} )
|
||||
set(WINE_LIBRARIES ${WINE_LIBRARY} )
|
||||
|
||||
include(FindPackageHandleStandardArgs)
|
||||
find_package_handle_standard_args(Wine DEFAULT_MSG WINE_CXX WINE_INCLUDE_DIRS)
|
||||
find_package_handle_standard_args(Wine DEFAULT_MSG WINE_LIBRARIES WINE_INCLUDE_DIRS)
|
||||
|
||||
mark_as_advanced(WINE_INCLUDE_DIR WINE_LIBRARY WINE_CXX WINE_BUILD)
|
||||
|
||||
IF(WINE_32_LIBRARY_DIR)
|
||||
IF(WINE_32_LIBRARY_DIR MATCHES "^/opt/wine-.*")
|
||||
# winehq uses a singular lib directory
|
||||
SET(WINE_32_FLAGS "-L${WINE_32_LIBRARY_DIR}")
|
||||
SET(WINE_32_LIBRARY_DIRS "${WINE_32_LIBRARY_DIR}")
|
||||
ELSEIF(WINE_32_LIBRARY_DIR MATCHES "wine*/lib")
|
||||
SET(WINE_32_FLAGS "-L${WINE_32_LIBRARY_DIR} -L${WINE_32_LIBRARY_DIR}../")
|
||||
SET(WINE_32_LIBRARY_DIRS "${WINE_32_LIBRARY_DIR}:${WINE_32_LIBRARY_DIR}/..")
|
||||
ELSE()
|
||||
SET(WINE_32_FLAGS "-L${WINE_32_LIBRARY_DIR} -L${WINE_32_LIBRARY_DIR}wine/")
|
||||
SET(WINE_32_LIBRARY_DIRS "${WINE_32_LIBRARY_DIR}:${WINE_32_LIBRARY_DIR}wine/")
|
||||
ENDIF()
|
||||
ENDIF()
|
||||
|
||||
IF(WINE_64_LIBRARY_DIR)
|
||||
IF(WINE_32_LIBRARY_DIR MATCHES "^/opt/wine-.*")
|
||||
# winehq uses a singular lib directory
|
||||
SET(WINE_64_FLAGS "-L${WINE_64_LIBRARY_DIR}")
|
||||
SET(WINE_64_LIBRARY_DIRS "${WINE_64_LIBRARY_DIR}")
|
||||
ELSEIF(WINE_64_LIBRARY_DIR MATCHES "wine*/lib")
|
||||
SET(WINE_64_FLAGS "-L${WINE_64_LIBRARY_DIR} -L${WINE_64_LIBRARY_DIR}../")
|
||||
SET(WINE_64_LIBRARY_DIRS "${WINE_64_LIBRARY_DIR}:${WINE_64_LIBRARY_DIR}/..")
|
||||
ELSE()
|
||||
SET(WINE_64_FLAGS "-L${WINE_64_LIBRARY_DIR} -L${WINE_64_LIBRARY_DIR}wine/")
|
||||
SET(WINE_64_LIBRARY_DIRS "${WINE_64_LIBRARY_DIR}:${WINE_64_LIBRARY_DIR}wine/")
|
||||
ENDIF()
|
||||
ENDIF()
|
||||
|
||||
message(STATUS " WINE_INCLUDE_DIR: ${WINE_INCLUDE_DIR}")
|
||||
message(STATUS " WINE_CXX: ${WINE_CXX}")
|
||||
message(STATUS " WINE_GCC: ${WINE_GCC}")
|
||||
message(STATUS " WINE_32_FLAGS: ${WINE_32_FLAGS}")
|
||||
message(STATUS " WINE_64_FLAGS: ${WINE_64_FLAGS}")
|
||||
|
||||
# Create winegcc (technically, wineg++) wrapper
|
||||
configure_file(${CMAKE_CURRENT_LIST_DIR}/winegcc_wrapper.in winegcc_wrapper @ONLY)
|
||||
SET(WINEGCC "${CMAKE_CURRENT_BINARY_DIR}/winegcc_wrapper")
|
||||
mark_as_advanced(WINE_INCLUDE_DIR WINE_LIBRARY)
|
||||
|
||||