Browse Source

Rework some symbol exports, resolving conflicts of standalone/utils

tags/v2.3.0-RC1
falkTX 4 years ago
parent
commit
0fad472b59
9 changed files with 198 additions and 237 deletions
  1. +2
    -4
      source/backend/CarlaHost.h
  2. +0
    -157
      source/backend/CarlaHostCommon.cpp
  3. +138
    -20
      source/backend/CarlaStandalone.cpp
  4. +16
    -18
      source/backend/CarlaUtils.h
  5. +6
    -4
      source/backend/engine/CarlaEngineNative.cpp
  6. +30
    -4
      source/backend/utils/Information.cpp
  7. +2
    -2
      source/backend/utils/Windows.cpp
  8. +1
    -14
      source/includes/CarlaNativePlugin.h
  9. +3
    -14
      source/plugin/carla-host-plugin.cpp

+ 2
- 4
source/backend/CarlaHost.h View File

@@ -203,9 +203,7 @@ typedef struct _CarlaParameterInfo {
* C++ constructor and destructor.
*/
CARLA_API _CarlaParameterInfo() noexcept;
CARLA_API _CarlaParameterInfo(const char* n) noexcept;
CARLA_API ~_CarlaParameterInfo() noexcept;
const char* _reserved;
CARLA_DECLARE_NON_COPY_STRUCT(_CarlaParameterInfo)
#endif

@@ -1156,12 +1154,12 @@ CARLA_EXPORT const char* carla_get_host_osc_url_udp(CarlaHostHandle handle);
/*!
* Get the absolute filename of this carla library.
*/
CARLA_EXPORT const char* carla_get_library_filename(void);
CARLA_EXPORT const char* carla_standalone_get_library_filename(void);

/*!
* Get the folder where this carla library resides.
*/
CARLA_EXPORT const char* carla_get_library_folder(void);
CARLA_EXPORT const char* carla_standalone_get_library_folder(void);

/*!
* Initialize NSM (that is, announce ourselves to it).


+ 0
- 157
source/backend/CarlaHostCommon.cpp View File

@@ -1,157 +0,0 @@
/*
* Carla Plugin Host
* Copyright (C) 2011-2014 Filipe Coelho <falktx@falktx.com>
*
* 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 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.
*
* For a full copy of the GNU General Public License see the doc/GPL.txt file.
*/

#include "CarlaHost.h"
#include "CarlaString.hpp"

#include "water/files/File.h"

namespace CB = CarlaBackend;

// -------------------------------------------------------------------------------------------------------------------
// Always return a valid string ptr

static const char* const gNullCharPtr = "";

#ifdef CARLA_COMMON_NEED_CHECKSTRINGPTR
static void checkStringPtr(const char*& charPtr) noexcept
{
if (charPtr == nullptr)
charPtr = gNullCharPtr;
}
#endif

// -------------------------------------------------------------------------------------------------------------------
// Constructors

_CarlaPluginInfo::_CarlaPluginInfo() noexcept
: type(CB::PLUGIN_NONE),
category(CB::PLUGIN_CATEGORY_NONE),
hints(0x0),
optionsAvailable(0x0),
optionsEnabled(0x0),
filename(gNullCharPtr),
name(gNullCharPtr),
label(gNullCharPtr),
maker(gNullCharPtr),
copyright(gNullCharPtr),
iconName(gNullCharPtr),
uniqueId(0) {}

_CarlaPluginInfo::~_CarlaPluginInfo() noexcept
{
if (label != gNullCharPtr)
delete[] label;
if (maker != gNullCharPtr)
delete[] maker;
if (copyright != gNullCharPtr)
delete[] copyright;
}

_CarlaParameterInfo::_CarlaParameterInfo() noexcept
: name(gNullCharPtr),
symbol(gNullCharPtr),
unit(gNullCharPtr),
comment(gNullCharPtr),
groupName(gNullCharPtr),
scalePointCount(0),
_reserved(gNullCharPtr) {}

_CarlaParameterInfo::_CarlaParameterInfo(const char* const n) noexcept
: name(n),
symbol(n),
unit(n),
comment(n),
groupName(n),
scalePointCount(0),
_reserved(n) {}

_CarlaParameterInfo::~_CarlaParameterInfo() noexcept
{
if (name != _reserved)
delete[] name;
if (symbol != _reserved)
delete[] symbol;
if (unit != _reserved)
delete[] unit;
if (comment != _reserved)
delete[] comment;
if (groupName != _reserved)
delete[] groupName;
}

_CarlaScalePointInfo::_CarlaScalePointInfo() noexcept
: value(0.0f),
label(gNullCharPtr) {}

_CarlaScalePointInfo::~_CarlaScalePointInfo() noexcept
{
if (label != gNullCharPtr)
delete[] label;
}

_CarlaTransportInfo::_CarlaTransportInfo() noexcept
: playing(false),
frame(0),
bar(0),
beat(0),
tick(0),
bpm(0.0) {}

void _CarlaTransportInfo::clear() noexcept
{
playing = false;
frame = 0;
bar = 0;
beat = 0;
tick = 0;
bpm = 0.0;
}

// -------------------------------------------------------------------------------------------------------------------

const char* carla_get_library_filename()
{
carla_debug("carla_get_library_filename()");

static CarlaString ret;

if (ret.isEmpty())
{
using water::File;
ret = File(File::getSpecialLocation(File::currentExecutableFile)).getFullPathName().toRawUTF8();
}

return ret;
}

const char* carla_get_library_folder()
{
carla_debug("carla_get_library_folder()");

static CarlaString ret;

if (ret.isEmpty())
{
using water::File;
ret = File(File::getSpecialLocation(File::currentExecutableFile).getParentDirectory()).getFullPathName().toRawUTF8();
}

return ret;
}

// -------------------------------------------------------------------------------------------------------------------

+ 138
- 20
source/backend/CarlaStandalone.cpp View File

@@ -27,13 +27,12 @@
#include "CarlaBackendUtils.hpp"
#include "CarlaBase64Utils.hpp"
#include "ThreadSafeFFTW.hpp"

#ifdef BUILD_BRIDGE
# include "water/files/File.h"
#else
#ifndef BUILD_BRIDGE
# include "CarlaLogThread.hpp"
#endif

#include "water/files/File.h"

#define CARLA_SAFE_ASSERT_WITH_LAST_ERROR_RETURN(cond, msg, ret) \
if (! (cond)) { \
carla_stderr2("%s: " msg, __FUNCTION__); \
@@ -43,21 +42,108 @@
}

// --------------------------------------------------------------------------------------------------------------------
// API

#ifndef CARLA_PLUGIN_EXPORT
# define CARLA_COMMON_NEED_CHECKSTRINGPTR
# include "CarlaHostCommon.cpp"
# undef CARLA_COMMON_NEED_CHECKSTRINGPTR
#endif

#ifdef USING_JUCE
static void carla_juce_init();
static void carla_juce_idle();
static void carla_juce_cleanup();
static void carla_standalone_juce_init(void);
static void carla_standalone_juce_idle(void);
static void carla_standalone_juce_cleanup(void);
# define carla_juce_init carla_standalone_juce_init
# define carla_juce_idle carla_standalone_juce_idle
# define carla_juce_cleanup carla_standalone_juce_cleanup
# include "utils/JUCE.cpp"
# undef carla_juce_init
# undef carla_juce_idle
# undef carla_juce_cleanup
#endif

// -------------------------------------------------------------------------------------------------------------------
// Always return a valid string ptr for standalone functions

static const char* const gNullCharPtr = "";

static void checkStringPtr(const char*& charPtr) noexcept
{
if (charPtr == nullptr)
charPtr = gNullCharPtr;
}

// -------------------------------------------------------------------------------------------------------------------
// Constructors

_CarlaPluginInfo::_CarlaPluginInfo() noexcept
: type(CB::PLUGIN_NONE),
category(CB::PLUGIN_CATEGORY_NONE),
hints(0x0),
optionsAvailable(0x0),
optionsEnabled(0x0),
filename(gNullCharPtr),
name(gNullCharPtr),
label(gNullCharPtr),
maker(gNullCharPtr),
copyright(gNullCharPtr),
iconName(gNullCharPtr),
uniqueId(0) {}

_CarlaPluginInfo::~_CarlaPluginInfo() noexcept
{
if (label != gNullCharPtr)
delete[] label;
if (maker != gNullCharPtr)
delete[] maker;
if (copyright != gNullCharPtr)
delete[] copyright;
}

_CarlaParameterInfo::_CarlaParameterInfo() noexcept
: name(gNullCharPtr),
symbol(gNullCharPtr),
unit(gNullCharPtr),
comment(gNullCharPtr),
groupName(gNullCharPtr),
scalePointCount(0) {}

_CarlaParameterInfo::~_CarlaParameterInfo() noexcept
{
if (name != gNullCharPtr)
delete[] name;
if (symbol != gNullCharPtr)
delete[] symbol;
if (unit != gNullCharPtr)
delete[] unit;
if (comment != gNullCharPtr)
delete[] comment;
if (groupName != gNullCharPtr)
delete[] groupName;
}

_CarlaScalePointInfo::_CarlaScalePointInfo() noexcept
: value(0.0f),
label(gNullCharPtr) {}

_CarlaScalePointInfo::~_CarlaScalePointInfo() noexcept
{
if (label != gNullCharPtr)
delete[] label;
}

_CarlaTransportInfo::_CarlaTransportInfo() noexcept
: playing(false),
frame(0),
bar(0),
beat(0),
tick(0),
bpm(0.0) {}

void _CarlaTransportInfo::clear() noexcept
{
playing = false;
frame = 0;
bar = 0;
beat = 0;
tick = 0;
bpm = 0.0;
}

// --------------------------------------------------------------------------------------------------------------------

using CarlaBackend::CarlaPluginPtr;
@@ -319,7 +405,7 @@ bool carla_engine_init(CarlaHostHandle handle, const char* driverName, const cha
#endif

#ifdef USING_JUCE
carla_juce_init();
carla_standalone_juce_init();
#endif

CarlaHostStandalone& shandle((CarlaHostStandalone&)*handle);
@@ -369,7 +455,7 @@ bool carla_engine_init(CarlaHostHandle handle, const char* driverName, const cha
shandle.engine = nullptr;
delete engine;
#ifdef USING_JUCE
carla_juce_cleanup();
carla_standalone_juce_cleanup();
#endif
return false;
}
@@ -449,7 +535,7 @@ bool carla_engine_close(CarlaHostHandle handle)
delete engine;

#ifdef USING_JUCE
carla_juce_cleanup();
carla_standalone_juce_cleanup();
#endif
return closed;
}
@@ -462,7 +548,7 @@ void carla_engine_idle(CarlaHostHandle handle)

#ifdef USING_JUCE
if (handle->isStandalone)
carla_juce_idle();
carla_standalone_juce_idle();
#endif
}

