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

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 0 additions & 8 deletions cpp/server/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -211,14 +211,6 @@ endif()

if(ENABLE_TESTS)
add_subdirectory(tests)

if(IS_MULTI_CONFIG)
set(CONFIG_JSON ${CMAKE_CURRENT_BINARY_DIR}/$<CONFIG>/config.json)
else()
set(CONFIG_JSON ${CMAKE_CURRENT_BINARY_DIR}/config.json)
endif()

file(GENERATE OUTPUT ${CONFIG_JSON} CONTENT "{\"webRoot\":\"${WEBUI_OUTPUT_DIR}\"}")
endif()

print_toolchain_flags()
2 changes: 2 additions & 0 deletions cpp/server/settings.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -127,6 +127,8 @@ bool SettingsData::isAllowedPath(const Path& path) const

void SettingsData::initialize(const Path& resourceDir, const Path& profileDir)
{
logDebug("init settings: resourceDir = %s, profileDir = %s", resourceDir.c_str(), profileDir.c_str());

assert(!resourceDir.empty());
assert(!profileDir.empty());

Expand Down
150 changes: 150 additions & 0 deletions js/api_tests/src/install_plugin.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,150 @@
#!/usr/bin/env node

import mkdirp from 'mkdirp';
import fs from 'fs/promises';
import path from 'path';
import { buildTypes, getBuildConfig, getBuildType } from '../../build_config.mjs'
import { callBySystem, tryStat, rimraf } from './utils.js';

function getSymlinks(buildConfig)
{
const webRoot = 'beefweb.root';

return callBySystem({
windows()
{
const installDir = path.join(
process.env.APPDATA,
'foobar2000-v2',
'user-components-x64',
'foo_beefweb');

const pluginFile = 'foo_beefweb.dll';

return [
{
from: path.join(installDir, pluginFile),
to: path.join(buildConfig.pluginBuildDir.foobar2000, pluginFile),
},
{
from: path.join(installDir, webRoot),
to: buildConfig.webBuildDir,
}
];
},

mac()
{
const fooPluginFile = 'foo_beefweb.component';
const ddbPluginFile = 'beefweb.dylib';

const fooInstallDir = path.join(
process.env.HOME,
'Library',
'foobar2000-v2',
'user-components',
'foo_beefweb');

const ddbInstallDir = path.join(
process.env.HOME,
'Library',
'Application Support',
'Deadbeef',
'Plugins');

return [
{
from: path.join(fooInstallDir, fooPluginFile),
to: path.join(buildConfig.pluginBuildDir.foobar2000, fooPluginFile),
},
{
from: path.join(buildConfig.pluginBuildDir.foobar2000, fooPluginFile, 'Contents', 'Resources', webRoot),
to: buildConfig.webBuildDir,
},
{
from: path.join(ddbInstallDir, ddbPluginFile),
to: path.join(buildConfig.pluginBuildDir.deadbeef, ddbPluginFile),
},
{
from: path.join(buildConfig.pluginBuildDir.deadbeef, webRoot),
to: buildConfig.webBuildDir,
}
];
},

posix()
{
const pluginFile = 'beefweb.so';

const installDir = path.join(
process.env.HOME,
'.local',
'lib',
'deadbeef');

return [
{
from: path.join(installDir, pluginFile),
to: path.join(buildConfig.pluginBuildDir.deadbeef, pluginFile),
},
{
from: path.join(installDir, webRoot),
to: buildConfig.webBuildDir,
}
];
}
});
}

async function run(buildTypeRaw)
{
const buildType = getBuildType(buildTypeRaw);
if (!buildType)
throw new Error(`Invalid build type: ${buildTypeRaw}`);

const buildConfig = getBuildConfig(buildType);

for (let link of getSymlinks(buildConfig))
{
const { from, to } = link;

if (await tryStat(from))
{
console.error(`removing ${from}`);
await rimraf(from);
}

console.error(`adding link ${from} -> ${to}`);
await mkdirp(path.dirname(from));
await fs.symlink(to, from);
}
}

async function main()
{
if (process.argv.length !== 3)
{
console.error('Usage:');
console.error(' install_app.js <build_type> install locally built plugin (via symlinks)');
console.error();
console.error('Build types:');
console.error(' ' + Object.values(buildTypes).join(' '));
console.error();
console.error('Warning:');
console.error(' Existing installed plugin will be removed without backup');
return process.argv.length > 3 ? 1 : 0;
}

try
{
await run(process.argv[2]);
return 0;
}
catch (e)
{
console.error(e);
return 1;
}
}

main().then(exitCode => process.exit(exitCode));
10 changes: 2 additions & 8 deletions js/api_tests/src/test_context.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import path from 'path'
import fsObj from 'fs';
import { getBuildConfig } from '../../config.mjs';
import { getBuildConfig, getPluginBuildDir } from '../../build_config.mjs';
import RequestHandler from './request_handler.js';
import TestPlayerClient from './test_player_client.js';
import { testsRootDir } from './utils.js';
Expand Down Expand Up @@ -151,13 +151,7 @@ export class TestContextFactory
{
const buildType = process.env.BEEFWEB_TEST_BUILD_TYPE || 'Debug';
const port = parseInt(process.env.BEEFWEB_TEST_PORT) || 8879;
const { buildDir, isMultiConfig } = getBuildConfig(buildType);
const pluginBuildDir = path.join(
buildDir,
'cpp',
'server',
this.playerId,
isMultiConfig ? buildType : '');
const pluginBuildDir = getBuildConfig(buildType).pluginBuildDir[this.playerId];

const serverUrl = `http://127.0.0.1:${port}`;
const webRootDir = path.join(testsRootDir, 'webroot');
Expand Down
39 changes: 39 additions & 0 deletions js/config.mjs → js/build_config.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,13 @@ import os from 'os';
const __filename = fileURLToPath(import.meta.url);
const __dirname = path.dirname(__filename);

export const buildTypes = Object.freeze({
debug: 'Debug',
release: 'Release',
minsizerel: 'MinSizeRel',
relwithdebinfo: 'RelWithDebInfo'
});

function toAbsolutePath(p)
{
return path.isAbsolute(p) ? p : path.join(path.dirname(__dirname), p);
Expand Down Expand Up @@ -36,10 +43,42 @@ function readBuildConfig(buildDir)
}
}

function getWebBuildDir(buildConfig)
{
return path.join(
buildConfig.buildDir,
'js',
'webui',
buildConfig.isMultiConfig ? buildConfig.buildType : 'output')
}

function getPluginBuildDir(buildConfig, player)
{
return path.join(
buildConfig.buildDir,
'cpp',
'server',
player,
buildConfig.isMultiConfig ? buildConfig.buildType : '');
}

export function getBuildType(value)
{
return buildTypes[value.toLowerCase()];
}

export function getBuildConfig(buildType)
{
const buildDir = getBuildDir(buildType);
const buildConfig = readBuildConfig(buildDir);

buildConfig.buildType = buildType;
buildConfig.buildDir = buildDir;
buildConfig.webBuildDir = getWebBuildDir(buildConfig);
buildConfig.pluginBuildDir = {};

for (let player of ['deadbeef', 'foobar2000'])
buildConfig.pluginBuildDir[player] = getPluginBuildDir(buildConfig, player);

return buildConfig;
}
21 changes: 4 additions & 17 deletions js/webui/webpack.config.js
Original file line number Diff line number Diff line change
Expand Up @@ -5,18 +5,11 @@ import MiniCssExtractPlugin from 'mini-css-extract-plugin'
import CssMinimizerPlugin from 'css-minimizer-webpack-plugin'
import TerserPlugin from 'terser-webpack-plugin'
import { BundleAnalyzerPlugin } from 'webpack-bundle-analyzer'
import { getBuildConfig } from '../config.mjs';
import { buildTypes, getBuildConfig, getBuildType as resolveBuildType } from '../build_config.mjs';

const __filename = fileURLToPath(import.meta.url);
const __dirname = path.dirname(__filename);

const buildTypes = {
debug: 'Debug',
release: 'Release',
minsizerel: 'MinSizeRel',
relwithdebinfo: 'RelWithDebInfo'
};

function configCommon(config, params)
{
// Common configuration
Expand Down Expand Up @@ -124,12 +117,6 @@ function configRelease(config)
});
}

function getDefaultOutputDir(buildType)
{
const { buildDir, isMultiConfig } = getBuildConfig(buildType);
return path.join(buildDir, 'js', 'webui', isMultiConfig ? buildType : 'output');
}

function getBuildType(env)
{
const matchedTypes = [];
Expand All @@ -138,7 +125,7 @@ function getBuildType(env)
{
// --env {type}

const buildType = buildTypes[key.toLowerCase()];
const buildType = resolveBuildType(key);
if (buildType)
matchedTypes.push(buildType);
}
Expand All @@ -147,7 +134,7 @@ function getBuildType(env)
{
// --env buildType={type}

const buildType = buildTypes[env.buildType.toLowerCase()];
const buildType = resolveBuildType(env.buildType);
if (buildType)
matchedTypes.push(buildType)
else
Expand All @@ -169,7 +156,7 @@ function makeBuildParams(env)
const buildType = getBuildType(env);

if (!outputDir)
outputDir = getDefaultOutputDir(buildType);
outputDir = getBuildConfig(buildType).webBuildDir;

const sourceDir = path.join(__dirname, 'src');

Expand Down
37 changes: 0 additions & 37 deletions scripts/dev_install.cmd

This file was deleted.

Loading