Browse Source

Auto-detect binary type, makes possible to load projs with bridges

tags/1.9.4
falkTX 11 years ago
parent
commit
62eff2fdeb
8 changed files with 125 additions and 6 deletions
  1. +3
    -2
      source/Makefile.deps
  2. +6
    -0
      source/Makefile.mk
  3. +4
    -0
      source/backend/Makefile
  4. +3
    -1
      source/backend/engine/CarlaEngine.cpp
  5. +3
    -1
      source/backend/engine/CarlaEngineNative.cpp
  6. +3
    -0
      source/backend/plugin/CarlaPluginThread.cpp
  7. +3
    -2
      source/plugin/Makefile
  8. +100
    -0
      source/utils/CarlaBinaryUtils.hpp

+ 3
- 2
source/Makefile.deps View File

@@ -56,6 +56,7 @@ CARLA_VST_UTILS_HPP = $(CWD)/utils/CarlaVstUtils.hpp $(CARLA_UTILS_HPP)
# utils (misc stuff)

CARLA_BACKEND_UTILS_HPP = $(CWD)/utils/CarlaBackendUtils.hpp $(CARLA_BACKEND_H) $(CARLA_HOST_H) $(CARLA_STRING_HPP)
CARLA_BINARY_UTILS_HPP = $(CWD)/utils/CarlaBinaryUtils.hpp $(CARLA_BACKEND_H) $(CARLA_UTILS_HPP)
CARLA_BRIDGE_UTILS_HPP = $(CWD)/utils/CarlaBridgeUtils.hpp $(CARLA_RING_BUFFER_HPP)
CARLA_ENGINE_UTILS_HPP = $(CWD)/utils/CarlaEngineUtils.hpp $(CARLA_ENGINE_HPP) $(CARLA_UTILS_HPP)
CARLA_PATCHBAY_UTILS_HPP = $(CWD)/utils/CarlaPatchbayUtils.hpp $(LINKED_LIST_HPP)
@@ -89,7 +90,7 @@ CARLA_ENGINE_GRAPH_HPP = $(CWD)/backend/engine/CarlaEngineGraph.hpp $
CARLA_ENGINE_THREAD_HPP = $(CWD)/backend/engine/CarlaEngineThread.hpp $(CARLA_BACKEND_H) $(CARLA_THREAD_HPP)
CARLA_ENGINE_INTERNAL_HPP = $(CWD)/backend/engine/CarlaEngineInternal.hpp $(CARLA_ENGINE_OSC_HPP) $(CARLA_ENGINE_THREAD_HPP) $(CARLA_ENGINE_UTILS_HPP)