@@ -1354,7 +1440,7 @@ const CarlaPortCountInfo* carla_get_parameter_count_info(CarlaHostHandle handle,

const CarlaParameterInfo* carla_get_parameter_info(CarlaHostHandle handle, uint pluginId, uint32_t parameterId)
{
static CarlaParameterInfo retInfo(gNullCharPtr);
static CarlaParameterInfo retInfo;

// reset
retInfo.scalePointCount = 0;
@@ -2267,6 +2353,38 @@ const char* carla_get_host_osc_url_udp(CarlaHostHandle handle)
#endif
}

// -------------------------------------------------------------------------------------------------------------------

const char* carla_standalone_get_library_filename()
{
carla_debug("carla_standalone_get_library_filename()");

static CarlaString ret;

if (ret.isEmpty())
{
using water::File;
ret = File(File::getSpecialLocation(File::currentExecutableFile)).getFullPathName().toRawUTF8();
}

return ret;
}

const char* carla_standalone_get_library_folder()
{
carla_debug("carla_standalone_get_library_folder()");

static CarlaString ret;

if (ret.isEmpty())
{
using water::File;
ret = File(File::getSpecialLocation(File::currentExecutableFile).getParentDirectory()).getFullPathName().toRawUTF8();
}

return ret;
}

// --------------------------------------------------------------------------------------------------------------------

#ifndef CARLA_PLUGIN_EXPORT
@@ -2279,6 +2397,6 @@ const char* carla_get_host_osc_url_udp(CarlaHostHandle handle)
# include "CarlaPipeUtils.cpp"
# include "CarlaProcessUtils.cpp"
# include "CarlaStateUtils.cpp"
#endif
#endif /* CARLA_PLUGIN_EXPORT */

// --------------------------------------------------------------------------------------------------------------------

+ 16
- 18
source/backend/CarlaUtils.h View File

@@ -262,19 +262,29 @@ CARLA_EXPORT bool carla_pipe_client_flush_and_unlock(CarlaPipeClientHandle handl
*/
CARLA_EXPORT void carla_pipe_client_destroy(CarlaPipeClientHandle handle);

#ifndef CARLA_HOST_H_INCLUDED
/* --------------------------------------------------------------------------------------------------------------------
* window control */

CARLA_EXPORT int carla_cocoa_get_window(void* nsViewPtr);

CARLA_EXPORT void carla_x11_reparent_window(uintptr_t winId1, uintptr_t winId2);

CARLA_EXPORT void carla_x11_move_window(uintptr_t winId, int x, int y);

CARLA_EXPORT int* carla_x11_get_window_pos(uintptr_t winId);

/* --------------------------------------------------------------------------------------------------------------------
* info about current library */

/*!
* Get the absolute filename of this carla library.
*/
CARLA_EXPORT const char* carla_get_library_filename(void);
CARLA_EXPORT const char* carla_utils_get_library_filename(void);

/*!
* Get the folder where this carla library resides.
*/
CARLA_EXPORT const char* carla_get_library_folder(void);
CARLA_EXPORT const char* carla_utils_get_library_folder(void);

/* --------------------------------------------------------------------------------------------------------------------
* JUCE */
@@ -287,30 +297,18 @@ CARLA_EXPORT const char* carla_get_library_folder(void);
*
* Make sure to call carla_juce_cleanup after you are done with APIs that need JUCE.
*/
CARLA_EXPORT void carla_juce_init();
CARLA_EXPORT void carla_juce_init(void);

/*!
* Give idle time to JUCE stuff.
* Currently only used for Linux.
*/
CARLA_EXPORT void carla_juce_idle();
CARLA_EXPORT void carla_juce_idle(void);

/*!
* Cleanup the JUCE stuff that was initialized by carla_juce_init.
*/
CARLA_EXPORT void carla_juce_cleanup();
#endif

/* --------------------------------------------------------------------------------------------------------------------
* window control */

CARLA_EXPORT int carla_cocoa_get_window(void* nsViewPtr);

CARLA_EXPORT void carla_x11_reparent_window(uintptr_t winId1, uintptr_t winId2);

CARLA_EXPORT void carla_x11_move_window(uintptr_t winId, int x, int y);

CARLA_EXPORT int* carla_x11_get_window_pos(uintptr_t winId);
CARLA_EXPORT void carla_juce_cleanup(void);

/* ----------------------------------------------------------------------------------------------------------------- */



+ 6
- 4
source/backend/engine/CarlaEngineNative.cpp View File

@@ -218,8 +218,10 @@ public:
if (pData->options.binaryDir != nullptr)
delete[] pData->options.binaryDir;

const water::String binaryDir(File(File::getSpecialLocation(File::currentExecutableFile).getParentDirectory()).getFullPathName());

pData->options.resourceDir = carla_strdup(pHost->resourceDir);
pData->options.binaryDir = carla_strdup(carla_get_library_folder());
pData->options.binaryDir = carla_strdup(binaryDir.toRawUTF8());
}

~CarlaEngineNative() override
@@ -2877,9 +2879,9 @@ const EngineDriverDeviceInfo* getRtAudioDeviceInfo(const uint, const char* const

CARLA_BACKEND_END_NAMESPACE

#define CARLA_PLUGIN_UI_CLASS_PREFIX EngineNative
#include "CarlaHostCommon.cpp"
#define CARLA_PLUGIN_UI_CLASS_PREFIX Plugin
#include "CarlaPluginUI.cpp"
# undef CARLA_PLUGIN_UI_CLASS_PREFIX
#include "CarlaDssiUtils.cpp"
#include "CarlaMacUtils.cpp"
#include "CarlaPatchbayUtils.cpp"
@@ -2887,6 +2889,6 @@ CARLA_BACKEND_END_NAMESPACE
#include "CarlaProcessUtils.cpp"
#include "CarlaStateUtils.cpp"

#endif
#endif /* CARLA_PLUGIN_EXPORT */

// -----------------------------------------------------------------------

+ 30
- 4
source/backend/utils/Information.cpp View File

@@ -1,6 +1,6 @@
/*
* Carla Plugin Host
* Copyright (C) 2011-2019 Filipe Coelho <falktx@falktx.com>
* Copyright (C) 2011-2020 Filipe Coelho <falktx@falktx.com>
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License as
@@ -221,8 +221,34 @@ const char* const* carla_get_supported_features()

// -------------------------------------------------------------------------------------------------------------------

#ifndef CARLA_PLUGIN_EXPORT
# include "../CarlaHostCommon.cpp"
#endif
const char* carla_utils_get_library_filename()
{
carla_debug("carla_utils_get_library_filename()");

static CarlaString ret;

if (ret.isEmpty())
{
using water::File;
ret = File(File::getSpecialLocation(File::currentExecutableFile)).getFullPathName().toRawUTF8();
}

return ret;
}

const char* carla_utils_get_library_folder()
{
carla_debug("carla_utils_get_library_folder()");

static CarlaString ret;

if (ret.isEmpty())
{
using water::File;
ret = File(File::getSpecialLocation(File::currentExecutableFile).getParentDirectory()).getFullPathName().toRawUTF8();
}

return ret;
}

// -------------------------------------------------------------------------------------------------------------------

+ 2
- 2
source/backend/utils/Windows.cpp View File

@@ -19,7 +19,7 @@

#include "CarlaUtils.hpp"

#ifdef CARLA_OS_MAC
#if defined(CARLA_OS_MAC) && !defined(CARLA_PLUGIN_EXPORT)
# import <Cocoa/Cocoa.h>
#endif

@@ -35,7 +35,7 @@ int carla_cocoa_get_window(void* nsViewPtr)
{
CARLA_SAFE_ASSERT_RETURN(nsViewPtr != nullptr, 0);

#ifdef CARLA_OS_MAC
#if defined(CARLA_OS_MAC) && !defined(CARLA_PLUGIN_EXPORT)
NSView* const nsView = (NSView*)nsViewPtr;
return [[nsView window] windowNumber];
#else


+ 1
- 14
source/includes/CarlaNativePlugin.h View File

@@ -20,20 +20,7 @@

#include "CarlaNative.h"
#include "CarlaHost.h"

#ifndef CARLA_HOST_H_INCLUDED
#ifndef CARLA_UTILS_H_INCLUDED
/*!
* Get the absolute filename of this carla library.
*/
CARLA_EXPORT const char* carla_get_library_filename(void);

/*!
* Get the folder where this carla library resides.
*/
CARLA_EXPORT const char* carla_get_library_folder(void);
#endif
#endif
#include "CarlaUtils.h"

/*!
* Get the native plugin descriptor for the carla-rack plugin.


+ 3
- 14
source/plugin/carla-host-plugin.cpp View File

@@ -15,8 +15,7 @@
* For a full copy of the GNU General Public License see the doc/GPL.txt file.
*/

#include "CarlaHost.h"
#include "CarlaUtils.h"
#include "CarlaNativePlugin.h"

#define CARLA_PLUGIN_EXPORT

@@ -25,20 +24,10 @@

#include "utils/CachedPlugins.cpp"
#include "utils/Information.cpp"
#include "utils/JUCE.cpp"
#include "utils/PipeClient.cpp"
#include "utils/System.cpp"
// #include "utils/Windows.cpp"

// -------------------------------------------------------------------------------------------------------------------
// Always return a valid string ptr

static const char* const gNullCharPtr = "";

static void checkStringPtr(const char*& charPtr) noexcept
{
if (charPtr == nullptr)
charPtr = gNullCharPtr;
}
#include "utils/Windows.cpp"

// -------------------------------------------------------------------------------------------------------------------
// Include all standalone code


Loading…
Cancel
Save