CARLA_ENGINE_CPP_DEPS = $(CARLA_ENGINE_INTERNAL_HPP) $(CARLA_PLUGIN_HPP) $(CARLA_BACKEND_UTILS_HPP) $(CARLA_ENGINE_UTILS_HPP) $(CARLA_MATH_UTILS_HPP) $(CARLA_STATE_UTILS_HPP) $(CARLA_MIDI_H) $(JACK_BRIDGE_HPP)
CARLA_ENGINE_CPP_DEPS = $(CARLA_ENGINE_INTERNAL_HPP) $(CARLA_PLUGIN_HPP) $(CARLA_BACKEND_UTILS_HPP) $(CARLA_BINARY_UTILS_HPP) $(CARLA_ENGINE_UTILS_HPP) $(CARLA_MATH_UTILS_HPP) $(CARLA_STATE_UTILS_HPP) $(CARLA_MIDI_H) $(JACK_BRIDGE_HPP)
CARLA_ENGINE_BRIDGE_CPP_DEPS = $(CARLA_ENGINE_INTERNAL_HPP) $(CARLA_PLUGIN_HPP) $(CARLA_BACKEND_UTILS_HPP) $(CARLA_BRIDGE_UTILS_HPP) $(CARLA_MIDI_H) $(JACK_BRIDGE_HPP)
CARLA_ENGINE_CLIENT_CPP_DEPS = $(CARLA_ENGINE_UTILS_HPP)
CARLA_ENGINE_DATA_CPP_DEPS = $(CARLA_ENGINE_HPP) $(CARLA_MATH_UTILS_HPP) $(CARLA_MIDI_H)
@@ -97,7 +98,7 @@ CARLA_ENGINE_GRAPH_CPP_DEPS = $(CARLA_ENGINE_GRAPH_HPP) $(CARLA_ENGINE_INTERN
CARLA_ENGINE_INTERNAL_CPP_DEPS = $(CARLA_ENGINE_INTERNAL_HPP) $(CARLA_PLUGIN_HPP)
CARLA_ENGINE_JACK_CPP_DEPS = $(CARLA_ENGINE_INTERNAL_HPP) $(CARLA_PLUGIN_HPP) $(CARLA_BACKEND_UTILS_HPP) $(CARLA_ENGINE_UTILS_HPP) $(CARLA_MATH_UTILS_HPP) $(CARLA_MIDI_H) $(CARLA_PATCHBAY_UTILS_HPP) $(JACK_BRIDGE_HPP)
CARLA_ENGINE_JUCE_CPP_DEPS = $(CARLA_ENGINE_GRAPH_HPP) $(CARLA_ENGINE_INTERNAL_HPP) $(CARLA_BACKEND_UTILS_HPP) $(CARLA_STRING_LIST_HPP) $(RT_LINKED_LIST_HPP)
CARLA_ENGINE_NATIVE_CPP_DEPS = $(CARLA_ENGINE_INTERNAL_HPP) $(CARLA_PLUGIN_HPP) $(CARLA_BACKEND_UTILS_HPP) $(CARLA_MATH_UTILS_HPP) $(CARLA_STATE_UTILS_HPP) $(CARLA_EXTERNAL_UI_HPP) $(CARLA_NATIVE_HPP) $(CARLA_DSSI_UTILS_CPP) $(CARLA_STATE_UTILS_CPP)
CARLA_ENGINE_NATIVE_CPP_DEPS = $(CARLA_ENGINE_INTERNAL_HPP) $(CARLA_PLUGIN_HPP) $(CARLA_BACKEND_UTILS_HPP) $(CARLA_BINARY_UTILS_HPP) $(CARLA_MATH_UTILS_HPP) $(CARLA_STATE_UTILS_HPP) $(CARLA_EXTERNAL_UI_HPP) $(CARLA_NATIVE_HPP) $(CARLA_DSSI_UTILS_CPP) $(CARLA_STATE_UTILS_CPP)
CARLA_ENGINE_OSC_CPP_DEPS = $(CARLA_ENGINE_HPP) $(CARLA_ENGINE_OSC_HPP) $(CARLA_PLUGIN_HPP) $(CARLA_BRIDGE_UTILS_HPP) $(CARLA_MIDI_H)
CARLA_ENGINE_OSC_SEND_CPP_DEPS = $(CARLA_BACKEND_UTILS_HPP) $(CARLA_ENGINE_INTERNAL_HPP) $(CARLA_MIDI_H)
CARLA_ENGINE_PORTS_CPP_DEPS = $(CARLA_ENGINE_UTILS_HPP) $(CARLA_MATH_UTILS_HPP) $(CARLA_MIDI_H)


+ 6
- 0
source/Makefile.mk View File

@@ -135,6 +135,12 @@ ifneq ($(shell pkg-config --exists liblo && echo true),true)
$(error liblo missing, cannot continue)
endif

ifeq ($(LINUX),true)
ifeq (,$(wildcard /usr/include/magic.h))
$(error libmagic missing, cannot continue)
endif
endif

# --------------------------------------------------------------
# Check for optional libs (required by backend or bridges)



+ 4
- 0
source/backend/Makefile View File

@@ -69,6 +69,10 @@ ifeq ($(HAVE_X11),true)
STANDALONE_FLAGS += $(X11_LIBS)
endif

ifeq ($(LINUX),true)
STANDALONE_FLAGS += -lmagic
endif

# --------------------------------------------------------------

OBJS = \


+ 3
- 1
source/backend/engine/CarlaEngine.cpp View File

@@ -27,6 +27,7 @@
#include "CarlaPlugin.hpp"

#include "CarlaBackendUtils.hpp"
#include "CarlaBinaryUtils.hpp"
#include "CarlaEngineUtils.hpp"
#include "CarlaMathUtils.hpp"
#include "CarlaStateUtils.hpp"
@@ -989,6 +990,7 @@ bool CarlaEngine::loadProject(const char* const filename)
// check if using GIG or SF2 16outs
static const char kUse16OutsSuffix[] = " (16 outs)";

const BinaryType btype(getBinaryTypeFromFile(stateSave.binary));
const PluginType ptype(getPluginTypeFromString(stateSave.type));

if (CarlaString(stateSave.label).endsWith(kUse16OutsSuffix))
@@ -999,7 +1001,7 @@ bool CarlaEngine::loadProject(const char* const filename)

// TODO - proper find&load plugins

if (addPlugin(ptype, stateSave.binary, stateSave.name, stateSave.label, stateSave.uniqueId, extraStuff))
if (addPlugin(btype, ptype, stateSave.binary, stateSave.name, stateSave.label, stateSave.uniqueId, extraStuff))
{
if (CarlaPlugin* const plugin = getPlugin(pData->curPluginCount-1))
plugin->loadStateSave(stateSave);


+ 3
- 1
source/backend/engine/CarlaEngineNative.cpp View File

@@ -28,6 +28,7 @@
#include "CarlaPlugin.hpp"

#include "CarlaBackendUtils.hpp"
#include "CarlaBinaryUtils.hpp"
#include "CarlaMathUtils.hpp"
#include "CarlaStateUtils.hpp"

@@ -1355,6 +1356,7 @@ protected:
// check if using GIG or SF2 16outs
static const char kUse16OutsSuffix[] = " (16 outs)";

const BinaryType btype(getBinaryTypeFromFile(stateSave.binary));
const PluginType ptype(getPluginTypeFromString(stateSave.type));

if (CarlaString(stateSave.label).endsWith(kUse16OutsSuffix))
@@ -1365,7 +1367,7 @@ protected:

// TODO - proper find&load plugins

if (addPlugin(ptype, stateSave.binary, stateSave.name, stateSave.label, stateSave.uniqueId, extraStuff))
if (addPlugin(btype, ptype, stateSave.binary, stateSave.name, stateSave.label, stateSave.uniqueId, extraStuff))
{
if (CarlaPlugin* const plugin = getPlugin(pData->curPluginCount-1))
plugin->loadStateSave(stateSave);


+ 3
- 0
source/backend/plugin/CarlaPluginThread.cpp View File

@@ -140,6 +140,9 @@ void CarlaPluginThread::run()
if (name.isEmpty())
name = "(none)";

if (fLabel.isEmpty())
fLabel = "\"\"";

StringArray arguments;

#ifndef CARLA_OS_WIN


+ 3
- 2
source/plugin/Makefile View File

@@ -45,8 +45,9 @@ ifeq ($(HAVE_X11),true)
LINK_FLAGS += $(X11_LIBS)
endif

# --------------------------------------------------------------
# Native
ifeq ($(LINUX),true)
LINK_FLAGS += -lmagic
endif

# --------------------------------------------------------------
# Libs


+ 100
- 0
source/utils/CarlaBinaryUtils.hpp View File

@@ -0,0 +1,100 @@
/*
* Carla binary utils
* Copyright (C) 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.
*/

#ifndef CARLA_BINARY_UTILS_HPP_INCLUDED
#define CARLA_BINARY_UTILS_HPP_INCLUDED

#include "CarlaBackend.h"
#include "CarlaUtils.hpp"

#ifdef CARLA_OS_LINUX
# include "magic.h"
#endif

CARLA_BACKEND_START_NAMESPACE

#ifdef CARLA_OS_LINUX
// -----------------------------------------------------------------------

class CarlaMagic
{
public:
CarlaMagic()
: fMagic(magic_open(MAGIC_SYMLINK))
{
CARLA_SAFE_ASSERT_RETURN(fMagic != nullptr,);
magic_load(fMagic, nullptr);
}

~CarlaMagic()
{
if (fMagic != nullptr)
magic_close(fMagic);
}

const char* getFileDescription(const char* const filename) const
{
if (fMagic == nullptr)
return nullptr;

return magic_file(fMagic, filename);
}

private:
const magic_t fMagic;
};

static const CarlaMagic& getCarlaMagicInstance()
{
static CarlaMagic magic;
return magic;
}
#endif

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

static inline
BinaryType getBinaryTypeFromFile(const char* const filename)
{
carla_stdout("getBinaryTypeFromFile(\"%s\")", filename);

#ifdef CARLA_OS_LINUX
if (filename == nullptr || filename[0] == '\0')
return BINARY_NATIVE;

const CarlaMagic& magic(getCarlaMagicInstance());

const char* const output(magic.getFileDescription(filename));

if (output == nullptr || output[0] == '\0')
return BINARY_NATIVE;

if (std::strstr(output, "PE32 executable") != nullptr && std::strstr(output, "MS Windows") != nullptr)
return std::strstr(output, "x86-64") != nullptr ? BINARY_WIN64 : BINARY_WIN32;

if (std::strstr(output, "ELF") != nullptr)
return (std::strstr(output, "x86-64") != nullptr || std::strstr(output, "aarch64") != nullptr) ? BINARY_POSIX64 : BINARY_POSIX32;
#endif

return BINARY_NATIVE;
}

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

CARLA_BACKEND_END_NAMESPACE

#endif // CARLA_BINARY_UTILS_HPP_INCLUDED

Loading…
Cancel
Save