diff -Nru synthv1-0.8.6/aclocal.m4 synthv1-0.9.10+git20190929/aclocal.m4 --- synthv1-0.8.6/aclocal.m4 2017-12-20 07:57:09.949843285 +0000 +++ synthv1-0.9.10+git20190929/aclocal.m4 1970-01-01 00:00:00.000000000 +0000 @@ -1,290 +0,0 @@ -# generated automatically by aclocal 1.15.1 -*- Autoconf -*- - -# Copyright (C) 1996-2017 Free Software Foundation, Inc. - -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY, to the extent permitted by law; without -# even the implied warranty of MERCHANTABILITY or FITNESS FOR A -# PARTICULAR PURPOSE. - -m4_ifndef([AC_CONFIG_MACRO_DIRS], [m4_defun([_AM_CONFIG_MACRO_DIRS], [])m4_defun([AC_CONFIG_MACRO_DIRS], [_AM_CONFIG_MACRO_DIRS($@)])]) -# pkg.m4 - Macros to locate and utilise pkg-config. -*- Autoconf -*- -# serial 12 (pkg-config-0.29.2) - -dnl Copyright © 2004 Scott James Remnant . -dnl Copyright © 2012-2015 Dan Nicholson -dnl -dnl This program is free software; you can redistribute it and/or modify -dnl it under the terms of the GNU General Public License as published by -dnl the Free Software Foundation; either version 2 of the License, or -dnl (at your option) any later version. -dnl -dnl This program is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of -dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -dnl General Public License for more details. -dnl -dnl You should have received a copy of the GNU General Public License -dnl along with this program; if not, write to the Free Software -dnl Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA -dnl 02111-1307, USA. -dnl -dnl As a special exception to the GNU General Public License, if you -dnl distribute this file as part of a program that contains a -dnl configuration script generated by Autoconf, you may include it under -dnl the same distribution terms that you use for the rest of that -dnl program. - -dnl PKG_PREREQ(MIN-VERSION) -dnl ----------------------- -dnl Since: 0.29 -dnl -dnl Verify that the version of the pkg-config macros are at least -dnl MIN-VERSION. Unlike PKG_PROG_PKG_CONFIG, which checks the user's -dnl installed version of pkg-config, this checks the developer's version -dnl of pkg.m4 when generating configure. -dnl -dnl To ensure that this macro is defined, also add: -dnl m4_ifndef([PKG_PREREQ], -dnl [m4_fatal([must install pkg-config 0.29 or later before running autoconf/autogen])]) -dnl -dnl See the "Since" comment for each macro you use to see what version -dnl of the macros you require. -m4_defun([PKG_PREREQ], -[m4_define([PKG_MACROS_VERSION], [0.29.2]) -m4_if(m4_version_compare(PKG_MACROS_VERSION, [$1]), -1, - [m4_fatal([pkg.m4 version $1 or higher is required but ]PKG_MACROS_VERSION[ found])]) -])dnl PKG_PREREQ - -dnl PKG_PROG_PKG_CONFIG([MIN-VERSION]) -dnl ---------------------------------- -dnl Since: 0.16 -dnl -dnl Search for the pkg-config tool and set the PKG_CONFIG variable to -dnl first found in the path. Checks that the version of pkg-config found -dnl is at least MIN-VERSION. If MIN-VERSION is not specified, 0.9.0 is -dnl used since that's the first version where most current features of -dnl pkg-config existed. -AC_DEFUN([PKG_PROG_PKG_CONFIG], -[m4_pattern_forbid([^_?PKG_[A-Z_]+$]) -m4_pattern_allow([^PKG_CONFIG(_(PATH|LIBDIR|SYSROOT_DIR|ALLOW_SYSTEM_(CFLAGS|LIBS)))?$]) -m4_pattern_allow([^PKG_CONFIG_(DISABLE_UNINSTALLED|TOP_BUILD_DIR|DEBUG_SPEW)$]) -AC_ARG_VAR([PKG_CONFIG], [path to pkg-config utility]) -AC_ARG_VAR([PKG_CONFIG_PATH], [directories to add to pkg-config's search path]) -AC_ARG_VAR([PKG_CONFIG_LIBDIR], [path overriding pkg-config's built-in search path]) - -if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then - AC_PATH_TOOL([PKG_CONFIG], [pkg-config]) -fi -if test -n "$PKG_CONFIG"; then - _pkg_min_version=m4_default([$1], [0.9.0]) - AC_MSG_CHECKING([pkg-config is at least version $_pkg_min_version]) - if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then - AC_MSG_RESULT([yes]) - else - AC_MSG_RESULT([no]) - PKG_CONFIG="" - fi -fi[]dnl -])dnl PKG_PROG_PKG_CONFIG - -dnl PKG_CHECK_EXISTS(MODULES, [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND]) -dnl ------------------------------------------------------------------- -dnl Since: 0.18 -dnl -dnl Check to see whether a particular set of modules exists. Similar to -dnl PKG_CHECK_MODULES(), but does not set variables or print errors. -dnl -dnl Please remember that m4 expands AC_REQUIRE([PKG_PROG_PKG_CONFIG]) -dnl only at the first occurence in configure.ac, so if the first place -dnl it's called might be skipped (such as if it is within an "if", you -dnl have to call PKG_CHECK_EXISTS manually -AC_DEFUN([PKG_CHECK_EXISTS], -[AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl -if test -n "$PKG_CONFIG" && \ - AC_RUN_LOG([$PKG_CONFIG --exists --print-errors "$1"]); then - m4_default([$2], [:]) -m4_ifvaln([$3], [else - $3])dnl -fi]) - -dnl _PKG_CONFIG([VARIABLE], [COMMAND], [MODULES]) -dnl --------------------------------------------- -dnl Internal wrapper calling pkg-config via PKG_CONFIG and setting -dnl pkg_failed based on the result. -m4_define([_PKG_CONFIG], -[if test -n "$$1"; then - pkg_cv_[]$1="$$1" - elif test -n "$PKG_CONFIG"; then - PKG_CHECK_EXISTS([$3], - [pkg_cv_[]$1=`$PKG_CONFIG --[]$2 "$3" 2>/dev/null` - test "x$?" != "x0" && pkg_failed=yes ], - [pkg_failed=yes]) - else - pkg_failed=untried -fi[]dnl -])dnl _PKG_CONFIG - -dnl _PKG_SHORT_ERRORS_SUPPORTED -dnl --------------------------- -dnl Internal check to see if pkg-config supports short errors. -AC_DEFUN([_PKG_SHORT_ERRORS_SUPPORTED], -[AC_REQUIRE([PKG_PROG_PKG_CONFIG]) -if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then - _pkg_short_errors_supported=yes -else - _pkg_short_errors_supported=no -fi[]dnl -])dnl _PKG_SHORT_ERRORS_SUPPORTED - - -dnl PKG_CHECK_MODULES(VARIABLE-PREFIX, MODULES, [ACTION-IF-FOUND], -dnl [ACTION-IF-NOT-FOUND]) -dnl -------------------------------------------------------------- -dnl Since: 0.4.0 -dnl -dnl Note that if there is a possibility the first call to -dnl PKG_CHECK_MODULES might not happen, you should be sure to include an -dnl explicit call to PKG_PROG_PKG_CONFIG in your configure.ac -AC_DEFUN([PKG_CHECK_MODULES], -[AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl -AC_ARG_VAR([$1][_CFLAGS], [C compiler flags for $1, overriding pkg-config])dnl -AC_ARG_VAR([$1][_LIBS], [linker flags for $1, overriding pkg-config])dnl - -pkg_failed=no -AC_MSG_CHECKING([for $2]) - -_PKG_CONFIG([$1][_CFLAGS], [cflags], [$2]) -_PKG_CONFIG([$1][_LIBS], [libs], [$2]) - -m4_define([_PKG_TEXT], [Alternatively, you may set the environment variables $1[]_CFLAGS -and $1[]_LIBS to avoid the need to call pkg-config. -See the pkg-config man page for more details.]) - -if test $pkg_failed = yes; then - AC_MSG_RESULT([no]) - _PKG_SHORT_ERRORS_SUPPORTED - if test $_pkg_short_errors_supported = yes; then - $1[]_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "$2" 2>&1` - else - $1[]_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "$2" 2>&1` - fi - # Put the nasty error message in config.log where it belongs - echo "$$1[]_PKG_ERRORS" >&AS_MESSAGE_LOG_FD - - m4_default([$4], [AC_MSG_ERROR( -[Package requirements ($2) were not met: - -$$1_PKG_ERRORS - -Consider adjusting the PKG_CONFIG_PATH environment variable if you -installed software in a non-standard prefix. - -_PKG_TEXT])[]dnl - ]) -elif test $pkg_failed = untried; then - AC_MSG_RESULT([no]) - m4_default([$4], [AC_MSG_FAILURE( -[The pkg-config script could not be found or is too old. Make sure it -is in your PATH or set the PKG_CONFIG environment variable to the full -path to pkg-config. - -_PKG_TEXT - -To get pkg-config, see .])[]dnl - ]) -else - $1[]_CFLAGS=$pkg_cv_[]$1[]_CFLAGS - $1[]_LIBS=$pkg_cv_[]$1[]_LIBS - AC_MSG_RESULT([yes]) - $3 -fi[]dnl -])dnl PKG_CHECK_MODULES - - -dnl PKG_CHECK_MODULES_STATIC(VARIABLE-PREFIX, MODULES, [ACTION-IF-FOUND], -dnl [ACTION-IF-NOT-FOUND]) -dnl --------------------------------------------------------------------- -dnl Since: 0.29 -dnl -dnl Checks for existence of MODULES and gathers its build flags with -dnl static libraries enabled. Sets VARIABLE-PREFIX_CFLAGS from --cflags -dnl and VARIABLE-PREFIX_LIBS from --libs. -dnl -dnl Note that if there is a possibility the first call to -dnl PKG_CHECK_MODULES_STATIC might not happen, you should be sure to -dnl include an explicit call to PKG_PROG_PKG_CONFIG in your -dnl configure.ac. -AC_DEFUN([PKG_CHECK_MODULES_STATIC], -[AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl -_save_PKG_CONFIG=$PKG_CONFIG -PKG_CONFIG="$PKG_CONFIG --static" -PKG_CHECK_MODULES($@) -PKG_CONFIG=$_save_PKG_CONFIG[]dnl -])dnl PKG_CHECK_MODULES_STATIC - - -dnl PKG_INSTALLDIR([DIRECTORY]) -dnl ------------------------- -dnl Since: 0.27 -dnl -dnl Substitutes the variable pkgconfigdir as the location where a module -dnl should install pkg-config .pc files. By default the directory is -dnl $libdir/pkgconfig, but the default can be changed by passing -dnl DIRECTORY. The user can override through the --with-pkgconfigdir -dnl parameter. -AC_DEFUN([PKG_INSTALLDIR], -[m4_pushdef([pkg_default], [m4_default([$1], ['${libdir}/pkgconfig'])]) -m4_pushdef([pkg_description], - [pkg-config installation directory @<:@]pkg_default[@:>@]) -AC_ARG_WITH([pkgconfigdir], - [AS_HELP_STRING([--with-pkgconfigdir], pkg_description)],, - [with_pkgconfigdir=]pkg_default) -AC_SUBST([pkgconfigdir], [$with_pkgconfigdir]) -m4_popdef([pkg_default]) -m4_popdef([pkg_description]) -])dnl PKG_INSTALLDIR - - -dnl PKG_NOARCH_INSTALLDIR([DIRECTORY]) -dnl -------------------------------- -dnl Since: 0.27 -dnl -dnl Substitutes the variable noarch_pkgconfigdir as the location where a -dnl module should install arch-independent pkg-config .pc files. By -dnl default the directory is $datadir/pkgconfig, but the default can be -dnl changed by passing DIRECTORY. The user can override through the -dnl --with-noarch-pkgconfigdir parameter. -AC_DEFUN([PKG_NOARCH_INSTALLDIR], -[m4_pushdef([pkg_default], [m4_default([$1], ['${datadir}/pkgconfig'])]) -m4_pushdef([pkg_description], - [pkg-config arch-independent installation directory @<:@]pkg_default[@:>@]) -AC_ARG_WITH([noarch-pkgconfigdir], - [AS_HELP_STRING([--with-noarch-pkgconfigdir], pkg_description)],, - [with_noarch_pkgconfigdir=]pkg_default) -AC_SUBST([noarch_pkgconfigdir], [$with_noarch_pkgconfigdir]) -m4_popdef([pkg_default]) -m4_popdef([pkg_description]) -])dnl PKG_NOARCH_INSTALLDIR - - -dnl PKG_CHECK_VAR(VARIABLE, MODULE, CONFIG-VARIABLE, -dnl [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND]) -dnl ------------------------------------------- -dnl Since: 0.28 -dnl -dnl Retrieves the value of the pkg-config variable for the given module. -AC_DEFUN([PKG_CHECK_VAR], -[AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl -AC_ARG_VAR([$1], [value of $3 for $2, overriding pkg-config])dnl - -_PKG_CONFIG([$1], [variable="][$3]["], [$2]) -AS_VAR_COPY([$1], [pkg_cv_][$1]) - -AS_VAR_IF([$1], [""], [$5], [$4])dnl -])dnl PKG_CHECK_VAR - diff -Nru synthv1-0.8.6/ChangeLog synthv1-0.9.10+git20190929/ChangeLog --- synthv1-0.8.6/ChangeLog 2017-12-20 07:56:50.301842973 +0000 +++ synthv1-0.9.10+git20190929/ChangeLog 2019-09-28 23:00:43.000000000 +0000 @@ -4,6 +4,119 @@ ChangeLog +0.9.10 2019-09-24 An Early-Fall'19 Release. + +- Upstream packaging is now split on JACK standalone, + LV2 plugin and common core and UI packages, similar + to recent Debian practice. +- Added alternate yet non-official CMake build option. +- Fix HiDPI display screen effective support (Qt >= 5.6). +- All randomizers now compliant to the standard normal + distribution. +- Make sure compiler flags comply to c++11 as standard. + + +0.9.9 2019-07-18 A Summer'19 Release. + +- Randomization of current parameters is now available + through a new top-level push-button. +- Updated for the newer Qt5 development tools (>= 5.13). +- Per instance custom tuning (micro-tonal) option has + been added to the previously existing global settings + (cf. Help > Configure... > Tuning > Global, Instance). +- New DCF and LFO Enabled parameters. +- Configure updated to check for qtchooser availability. + + +0.9.8 2019-06-06 A Spring'19 Release. + +- Improved slew-rate to DCF Formant coefficient updates. +- Refactored the LFO Sync for correctness. +- Fixed all LFO Panning and Volume modulation, now being + correctly isolated on a per voice basis. +- Fixed DC offset on all main DCO wavetable oscillators. +- Fixed initial DCO and LFO wave shapes on LV2 plug-in UI. +- Minor update to Debian packaging control file. + + +0.9.7 2019-04-14 A Spring-Break'19 Release. + +- All audio input now get through without being processed + by any or whole effects stage anymore. +- Re-defined all JACK stand-alone client application UNIX + signal handling. + + +0.9.6 2019-03-18 Pre-LAC2019 Release Frenzy. + +- A gentlier shutdown for the JACK client standalone client. + + +0.9.5 2019-03-04 The End of Winter'19 release. + +- HiDPI display screen support (Qt >= 5.6). +- A fake/visual piano-keyboard widget is now being introduced + to the status bar. +- Avoid destructing the possibly shared QApplication instance + on LV2 plug-in UI clean-up. + + +0.9.4 2018-12-12 A Late Autumn'18 release. + +- Old deprecated Qt4 build support is no more. +- Normalized wavetable oscillator phasors. +- Added missing include to shut up some stricter + compilers from build failures. + + +0.9.3 2018-10-22 An Autumn'18 release. + +- For safety reasons, all processing is now suspended while + loading presets or program changes are issued. +- AppStream metadata updated to be the most compliant with + latest freedesktop.org specification and recommendation. +- SIGTERM (and SIGINT) signal handler added to close the JACK + stand-alone client applications properly. +- Make the GUI not to show initially on NSM. +- Make NSM state independent to session display name, keeping + backward compatibility for old sessions. +- Give some more slack to schedule/worker thread ring-buffer. + + +0.9.2 2018-07-24 A Summer'18 release. + +- Add LV2 UI Resize extension data support. +- Process MIDI Controlllers even though the channel filter + is on (DEF Channel is set anything but "Omni"). +- AppData/AppStream metadata is now settled under an all + permisssive license (FSFAP). + + +0.9.1 2018-06-26 An Early Summer'18 release. + +- Fixed for some g++ >= 8.1.1 warnings and quietness. +- Added LV2 UI X11 support option. +- Disable reference micro-tuning settings when a Scala + keyboard map override is in effect. +- Added "All files (*.*)" filter to every file requestor + dialog, wherever missing. + + +0.9.0 2018-03-07 The End of Winter'18 release. + +- Introducing Scala micro-tuning classes, borrowed, stirred + and refactored from original Nick Dowell's amsynth code, + all under the GPL umbrella, of course. +- An internal note-key/frequency indirection table is now in + place, as a baseline for any micro-tuning implementations. +- Whether to use native file browser/requester dialogs is + now an effective option when launching under NSM session + management (was once disabled initially). +- Trying to get CC14 MSB+LSB (course+fine) running status on, + no matter whether each pairing event are under 200ms apart. +- A little hardening on the configure (autoconf) macro side. + + 0.8.6 2017-12-20 The End of Autumn'17 release. - Sync option added to DCO wavetable oscillators, as for @@ -292,7 +405,7 @@ - A slight GUI behavior change: (re)writing existing names doesn't load the respective preset anymore (after ticket by Jiri Prochazka aka. Anchakor, thanks). -- Introducing LV2 External UI "rougue" support. +- Introducing LV2 External UI "rogue" support. - Moog-like 24dB/oct resonant filter slight modification. - Fixed JACK client fail/fake initialization. diff -Nru synthv1-0.8.6/CMakeLists.txt synthv1-0.9.10+git20190929/CMakeLists.txt --- synthv1-0.8.6/CMakeLists.txt 1970-01-01 00:00:00.000000000 +0000 +++ synthv1-0.9.10+git20190929/CMakeLists.txt 2019-09-28 23:00:43.000000000 +0000 @@ -0,0 +1,272 @@ +project(SYNTHV1) + +cmake_minimum_required(VERSION 3.1) + +set (VERSION "0.9.10") + +set (CONFIG_VERSION ${VERSION}) +execute_process ( + COMMAND git describe --tags --dirty --abbrev=6 + OUTPUT_VARIABLE GIT_DESCRIBE_OUTPUT + RESULT_VARIABLE GIT_DESCRIBE_RESULT + OUTPUT_STRIP_TRAILING_WHITESPACE) +if (GIT_DESCRIBE_RESULT EQUAL 0) + set (VERSION "${GIT_DESCRIBE_OUTPUT}") + string (REGEX REPLACE "^[^_]+" "" VERSION "${VERSION}") + string (REGEX REPLACE "^[_vV]+" "" VERSION "${VERSION}") + string (REGEX REPLACE "-g" "git." VERSION "${VERSION}") + string (REGEX REPLACE "[_|-]+" "." VERSION "${VERSION}") + execute_process ( + COMMAND git rev-parse --abbrev-ref HEAD + OUTPUT_VARIABLE GIT_REVPARSE_OUTPUT + RESULT_VARIABLE GIT_REVPARSE_RESULT + OUTPUT_STRIP_TRAILING_WHITESPACE) + if (GIT_REVPARSE_RESULT EQUAL 0 AND NOT GIT_REVPARSE_OUTPUT STREQUAL "master") + set (VERSION "${VERSION} [${GIT_REVPARSE_OUTPUT}]") + endif () +endif () + +set (PACKAGE_NAME "synthv1") +set (PACKAGE_VERSION "${VERSION}") +set (PACKAGE_BUGREPORT "rncbc@rncbc.org") +set (PACKAGE_STRING "${PACKAGE_NAME} ${PACKAGE_VERSION}") +set (PACKAGE_TARNAME "synthv1") + +set (CONFIG_BUILD_VERSION "${PACKAGE_VERSION}") + +if (CMAKE_BUILD_TYPE) + set (CONFIG_BUILD_TYPE ${CMAKE_BUILD_TYPE}) +else () + set (CONFIG_BUILD_TYPE "release") +endif () + +set (CONFIG_DEBUG 0) +if (CONFIG_BUILD_TYPE MATCHES "debug") + set (CONFIG_DEBUG 1) +endif () + +set (CONFIG_PREFIX "${CMAKE_INSTALL_PREFIX}") + +include (GNUInstallDirs) +set (CONFIG_BINDIR "${CONFIG_PREFIX}/${CMAKE_INSTALL_BINDIR}") +set (CONFIG_LIBDIR "${CONFIG_PREFIX}/${CMAKE_INSTALL_LIBDIR}") +set (CONFIG_DATADIR "${CONFIG_PREFIX}/${CMAKE_INSTALL_DATADIR}") +set (CONFIG_MANDIR "${CONFIG_PREFIX}/${CMAKE_INSTALL_MANDIR}") + + +# Enable JACK standalone build. +option (CONFIG_JACK "Enable JACK stand-alone build (default=yes)" 1) + +# Enable JACK session support. +option (CONFIG_JACK_SESSION "Enable JACK session support (default=yes)" 1) + +# Enable JACK MIDI support option. +option (CONFIG_JACK_MIDI "Enable JACK MIDI support (default=yes)" 1) + +# Enable ALSA MIDI support option. +option (CONFIG_ALSA_MIDI "Enable ALSA MIDI support (default=yes)" 1) + +# Enable LV2 plugin build. +option (CONFIG_LV2 "Enable LV2 plug-in build (default=yes)" 1) + +option (CONFIG_LV2_UI_X11 "Enable LV2 plug-in X11 UI support (default=yes)" 1) + +option (CONFIG_LV2_UI_EXTERNAL "Enable LV2 plug-in External UI support (default=yes)" 1) + +option (CONFIG_LV2_UI_IDLE "Enable LV2 UI Idle interface support (default=yes)" 1) + +option (CONFIG_LV2_UI_SHOW "Enable LV2 UI Show interface support (default=yes)" 1) + +option (CONFIG_LV2_UI_RESIZE "Enable LV2 UI Resize interface support (default=yes)" 1) + +option (CONFIG_LV2_PROGRAMS "Enable LV2 plug-in Programs support (default=yes)" 1) + +option (CONFIG_LV2_PATCH "Enable LV2 plug-in Patch support (default=yes)" 1) + +# Enable liblo availability. +option (CONFIG_LIBLO "Enable liblo interface (default=yes)" 1) + +# Enable NSM support. +option (CONFIG_NSM "Enable NSM support (default=yes)" 1) + + +# Fix for new CMAKE_REQUIRED_LIBRARIES policy. +if (POLICY CMP0075) + cmake_policy (SET CMP0075 NEW) +endif () + +# Check for Qt +find_package (Qt5 REQUIRED COMPONENTS Core Gui Widgets Xml) + +#find_package (Qt5LinguistTools) + +include (CheckIncludeFile) +include (CheckIncludeFiles) +include (CheckIncludeFileCXX) +include (CheckFunctionExists) +include (CheckLibraryExists) + +# Make sure we get some subtle optimizations out there... +add_compile_options (-ffast-math) + +# Checks for header files. +if (UNIX AND NOT APPLE) + check_include_files ("fcntl.h;unistd.h;signal.h" HAVE_SIGNAL_H) +endif () + + +# Check for LV2 headers. +if (CONFIG_LV2) + include_directories (${CMAKE_CURRENT_SOURCE_DIR}/src/lv2) +endif () + +# Find package modules +find_package (PkgConfig REQUIRED) + +# Check for JACK libraries. +if (CONFIG_JACK) + pkg_check_modules (JACK jack>=0.100.0) + set (CONFIG_JACK ${JACK_FOUND}) + if (CONFIG_JACK) + include_directories (${JACK_INCLUDE_DIRS}) + link_directories (${JACK_LIBRARY_DIRS}) + # link_libraries (${JACK_LIBRARIES}) + set (CMAKE_REQUIRED_LIBRARIES "${JACK_LIBRARIES};${CMAKE_REQUIRED_LIBRARIES}") + # Check for JACK MIDI headers availability. + if (CONFIG_JACK_MIDI) + check_include_file (jack/midiport.h CONFIG_JACK_MIDI) + endif () + # Check for JACK session headers availability. + if (CONFIG_JACK_SESSION) + check_include_file (jack/session.h CONFIG_JACK_SESSION) + endif () + # Check for JACK session event callback availability. + if (CONFIG_JACK_SESSION) + check_function_exists (jack_set_session_callback CONFIG_JACK_SESSION) + endif () + # Check for ALSA libraries. + if (CONFIG_ALSA_MIDI) + pkg_check_modules (ALSA alsa) + set (CONFIG_ALSA_MIDI ${ALSA_FOUND}) + if (CONFIG_ALSA_MIDI) + include_directories (${ALSA_INCLUDE_DIRS}) + link_directories (${ALSA_LIBRARY_DIRS}) + link_libraries (${ALSA_LIBRARIES}) + # set (CMAKE_REQUIRED_LIBRARIES "${ALSA_LIBRARIES};${CMAKE_REQUIRED_LIBRARIES}") + else () + message (WARNING "*** ALSA library not found.") + endif () + endif () + else () + message (WARNING "*** JACK library not found.") + endif () +endif () + +if (NOT CONFIG_JACK) + set (CONFIG_JACK_SESSION 0) + set (CONFIG_JACK_MIDI 0) + set (CONFIG_ALSA_MIDI 0) + set (CONFIG_LIBLO 0) + set (CONFIG_NSM 0) +endif () + +# Check for LIBLO libraries. +if (CONFIG_LIBLO) + pkg_check_modules (LIBLO liblo) + set (CONFIG_LIBLO ${LIBLO_FOUND}) + if (CONFIG_LIBLO) + include_directories (${LIBLO_INCLUDE_DIRS}) + link_directories (${LIBLO_LIBRARY_DIRS}) + link_libraries (${LIBLO_LIBRARIES}) + # set (CMAKE_REQUIRED_LIBRARIES "${LIBLO_LIBRARIES};${CMAKE_REQUIRED_LIBRARIES}") + else () + message (WARNING "*** LIBLO library not found.") + endif () +endif () + +# Check for LV2 support. +if (CONFIG_LV2) + pkg_check_modules (LV2 lv2) + set (CONFIG_LV2 ${LV2_FOUND}) + if (CONFIG_LV2) + include_directories (${LV2_INCLUDE_DIRS}) + link_directories (${LV2_LIBRARY_DIRS}) + link_libraries (${LV2_LIBRARIES}) + # set (CMAKE_REQUIRED_LIBRARIES "${LV2_LIBRARIES};${CMAKE_REQUIRED_LIBRARIES}") + # Check for LV2 Atom support. + check_include_file (lv2/lv2plug.in/ns/ext/atom/atom.h CONFIG_LV2_ATOM) + set (CONFIG_LV2_ATOM_FORGE_OBJECT ${CONFIG_LV2_ATOM}) + set (CONFIG_LV2_ATOM_FORGE_KEY ${CONFIG_LV2_ATOM}) + # Check for LV2 UI support. + check_include_file (lv2/lv2plug.in/ns/extensions/ui/ui.h CONFIG_LV2_UI) + if (NOT CONFIG_LV2_UI) + set (CONFIG_LV2_UI_X11 0) + set (CONFIG_LV2_UI_EXTERNAL 0) + set (CONFIG_LV2_UI_IDLE 0) + set (CONFIG_LV2_UI_SHOW 0) + set (CONFIG_LV2_UI_RESIZE 0) + endif () + endif () +endif () + +if (CONFIG_LV2) + include_directories (${CMAKE_CURRENT_SOURCE_DIR}/src/lv2) +else () + set (CONFIG_LV2_UI_X11 0) + set (CONFIG_LV2_UI_EXTERNAL 0) + set (CONFIG_LV2_UI_IDLE 0) + set (CONFIG_LV2_UI_SHOW 0) + set (CONFIG_LV2_UI_RESIZE 0) + set (CONFIG_LV2_PROGRAMS 0) + set (CONFIG_LV2_PATCH 0) +endif () + +if (CONFIG_LV2_UI_EXTERNAL) + check_include_file (lv2_external_ui.h, CONFIG_LV2_UI_EXTERNAL) +endif () + +if (CONFIG_LV2_PROGRAMS) + check_include_file (lv2_programs.h CONFIG_LV2_PROGRAMS) +endif () + +if (CONFIG_LV2_PATCH) + check_include_file (lv2/lv2plug.in/ns/ext/patch/patch.h CONFIG_LV2_PATCH) +endif () + + +add_subdirectory (src) + + +configure_file (synthv1.spec.in synthv1.spec IMMEDIATE @ONLY) + +install (FILES synthv1.1 DESTINATION ${CMAKE_INSTALL_MANDIR}/man1) +install (FILES synthv1.fr.1 DESTINATION ${CMAKE_INSTALL_MANDIR}/fr/man1 RENAME synthv1.1) + +# Configuration status +macro (SHOW_OPTION text value) + if (${value}) + message ("${text}: yes") + else () + message ("${text}: no") + endif () +endmacro () + + +message ("\n ${PACKAGE_NAME} ${PACKAGE_VERSION}") +message ("\n Build target . . . . . . . . . . . . . . . . . . .: ${CONFIG_BUILD_TYPE}\n") +show_option (" JACK stand-alone build . . . . . . . . . . . . . ." CONFIG_JACK) +show_option (" JACK session support . . . . . . . . . . . . . . ." CONFIG_JACK_SESSION) +show_option (" JACK MIDI support . . . . . . . . . . . . . . . ." CONFIG_JACK_MIDI) +show_option (" ALSA MIDI support . . . . . . . . . . . . . . . ." CONFIG_ALSA_MIDI) +show_option (" LV2 plug-in build . . . . . . . . . . . . . . . ." CONFIG_LV2) +show_option (" LV2 plug-in X11 UI support . . . . . . . . . . ." CONFIG_LV2_UI_X11) +show_option (" LV2 plug-in External UI support . . . . . . . . ." CONFIG_LV2_UI_EXTERNAL) +show_option (" LV2 plug-in UI Idle interface support . . . . . ." CONFIG_LV2_UI_IDLE) +show_option (" LV2 plug-in UI Show interface support . . . . . ." CONFIG_LV2_UI_SHOW) +show_option (" LV2 plug-in UI Resize interface support . . . . ." CONFIG_LV2_UI_RESIZE) +show_option (" LV2 plug-in Programs support . . . . . . . . . . ." CONFIG_LV2_PROGRAMS) +show_option (" LV2 plug-in Patch support . . . . . . . . . . . ." CONFIG_LV2_PATCH) +show_option (" OSC service support (liblo) . . . . . . . . . . ." CONFIG_LIBLO) +show_option (" NSM (Non Session Management) support . . . . . . ." CONFIG_NSM) +message ("\n Install prefix . . . . . . . . . . . . . . . . . .: ${CMAKE_INSTALL_PREFIX}") +message ("\nNow type 'make', followed by 'make install' as root.\n") diff -Nru synthv1-0.8.6/configure synthv1-0.9.10+git20190929/configure --- synthv1-0.8.6/configure 2017-12-20 07:57:10.722843297 +0000 +++ synthv1-0.9.10+git20190929/configure 1970-01-01 00:00:00.000000000 +0000 @@ -1,6999 +0,0 @@ -#! /bin/sh -# Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.69 for synthv1 0.8.6. -# -# Report bugs to . -# -# -# Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc. -# -# -# This configure script is free software; the Free Software Foundation -# gives unlimited permission to copy, distribute and modify it. -## -------------------- ## -## M4sh Initialization. ## -## -------------------- ## - -# Be more Bourne compatible -DUALCASE=1; export DUALCASE # for MKS sh -if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : - emulate sh - NULLCMD=: - # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which - # is contrary to our usage. Disable this feature. - alias -g '${1+"$@"}'='"$@"' - setopt NO_GLOB_SUBST -else - case `(set -o) 2>/dev/null` in #( - *posix*) : - set -o posix ;; #( - *) : - ;; -esac -fi - - -as_nl=' -' -export as_nl -# Printing a long string crashes Solaris 7 /usr/bin/printf. -as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' -as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo -as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo -# Prefer a ksh shell builtin over an external printf program on Solaris, -# but without wasting forks for bash or zsh. -if test -z "$BASH_VERSION$ZSH_VERSION" \ - && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then - as_echo='print -r --' - as_echo_n='print -rn --' -elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then - as_echo='printf %s\n' - as_echo_n='printf %s' -else - if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then - as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' - as_echo_n='/usr/ucb/echo -n' - else - as_echo_body='eval expr "X$1" : "X\\(.*\\)"' - as_echo_n_body='eval - arg=$1; - case $arg in #( - *"$as_nl"*) - expr "X$arg" : "X\\(.*\\)$as_nl"; - arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; - esac; - expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" - ' - export as_echo_n_body - as_echo_n='sh -c $as_echo_n_body as_echo' - fi - export as_echo_body - as_echo='sh -c $as_echo_body as_echo' -fi - -# The user is always right. -if test "${PATH_SEPARATOR+set}" != set; then - PATH_SEPARATOR=: - (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { - (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || - PATH_SEPARATOR=';' - } -fi - - -# IFS -# We need space, tab and new line, in precisely that order. Quoting is -# there to prevent editors from complaining about space-tab. -# (If _AS_PATH_WALK were called with IFS unset, it would disable word -# splitting by setting IFS to empty value.) -IFS=" "" $as_nl" - -# Find who we are. Look in the path if we contain no directory separator. -as_myself= -case $0 in #(( - *[\\/]* ) as_myself=$0 ;; - *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break - done -IFS=$as_save_IFS - - ;; -esac -# We did not find ourselves, most probably we were run as `sh COMMAND' -# in which case we are not to be found in the path. -if test "x$as_myself" = x; then - as_myself=$0 -fi -if test ! -f "$as_myself"; then - $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 - exit 1 -fi - -# Unset variables that we do not need and which cause bugs (e.g. in -# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" -# suppresses any "Segmentation fault" message there. '((' could -# trigger a bug in pdksh 5.2.14. -for as_var in BASH_ENV ENV MAIL MAILPATH -do eval test x\${$as_var+set} = xset \ - && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : -done -PS1='$ ' -PS2='> ' -PS4='+ ' - -# NLS nuisances. -LC_ALL=C -export LC_ALL -LANGUAGE=C -export LANGUAGE - -# CDPATH. -(unset CDPATH) >/dev/null 2>&1 && unset CDPATH - -# Use a proper internal environment variable to ensure we don't fall - # into an infinite loop, continuously re-executing ourselves. - if test x"${_as_can_reexec}" != xno && test "x$CONFIG_SHELL" != x; then - _as_can_reexec=no; export _as_can_reexec; - # We cannot yet assume a decent shell, so we have to provide a -# neutralization value for shells without unset; and this also -# works around shells that cannot unset nonexistent variables. -# Preserve -v and -x to the replacement shell. -BASH_ENV=/dev/null -ENV=/dev/null -(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV -case $- in # (((( - *v*x* | *x*v* ) as_opts=-vx ;; - *v* ) as_opts=-v ;; - *x* ) as_opts=-x ;; - * ) as_opts= ;; -esac -exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} -# Admittedly, this is quite paranoid, since all the known shells bail -# out after a failed `exec'. -$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 -as_fn_exit 255 - fi - # We don't want this to propagate to other subprocesses. - { _as_can_reexec=; unset _as_can_reexec;} -if test "x$CONFIG_SHELL" = x; then - as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then : - emulate sh - NULLCMD=: - # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which - # is contrary to our usage. Disable this feature. - alias -g '\${1+\"\$@\"}'='\"\$@\"' - setopt NO_GLOB_SUBST -else - case \`(set -o) 2>/dev/null\` in #( - *posix*) : - set -o posix ;; #( - *) : - ;; -esac -fi -" - as_required="as_fn_return () { (exit \$1); } -as_fn_success () { as_fn_return 0; } -as_fn_failure () { as_fn_return 1; } -as_fn_ret_success () { return 0; } -as_fn_ret_failure () { return 1; } - -exitcode=0 -as_fn_success || { exitcode=1; echo as_fn_success failed.; } -as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; } -as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; } -as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; } -if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then : - -else - exitcode=1; echo positional parameters were not saved. -fi -test x\$exitcode = x0 || exit 1 -test -x / || exit 1" - as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO - as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO - eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" && - test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1 -test \$(( 1 + 1 )) = 2 || exit 1" - if (eval "$as_required") 2>/dev/null; then : - as_have_required=yes -else - as_have_required=no -fi - if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then : - -else - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -as_found=false -for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - as_found=: - case $as_dir in #( - /*) - for as_base in sh bash ksh sh5; do - # Try only shells that exist, to save several forks. - as_shell=$as_dir/$as_base - if { test -f "$as_shell" || test -f "$as_shell.exe"; } && - { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then : - CONFIG_SHELL=$as_shell as_have_required=yes - if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then : - break 2 -fi -fi - done;; - esac - as_found=false -done -$as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } && - { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then : - CONFIG_SHELL=$SHELL as_have_required=yes -fi; } -IFS=$as_save_IFS - - - if test "x$CONFIG_SHELL" != x; then : - export CONFIG_SHELL - # We cannot yet assume a decent shell, so we have to provide a -# neutralization value for shells without unset; and this also -# works around shells that cannot unset nonexistent variables. -# Preserve -v and -x to the replacement shell. -BASH_ENV=/dev/null -ENV=/dev/null -(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV -case $- in # (((( - *v*x* | *x*v* ) as_opts=-vx ;; - *v* ) as_opts=-v ;; - *x* ) as_opts=-x ;; - * ) as_opts= ;; -esac -exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} -# Admittedly, this is quite paranoid, since all the known shells bail -# out after a failed `exec'. -$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 -exit 255 -fi - - if test x$as_have_required = xno; then : - $as_echo "$0: This script requires a shell more modern than all" - $as_echo "$0: the shells that I found on your system." - if test x${ZSH_VERSION+set} = xset ; then - $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should" - $as_echo "$0: be upgraded to zsh 4.3.4 or later." - else - $as_echo "$0: Please tell bug-autoconf@gnu.org and rncbc@rncbc.org -$0: about your system, including any error possibly output -$0: before this message. Then install a modern shell, or -$0: manually run the script under such a shell if you do -$0: have one." - fi - exit 1 -fi -fi -fi -SHELL=${CONFIG_SHELL-/bin/sh} -export SHELL -# Unset more variables known to interfere with behavior of common tools. -CLICOLOR_FORCE= GREP_OPTIONS= -unset CLICOLOR_FORCE GREP_OPTIONS - -## --------------------- ## -## M4sh Shell Functions. ## -## --------------------- ## -# as_fn_unset VAR -# --------------- -# Portably unset VAR. -as_fn_unset () -{ - { eval $1=; unset $1;} -} -as_unset=as_fn_unset - -# as_fn_set_status STATUS -# ----------------------- -# Set $? to STATUS, without forking. -as_fn_set_status () -{ - return $1 -} # as_fn_set_status - -# as_fn_exit STATUS -# ----------------- -# Exit the shell with STATUS, even in a "trap 0" or "set -e" context. -as_fn_exit () -{ - set +e - as_fn_set_status $1 - exit $1 -} # as_fn_exit - -# as_fn_mkdir_p -# ------------- -# Create "$as_dir" as a directory, including parents if necessary. -as_fn_mkdir_p () -{ - - case $as_dir in #( - -*) as_dir=./$as_dir;; - esac - test -d "$as_dir" || eval $as_mkdir_p || { - as_dirs= - while :; do - case $as_dir in #( - *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( - *) as_qdir=$as_dir;; - esac - as_dirs="'$as_qdir' $as_dirs" - as_dir=`$as_dirname -- "$as_dir" || -$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$as_dir" : 'X\(//\)[^/]' \| \ - X"$as_dir" : 'X\(//\)$' \| \ - X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X"$as_dir" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ - s//\1/ - q - } - /^X\(\/\/\)[^/].*/{ - s//\1/ - q - } - /^X\(\/\/\)$/{ - s//\1/ - q - } - /^X\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - test -d "$as_dir" && break - done - test -z "$as_dirs" || eval "mkdir $as_dirs" - } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" - - -} # as_fn_mkdir_p - -# as_fn_executable_p FILE -# ----------------------- -# Test if FILE is an executable regular file. -as_fn_executable_p () -{ - test -f "$1" && test -x "$1" -} # as_fn_executable_p -# as_fn_append VAR VALUE -# ---------------------- -# Append the text in VALUE to the end of the definition contained in VAR. Take -# advantage of any shell optimizations that allow amortized linear growth over -# repeated appends, instead of the typical quadratic growth present in naive -# implementations. -if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : - eval 'as_fn_append () - { - eval $1+=\$2 - }' -else - as_fn_append () - { - eval $1=\$$1\$2 - } -fi # as_fn_append - -# as_fn_arith ARG... -# ------------------ -# Perform arithmetic evaluation on the ARGs, and store the result in the -# global $as_val. Take advantage of shells that can avoid forks. The arguments -# must be portable across $(()) and expr. -if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : - eval 'as_fn_arith () - { - as_val=$(( $* )) - }' -else - as_fn_arith () - { - as_val=`expr "$@" || test $? -eq 1` - } -fi # as_fn_arith - - -# as_fn_error STATUS ERROR [LINENO LOG_FD] -# ---------------------------------------- -# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are -# provided, also output the error to LOG_FD, referencing LINENO. Then exit the -# script with STATUS, using 1 if that was 0. -as_fn_error () -{ - as_status=$1; test $as_status -eq 0 && as_status=1 - if test "$4"; then - as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 - fi - $as_echo "$as_me: error: $2" >&2 - as_fn_exit $as_status -} # as_fn_error - -if expr a : '\(a\)' >/dev/null 2>&1 && - test "X`expr 00001 : '.*\(...\)'`" = X001; then - as_expr=expr -else - as_expr=false -fi - -if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then - as_basename=basename -else - as_basename=false -fi - -if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then - as_dirname=dirname -else - as_dirname=false -fi - -as_me=`$as_basename -- "$0" || -$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ - X"$0" : 'X\(//\)$' \| \ - X"$0" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X/"$0" | - sed '/^.*\/\([^/][^/]*\)\/*$/{ - s//\1/ - q - } - /^X\/\(\/\/\)$/{ - s//\1/ - q - } - /^X\/\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - -# Avoid depending upon Character Ranges. -as_cr_letters='abcdefghijklmnopqrstuvwxyz' -as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' -as_cr_Letters=$as_cr_letters$as_cr_LETTERS -as_cr_digits='0123456789' -as_cr_alnum=$as_cr_Letters$as_cr_digits - - - as_lineno_1=$LINENO as_lineno_1a=$LINENO - as_lineno_2=$LINENO as_lineno_2a=$LINENO - eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" && - test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || { - # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-) - sed -n ' - p - /[$]LINENO/= - ' <$as_myself | - sed ' - s/[$]LINENO.*/&-/ - t lineno - b - :lineno - N - :loop - s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ - t loop - s/-\n.*// - ' >$as_me.lineno && - chmod +x "$as_me.lineno" || - { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; } - - # If we had to re-execute with $CONFIG_SHELL, we're ensured to have - # already done that, so ensure we don't try to do so again and fall - # in an infinite loop. This has already happened in practice. - _as_can_reexec=no; export _as_can_reexec - # Don't try to exec as it changes $[0], causing all sort of problems - # (the dirname of $[0] is not the place where we might find the - # original and so on. Autoconf is especially sensitive to this). - . "./$as_me.lineno" - # Exit status is that of the last command. - exit -} - -ECHO_C= ECHO_N= ECHO_T= -case `echo -n x` in #((((( --n*) - case `echo 'xy\c'` in - *c*) ECHO_T=' ';; # ECHO_T is single tab character. - xy) ECHO_C='\c';; - *) echo `echo ksh88 bug on AIX 6.1` > /dev/null - ECHO_T=' ';; - esac;; -*) - ECHO_N='-n';; -esac - -rm -f conf$$ conf$$.exe conf$$.file -if test -d conf$$.dir; then - rm -f conf$$.dir/conf$$.file -else - rm -f conf$$.dir - mkdir conf$$.dir 2>/dev/null -fi -if (echo >conf$$.file) 2>/dev/null; then - if ln -s conf$$.file conf$$ 2>/dev/null; then - as_ln_s='ln -s' - # ... but there are two gotchas: - # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. - # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. - # In both cases, we have to default to `cp -pR'. - ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || - as_ln_s='cp -pR' - elif ln conf$$.file conf$$ 2>/dev/null; then - as_ln_s=ln - else - as_ln_s='cp -pR' - fi -else - as_ln_s='cp -pR' -fi -rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file -rmdir conf$$.dir 2>/dev/null - -if mkdir -p . 2>/dev/null; then - as_mkdir_p='mkdir -p "$as_dir"' -else - test -d ./-p && rmdir ./-p - as_mkdir_p=false -fi - -as_test_x='test -x' -as_executable_p=as_fn_executable_p - -# Sed expression to map a string onto a valid CPP name. -as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" - -# Sed expression to map a string onto a valid variable name. -as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" - - -test -n "$DJDIR" || exec 7<&0 &1 - -# Name of the host. -# hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status, -# so uname gets run too. -ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` - -# -# Initializations. -# -ac_default_prefix=/usr/local -ac_clean_files= -ac_config_libobj_dir=. -LIBOBJS= -cross_compiling=no -subdirs= -MFLAGS= -MAKEFLAGS= - -# Identity of this package. -PACKAGE_NAME='synthv1' -PACKAGE_TARNAME='synthv1' -PACKAGE_VERSION='0.8.6' -PACKAGE_STRING='synthv1 0.8.6' -PACKAGE_BUGREPORT='rncbc@rncbc.org' -PACKAGE_URL='' - -ac_unique_file="src/synthv1.cpp" -ac_default_prefix=/usr/local -# Factoring default headers for most tests. -ac_includes_default="\ -#include -#ifdef HAVE_SYS_TYPES_H -# include -#endif -#ifdef HAVE_SYS_STAT_H -# include -#endif -#ifdef STDC_HEADERS -# include -# include -#else -# ifdef HAVE_STDLIB_H -# include -# endif -#endif -#ifdef HAVE_STRING_H -# if !defined STDC_HEADERS && defined HAVE_MEMORY_H -# include -# endif -# include -#endif -#ifdef HAVE_STRINGS_H -# include -#endif -#ifdef HAVE_INTTYPES_H -# include -#endif -#ifdef HAVE_STDINT_H -# include -#endif -#ifdef HAVE_UNISTD_H -# include -#endif" - -ac_subst_vars='LTLIBOBJS -LIBOBJS -ac_clean_targets -ac_uninstall_targets -ac_install_targets -ac_all_targets -ac_lv2_libs -ac_lv2_incpath -ac_lv2_ldflags -ac_lv2_cflags -ac_jack_libs -ac_jack_incpath -ac_jack_ldflags -ac_jack_cflags -ac_libs -ac_incpath -ac_ldflags -ac_cflags -EGREP -GREP -LIBLO_LIBS -LIBLO_CFLAGS -ALSA_LIBS -ALSA_CFLAGS -JACK_LIBS -JACK_CFLAGS -ac_lrelease -ac_lupdate -ac_uic -ac_moc -ac_cv_qmake -ac_qmake -PKG_CONFIG_LIBDIR -PKG_CONFIG_PATH -PKG_CONFIG -CXXCPP -ac_ct_CXX -CXXFLAGS -CXX -CPP -OBJEXT -EXEEXT -ac_ct_CC -CPPFLAGS -LDFLAGS -CFLAGS -CC -ac_debug -ac_mandir -ac_datadir -ac_libdir -ac_bindir -ac_prefix -ac_version -target_alias -host_alias -build_alias -LIBS -ECHO_T -ECHO_N -ECHO_C -DEFS -mandir -localedir -libdir -psdir -pdfdir -dvidir -htmldir -infodir -docdir -oldincludedir -includedir -localstatedir -sharedstatedir -sysconfdir -datadir -datarootdir -libexecdir -sbindir -bindir -program_transform_name -prefix -exec_prefix -PACKAGE_URL -PACKAGE_BUGREPORT -PACKAGE_STRING -PACKAGE_VERSION -PACKAGE_TARNAME -PACKAGE_NAME -PATH_SEPARATOR -SHELL' -ac_subst_files='' -ac_user_opts=' -enable_option_checking -enable_debug -enable_jack -enable_jack_session -enable_jack_midi -enable_alsa_midi -enable_lv2 -enable_lv2_external_ui -enable_lv2_ui_idle -enable_lv2_ui_show -enable_lv2_programs -enable_liblo -enable_nsm -enable_qt4 -with_qt4 -with_qt5 -with_alsa -with_jack -with_lv2 -with_liblo -' - ac_precious_vars='build_alias -host_alias -target_alias -CC -CFLAGS -LDFLAGS -LIBS -CPPFLAGS -CPP -CXX -CXXFLAGS -CCC -CXXCPP -PKG_CONFIG -PKG_CONFIG_PATH -PKG_CONFIG_LIBDIR -JACK_CFLAGS -JACK_LIBS -ALSA_CFLAGS -ALSA_LIBS -LIBLO_CFLAGS -LIBLO_LIBS' - - -# Initialize some variables set by options. -ac_init_help= -ac_init_version=false -ac_unrecognized_opts= -ac_unrecognized_sep= -# The variables have the same names as the options, with -# dashes changed to underlines. -cache_file=/dev/null -exec_prefix=NONE -no_create= -no_recursion= -prefix=NONE -program_prefix=NONE -program_suffix=NONE -program_transform_name=s,x,x, -silent= -site= -srcdir= -verbose= -x_includes=NONE -x_libraries=NONE - -# Installation directory options. -# These are left unexpanded so users can "make install exec_prefix=/foo" -# and all the variables that are supposed to be based on exec_prefix -# by default will actually change. -# Use braces instead of parens because sh, perl, etc. also accept them. -# (The list follows the same order as the GNU Coding Standards.) -bindir='${exec_prefix}/bin' -sbindir='${exec_prefix}/sbin' -libexecdir='${exec_prefix}/libexec' -datarootdir='${prefix}/share' -datadir='${datarootdir}' -sysconfdir='${prefix}/etc' -sharedstatedir='${prefix}/com' -localstatedir='${prefix}/var' -includedir='${prefix}/include' -oldincludedir='/usr/include' -docdir='${datarootdir}/doc/${PACKAGE_TARNAME}' -infodir='${datarootdir}/info' -htmldir='${docdir}' -dvidir='${docdir}' -pdfdir='${docdir}' -psdir='${docdir}' -libdir='${exec_prefix}/lib' -localedir='${datarootdir}/locale' -mandir='${datarootdir}/man' - -ac_prev= -ac_dashdash= -for ac_option -do - # If the previous option needs an argument, assign it. - if test -n "$ac_prev"; then - eval $ac_prev=\$ac_option - ac_prev= - continue - fi - - case $ac_option in - *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; - *=) ac_optarg= ;; - *) ac_optarg=yes ;; - esac - - # Accept the important Cygnus configure options, so we can diagnose typos. - - case $ac_dashdash$ac_option in - --) - ac_dashdash=yes ;; - - -bindir | --bindir | --bindi | --bind | --bin | --bi) - ac_prev=bindir ;; - -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) - bindir=$ac_optarg ;; - - -build | --build | --buil | --bui | --bu) - ac_prev=build_alias ;; - -build=* | --build=* | --buil=* | --bui=* | --bu=*) - build_alias=$ac_optarg ;; - - -cache-file | --cache-file | --cache-fil | --cache-fi \ - | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) - ac_prev=cache_file ;; - -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ - | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) - cache_file=$ac_optarg ;; - - --config-cache | -C) - cache_file=config.cache ;; - - -datadir | --datadir | --datadi | --datad) - ac_prev=datadir ;; - -datadir=* | --datadir=* | --datadi=* | --datad=*) - datadir=$ac_optarg ;; - - -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \ - | --dataroo | --dataro | --datar) - ac_prev=datarootdir ;; - -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \ - | --dataroot=* | --dataroo=* | --dataro=* | --datar=*) - datarootdir=$ac_optarg ;; - - -disable-* | --disable-*) - ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'` - # Reject names that are not valid shell variable names. - expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && - as_fn_error $? "invalid feature name: $ac_useropt" - ac_useropt_orig=$ac_useropt - ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` - case $ac_user_opts in - *" -"enable_$ac_useropt" -"*) ;; - *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig" - ac_unrecognized_sep=', ';; - esac - eval enable_$ac_useropt=no ;; - - -docdir | --docdir | --docdi | --doc | --do) - ac_prev=docdir ;; - -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*) - docdir=$ac_optarg ;; - - -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv) - ac_prev=dvidir ;; - -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*) - dvidir=$ac_optarg ;; - - -enable-* | --enable-*) - ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` - # Reject names that are not valid shell variable names. - expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && - as_fn_error $? "invalid feature name: $ac_useropt" - ac_useropt_orig=$ac_useropt - ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` - case $ac_user_opts in - *" -"enable_$ac_useropt" -"*) ;; - *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig" - ac_unrecognized_sep=', ';; - esac - eval enable_$ac_useropt=\$ac_optarg ;; - - -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ - | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ - | --exec | --exe | --ex) - ac_prev=exec_prefix ;; - -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ - | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ - | --exec=* | --exe=* | --ex=*) - exec_prefix=$ac_optarg ;; - - -gas | --gas | --ga | --g) - # Obsolete; use --with-gas. - with_gas=yes ;; - - -help | --help | --hel | --he | -h) - ac_init_help=long ;; - -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) - ac_init_help=recursive ;; - -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) - ac_init_help=short ;; - - -host | --host | --hos | --ho) - ac_prev=host_alias ;; - -host=* | --host=* | --hos=* | --ho=*) - host_alias=$ac_optarg ;; - - -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht) - ac_prev=htmldir ;; - -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \ - | --ht=*) - htmldir=$ac_optarg ;; - - -includedir | --includedir | --includedi | --included | --include \ - | --includ | --inclu | --incl | --inc) - ac_prev=includedir ;; - -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ - | --includ=* | --inclu=* | --incl=* | --inc=*) - includedir=$ac_optarg ;; - - -infodir | --infodir | --infodi | --infod | --info | --inf) - ac_prev=infodir ;; - -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) - infodir=$ac_optarg ;; - - -libdir | --libdir | --libdi | --libd) - ac_prev=libdir ;; - -libdir=* | --libdir=* | --libdi=* | --libd=*) - libdir=$ac_optarg ;; - - -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ - | --libexe | --libex | --libe) - ac_prev=libexecdir ;; - -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ - | --libexe=* | --libex=* | --libe=*) - libexecdir=$ac_optarg ;; - - -localedir | --localedir | --localedi | --localed | --locale) - ac_prev=localedir ;; - -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*) - localedir=$ac_optarg ;; - - -localstatedir | --localstatedir | --localstatedi | --localstated \ - | --localstate | --localstat | --localsta | --localst | --locals) - ac_prev=localstatedir ;; - -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ - | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*) - localstatedir=$ac_optarg ;; - - -mandir | --mandir | --mandi | --mand | --man | --ma | --m) - ac_prev=mandir ;; - -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) - mandir=$ac_optarg ;; - - -nfp | --nfp | --nf) - # Obsolete; use --without-fp. - with_fp=no ;; - - -no-create | --no-create | --no-creat | --no-crea | --no-cre \ - | --no-cr | --no-c | -n) - no_create=yes ;; - - -no-recursion | --no-recursion | --no-recursio | --no-recursi \ - | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) - no_recursion=yes ;; - - -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ - | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ - | --oldin | --oldi | --old | --ol | --o) - ac_prev=oldincludedir ;; - -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ - | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ - | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) - oldincludedir=$ac_optarg ;; - - -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) - ac_prev=prefix ;; - -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) - prefix=$ac_optarg ;; - - -program-prefix | --program-prefix | --program-prefi | --program-pref \ - | --program-pre | --program-pr | --program-p) - ac_prev=program_prefix ;; - -program-prefix=* | --program-prefix=* | --program-prefi=* \ - | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) - program_prefix=$ac_optarg ;; - - -program-suffix | --program-suffix | --program-suffi | --program-suff \ - | --program-suf | --program-su | --program-s) - ac_prev=program_suffix ;; - -program-suffix=* | --program-suffix=* | --program-suffi=* \ - | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) - program_suffix=$ac_optarg ;; - - -program-transform-name | --program-transform-name \ - | --program-transform-nam | --program-transform-na \ - | --program-transform-n | --program-transform- \ - | --program-transform | --program-transfor \ - | --program-transfo | --program-transf \ - | --program-trans | --program-tran \ - | --progr-tra | --program-tr | --program-t) - ac_prev=program_transform_name ;; - -program-transform-name=* | --program-transform-name=* \ - | --program-transform-nam=* | --program-transform-na=* \ - | --program-transform-n=* | --program-transform-=* \ - | --program-transform=* | --program-transfor=* \ - | --program-transfo=* | --program-transf=* \ - | --program-trans=* | --program-tran=* \ - | --progr-tra=* | --program-tr=* | --program-t=*) - program_transform_name=$ac_optarg ;; - - -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd) - ac_prev=pdfdir ;; - -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*) - pdfdir=$ac_optarg ;; - - -psdir | --psdir | --psdi | --psd | --ps) - ac_prev=psdir ;; - -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*) - psdir=$ac_optarg ;; - - -q | -quiet | --quiet | --quie | --qui | --qu | --q \ - | -silent | --silent | --silen | --sile | --sil) - silent=yes ;; - - -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) - ac_prev=sbindir ;; - -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ - | --sbi=* | --sb=*) - sbindir=$ac_optarg ;; - - -sharedstatedir | --sharedstatedir | --sharedstatedi \ - | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ - | --sharedst | --shareds | --shared | --share | --shar \ - | --sha | --sh) - ac_prev=sharedstatedir ;; - -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ - | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ - | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ - | --sha=* | --sh=*) - sharedstatedir=$ac_optarg ;; - - -site | --site | --sit) - ac_prev=site ;; - -site=* | --site=* | --sit=*) - site=$ac_optarg ;; - - -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) - ac_prev=srcdir ;; - -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) - srcdir=$ac_optarg ;; - - -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ - | --syscon | --sysco | --sysc | --sys | --sy) - ac_prev=sysconfdir ;; - -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ - | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) - sysconfdir=$ac_optarg ;; - - -target | --target | --targe | --targ | --tar | --ta | --t) - ac_prev=target_alias ;; - -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) - target_alias=$ac_optarg ;; - - -v | -verbose | --verbose | --verbos | --verbo | --verb) - verbose=yes ;; - - -version | --version | --versio | --versi | --vers | -V) - ac_init_version=: ;; - - -with-* | --with-*) - ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` - # Reject names that are not valid shell variable names. - expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && - as_fn_error $? "invalid package name: $ac_useropt" - ac_useropt_orig=$ac_useropt - ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` - case $ac_user_opts in - *" -"with_$ac_useropt" -"*) ;; - *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig" - ac_unrecognized_sep=', ';; - esac - eval with_$ac_useropt=\$ac_optarg ;; - - -without-* | --without-*) - ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'` - # Reject names that are not valid shell variable names. - expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && - as_fn_error $? "invalid package name: $ac_useropt" - ac_useropt_orig=$ac_useropt - ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` - case $ac_user_opts in - *" -"with_$ac_useropt" -"*) ;; - *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig" - ac_unrecognized_sep=', ';; - esac - eval with_$ac_useropt=no ;; - - --x) - # Obsolete; use --with-x. - with_x=yes ;; - - -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ - | --x-incl | --x-inc | --x-in | --x-i) - ac_prev=x_includes ;; - -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ - | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) - x_includes=$ac_optarg ;; - - -x-libraries | --x-libraries | --x-librarie | --x-librari \ - | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) - ac_prev=x_libraries ;; - -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ - | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) - x_libraries=$ac_optarg ;; - - -*) as_fn_error $? "unrecognized option: \`$ac_option' -Try \`$0 --help' for more information" - ;; - - *=*) - ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` - # Reject names that are not valid shell variable names. - case $ac_envvar in #( - '' | [0-9]* | *[!_$as_cr_alnum]* ) - as_fn_error $? "invalid variable name: \`$ac_envvar'" ;; - esac - eval $ac_envvar=\$ac_optarg - export $ac_envvar ;; - - *) - # FIXME: should be removed in autoconf 3.0. - $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2 - expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && - $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2 - : "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}" - ;; - - esac -done - -if test -n "$ac_prev"; then - ac_option=--`echo $ac_prev | sed 's/_/-/g'` - as_fn_error $? "missing argument to $ac_option" -fi - -if test -n "$ac_unrecognized_opts"; then - case $enable_option_checking in - no) ;; - fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;; - *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; - esac -fi - -# Check all directory arguments for consistency. -for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ - datadir sysconfdir sharedstatedir localstatedir includedir \ - oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ - libdir localedir mandir -do - eval ac_val=\$$ac_var - # Remove trailing slashes. - case $ac_val in - */ ) - ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'` - eval $ac_var=\$ac_val;; - esac - # Be sure to have absolute directory names. - case $ac_val in - [\\/$]* | ?:[\\/]* ) continue;; - NONE | '' ) case $ac_var in *prefix ) continue;; esac;; - esac - as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val" -done - -# There might be people who depend on the old broken behavior: `$host' -# used to hold the argument of --host etc. -# FIXME: To remove some day. -build=$build_alias -host=$host_alias -target=$target_alias - -# FIXME: To remove some day. -if test "x$host_alias" != x; then - if test "x$build_alias" = x; then - cross_compiling=maybe - elif test "x$build_alias" != "x$host_alias"; then - cross_compiling=yes - fi -fi - -ac_tool_prefix= -test -n "$host_alias" && ac_tool_prefix=$host_alias- - -test "$silent" = yes && exec 6>/dev/null - - -ac_pwd=`pwd` && test -n "$ac_pwd" && -ac_ls_di=`ls -di .` && -ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` || - as_fn_error $? "working directory cannot be determined" -test "X$ac_ls_di" = "X$ac_pwd_ls_di" || - as_fn_error $? "pwd does not report name of working directory" - - -# Find the source files, if location was not specified. -if test -z "$srcdir"; then - ac_srcdir_defaulted=yes - # Try the directory containing this script, then the parent directory. - ac_confdir=`$as_dirname -- "$as_myself" || -$as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$as_myself" : 'X\(//\)[^/]' \| \ - X"$as_myself" : 'X\(//\)$' \| \ - X"$as_myself" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X"$as_myself" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ - s//\1/ - q - } - /^X\(\/\/\)[^/].*/{ - s//\1/ - q - } - /^X\(\/\/\)$/{ - s//\1/ - q - } - /^X\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - srcdir=$ac_confdir - if test ! -r "$srcdir/$ac_unique_file"; then - srcdir=.. - fi -else - ac_srcdir_defaulted=no -fi -if test ! -r "$srcdir/$ac_unique_file"; then - test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." - as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir" -fi -ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" -ac_abs_confdir=`( - cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg" - pwd)` -# When building in place, set srcdir=. -if test "$ac_abs_confdir" = "$ac_pwd"; then - srcdir=. -fi -# Remove unnecessary trailing slashes from srcdir. -# Double slashes in file names in object file debugging info -# mess up M-x gdb in Emacs. -case $srcdir in -*/) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;; -esac -for ac_var in $ac_precious_vars; do - eval ac_env_${ac_var}_set=\${${ac_var}+set} - eval ac_env_${ac_var}_value=\$${ac_var} - eval ac_cv_env_${ac_var}_set=\${${ac_var}+set} - eval ac_cv_env_${ac_var}_value=\$${ac_var} -done - -# -# Report the --help message. -# -if test "$ac_init_help" = "long"; then - # Omit some internal or obsolete options to make the list less imposing. - # This message is too long to be a string in the A/UX 3.1 sh. - cat <<_ACEOF -\`configure' configures synthv1 0.8.6 to adapt to many kinds of systems. - -Usage: $0 [OPTION]... [VAR=VALUE]... - -To assign environment variables (e.g., CC, CFLAGS...), specify them as -VAR=VALUE. See below for descriptions of some of the useful variables. - -Defaults for the options are specified in brackets. - -Configuration: - -h, --help display this help and exit - --help=short display options specific to this package - --help=recursive display the short help of all the included packages - -V, --version display version information and exit - -q, --quiet, --silent do not print \`checking ...' messages - --cache-file=FILE cache test results in FILE [disabled] - -C, --config-cache alias for \`--cache-file=config.cache' - -n, --no-create do not create output files - --srcdir=DIR find the sources in DIR [configure dir or \`..'] - -Installation directories: - --prefix=PREFIX install architecture-independent files in PREFIX - [$ac_default_prefix] - --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX - [PREFIX] - -By default, \`make install' will install all the files in -\`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify -an installation prefix other than \`$ac_default_prefix' using \`--prefix', -for instance \`--prefix=\$HOME'. - -For better control, use the options below. - -Fine tuning of the installation directories: - --bindir=DIR user executables [EPREFIX/bin] - --sbindir=DIR system admin executables [EPREFIX/sbin] - --libexecdir=DIR program executables [EPREFIX/libexec] - --sysconfdir=DIR read-only single-machine data [PREFIX/etc] - --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] - --localstatedir=DIR modifiable single-machine data [PREFIX/var] - --libdir=DIR object code libraries [EPREFIX/lib] - --includedir=DIR C header files [PREFIX/include] - --oldincludedir=DIR C header files for non-gcc [/usr/include] - --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] - --datadir=DIR read-only architecture-independent data [DATAROOTDIR] - --infodir=DIR info documentation [DATAROOTDIR/info] - --localedir=DIR locale-dependent data [DATAROOTDIR/locale] - --mandir=DIR man documentation [DATAROOTDIR/man] - --docdir=DIR documentation root [DATAROOTDIR/doc/synthv1] - --htmldir=DIR html documentation [DOCDIR] - --dvidir=DIR dvi documentation [DOCDIR] - --pdfdir=DIR pdf documentation [DOCDIR] - --psdir=DIR ps documentation [DOCDIR] -_ACEOF - - cat <<\_ACEOF -_ACEOF -fi - -if test -n "$ac_init_help"; then - case $ac_init_help in - short | recursive ) echo "Configuration of synthv1 0.8.6:";; - esac - cat <<\_ACEOF - -Optional Features: - --disable-option-checking ignore unrecognized --enable/--with options - --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) - --enable-FEATURE[=ARG] include FEATURE [ARG=yes] - --enable-debug enable debugging (default=no) - --enable-jack enable JACK stand-alone build (default=yes) - --enable-jack-session enable JACK session support (default=yes) - --enable-jack-midi enable JACK MIDI support (default=yes) - --enable-alsa-midi enable ALSA MIDI support (default=yes) - --enable-lv2 enable LV2 plug-in build (default=yes) - --enable-lv2-external-ui - enable LV2 plug-in External UI support (default=yes) - --enable-lv2-ui-idle enable LV2 UI Idle interface support (default=yes) - --enable-lv2-ui-show enable LV2 UI Show interface support (default=yes) - --enable-lv2-programs enable LV2 plug-in Programs support (default=yes) - --enable-liblo enable liblo interface (default=yes) - --enable-nsm enable NSM support (default=yes) - --enable-qt4 enable Qt4 build (default=no) - -Optional Packages: - --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] - --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) - --with-qt4=PATH use alternate Qt4 install path - --with-qt5=PATH use alternate Qt5 install path - --with-alsa=PATH use alternate ALSA install path - --with-jack=PATH use alternate JACK install path - --with-lv2=PATH use alternate LV2 install path - --with-liblo=PATH use alternate liblo path - -Some influential environment variables: - CC C compiler command - CFLAGS C compiler flags - LDFLAGS linker flags, e.g. -L if you have libraries in a - nonstandard directory - LIBS libraries to pass to the linker, e.g. -l - CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I if - you have headers in a nonstandard directory - CPP C preprocessor - CXX C++ compiler command - CXXFLAGS C++ compiler flags - CXXCPP C++ preprocessor - PKG_CONFIG path to pkg-config utility - PKG_CONFIG_PATH - directories to add to pkg-config's search path - PKG_CONFIG_LIBDIR - path overriding pkg-config's built-in search path - JACK_CFLAGS C compiler flags for JACK, overriding pkg-config - JACK_LIBS linker flags for JACK, overriding pkg-config - ALSA_CFLAGS C compiler flags for ALSA, overriding pkg-config - ALSA_LIBS linker flags for ALSA, overriding pkg-config - LIBLO_CFLAGS - C compiler flags for LIBLO, overriding pkg-config - LIBLO_LIBS linker flags for LIBLO, overriding pkg-config - -Use these variables to override the choices made by `configure' or to help -it to find libraries and programs with nonstandard names/locations. - -Report bugs to . -_ACEOF -ac_status=$? -fi - -if test "$ac_init_help" = "recursive"; then - # If there are subdirs, report their specific --help. - for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue - test -d "$ac_dir" || - { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } || - continue - ac_builddir=. - -case "$ac_dir" in -.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; -*) - ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` - # A ".." for each directory in $ac_dir_suffix. - ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` - case $ac_top_builddir_sub in - "") ac_top_builddir_sub=. ac_top_build_prefix= ;; - *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; - esac ;; -esac -ac_abs_top_builddir=$ac_pwd -ac_abs_builddir=$ac_pwd$ac_dir_suffix -# for backward compatibility: -ac_top_builddir=$ac_top_build_prefix - -case $srcdir in - .) # We are building in place. - ac_srcdir=. - ac_top_srcdir=$ac_top_builddir_sub - ac_abs_top_srcdir=$ac_pwd ;; - [\\/]* | ?:[\\/]* ) # Absolute name. - ac_srcdir=$srcdir$ac_dir_suffix; - ac_top_srcdir=$srcdir - ac_abs_top_srcdir=$srcdir ;; - *) # Relative name. - ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix - ac_top_srcdir=$ac_top_build_prefix$srcdir - ac_abs_top_srcdir=$ac_pwd/$srcdir ;; -esac -ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix - - cd "$ac_dir" || { ac_status=$?; continue; } - # Check for guested configure. - if test -f "$ac_srcdir/configure.gnu"; then - echo && - $SHELL "$ac_srcdir/configure.gnu" --help=recursive - elif test -f "$ac_srcdir/configure"; then - echo && - $SHELL "$ac_srcdir/configure" --help=recursive - else - $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 - fi || ac_status=$? - cd "$ac_pwd" || { ac_status=$?; break; } - done -fi - -test -n "$ac_init_help" && exit $ac_status -if $ac_init_version; then - cat <<\_ACEOF -synthv1 configure 0.8.6 -generated by GNU Autoconf 2.69 - -Copyright (C) 2012 Free Software Foundation, Inc. -This configure script is free software; the Free Software Foundation -gives unlimited permission to copy, distribute and modify it. -_ACEOF - exit -fi - -## ------------------------ ## -## Autoconf initialization. ## -## ------------------------ ## - -# ac_fn_c_try_compile LINENO -# -------------------------- -# Try to compile conftest.$ac_ext, and return whether this succeeded. -ac_fn_c_try_compile () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - rm -f conftest.$ac_objext - if { { ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_compile") 2>conftest.err - ac_status=$? - if test -s conftest.err; then - grep -v '^ *+' conftest.err >conftest.er1 - cat conftest.er1 >&5 - mv -f conftest.er1 conftest.err - fi - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then : - ac_retval=0 -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_retval=1 -fi - eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno - as_fn_set_status $ac_retval - -} # ac_fn_c_try_compile - -# ac_fn_c_try_cpp LINENO -# ---------------------- -# Try to preprocess conftest.$ac_ext, and return whether this succeeded. -ac_fn_c_try_cpp () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - if { { ac_try="$ac_cpp conftest.$ac_ext" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err - ac_status=$? - if test -s conftest.err; then - grep -v '^ *+' conftest.err >conftest.er1 - cat conftest.er1 >&5 - mv -f conftest.er1 conftest.err - fi - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } > conftest.i && { - test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || - test ! -s conftest.err - }; then : - ac_retval=0 -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_retval=1 -fi - eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno - as_fn_set_status $ac_retval - -} # ac_fn_c_try_cpp - -# ac_fn_cxx_try_compile LINENO -# ---------------------------- -# Try to compile conftest.$ac_ext, and return whether this succeeded. -ac_fn_cxx_try_compile () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - rm -f conftest.$ac_objext - if { { ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_compile") 2>conftest.err - ac_status=$? - if test -s conftest.err; then - grep -v '^ *+' conftest.err >conftest.er1 - cat conftest.er1 >&5 - mv -f conftest.er1 conftest.err - fi - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } && { - test -z "$ac_cxx_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then : - ac_retval=0 -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_retval=1 -fi - eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno - as_fn_set_status $ac_retval - -} # ac_fn_cxx_try_compile - -# ac_fn_cxx_try_cpp LINENO -# ------------------------ -# Try to preprocess conftest.$ac_ext, and return whether this succeeded. -ac_fn_cxx_try_cpp () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - if { { ac_try="$ac_cpp conftest.$ac_ext" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err - ac_status=$? - if test -s conftest.err; then - grep -v '^ *+' conftest.err >conftest.er1 - cat conftest.er1 >&5 - mv -f conftest.er1 conftest.err - fi - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } > conftest.i && { - test -z "$ac_cxx_preproc_warn_flag$ac_cxx_werror_flag" || - test ! -s conftest.err - }; then : - ac_retval=0 -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_retval=1 -fi - eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno - as_fn_set_status $ac_retval - -} # ac_fn_cxx_try_cpp - -# ac_fn_cxx_try_link LINENO -# ------------------------- -# Try to link conftest.$ac_ext, and return whether this succeeded. -ac_fn_cxx_try_link () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - rm -f conftest.$ac_objext conftest$ac_exeext - if { { ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_link") 2>conftest.err - ac_status=$? - if test -s conftest.err; then - grep -v '^ *+' conftest.err >conftest.er1 - cat conftest.er1 >&5 - mv -f conftest.er1 conftest.err - fi - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } && { - test -z "$ac_cxx_werror_flag" || - test ! -s conftest.err - } && test -s conftest$ac_exeext && { - test "$cross_compiling" = yes || - test -x conftest$ac_exeext - }; then : - ac_retval=0 -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_retval=1 -fi - # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information - # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would - # interfere with the next link command; also delete a directory that is - # left behind by Apple's compiler. We do this before executing the actions. - rm -rf conftest.dSYM conftest_ipa8_conftest.oo - eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno - as_fn_set_status $ac_retval - -} # ac_fn_cxx_try_link - -# ac_fn_cxx_try_run LINENO -# ------------------------ -# Try to link conftest.$ac_ext, and return whether this succeeded. Assumes -# that executables *can* be run. -ac_fn_cxx_try_run () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - if { { ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_link") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } && { ac_try='./conftest$ac_exeext' - { { case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_try") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; }; then : - ac_retval=0 -else - $as_echo "$as_me: program exited with status $ac_status" >&5 - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_retval=$ac_status -fi - rm -rf conftest.dSYM conftest_ipa8_conftest.oo - eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno - as_fn_set_status $ac_retval - -} # ac_fn_cxx_try_run - -# ac_fn_cxx_check_header_mongrel LINENO HEADER VAR INCLUDES -# --------------------------------------------------------- -# Tests whether HEADER exists, giving a warning if it cannot be compiled using -# the include files in INCLUDES and setting the cache variable VAR -# accordingly. -ac_fn_cxx_check_header_mongrel () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - if eval \${$3+:} false; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 -$as_echo_n "checking for $2... " >&6; } -if eval \${$3+:} false; then : - $as_echo_n "(cached) " >&6 -fi -eval ac_res=\$$3 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } -else - # Is the header compilable? -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 usability" >&5 -$as_echo_n "checking $2 usability... " >&6; } -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$4 -#include <$2> -_ACEOF -if ac_fn_cxx_try_compile "$LINENO"; then : - ac_header_compiler=yes -else - ac_header_compiler=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_compiler" >&5 -$as_echo "$ac_header_compiler" >&6; } - -# Is the header present? -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 presence" >&5 -$as_echo_n "checking $2 presence... " >&6; } -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include <$2> -_ACEOF -if ac_fn_cxx_try_cpp "$LINENO"; then : - ac_header_preproc=yes -else - ac_header_preproc=no -fi -rm -f conftest.err conftest.i conftest.$ac_ext -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5 -$as_echo "$ac_header_preproc" >&6; } - -# So? What about this header? -case $ac_header_compiler:$ac_header_preproc:$ac_cxx_preproc_warn_flag in #(( - yes:no: ) - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&5 -$as_echo "$as_me: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 -$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} - ;; - no:yes:* ) - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: present but cannot be compiled" >&5 -$as_echo "$as_me: WARNING: $2: present but cannot be compiled" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: check for missing prerequisite headers?" >&5 -$as_echo "$as_me: WARNING: $2: check for missing prerequisite headers?" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: see the Autoconf documentation" >&5 -$as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&5 -$as_echo "$as_me: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 -$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} -( $as_echo "## ------------------------------ ## -## Report this to rncbc@rncbc.org ## -## ------------------------------ ##" - ) | sed "s/^/$as_me: WARNING: /" >&2 - ;; -esac - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 -$as_echo_n "checking for $2... " >&6; } -if eval \${$3+:} false; then : - $as_echo_n "(cached) " >&6 -else - eval "$3=\$ac_header_compiler" -fi -eval ac_res=\$$3 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } -fi - eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno - -} # ac_fn_cxx_check_header_mongrel - -# ac_fn_cxx_check_header_compile LINENO HEADER VAR INCLUDES -# --------------------------------------------------------- -# Tests whether HEADER exists and can be compiled using the include files in -# INCLUDES, setting the cache variable VAR accordingly. -ac_fn_cxx_check_header_compile () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 -$as_echo_n "checking for $2... " >&6; } -if eval \${$3+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$4 -#include <$2> -_ACEOF -if ac_fn_cxx_try_compile "$LINENO"; then : - eval "$3=yes" -else - eval "$3=no" -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -eval ac_res=\$$3 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } - eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno - -} # ac_fn_cxx_check_header_compile -cat >config.log <<_ACEOF -This file contains any messages produced by compilers while -running configure, to aid debugging if configure makes a mistake. - -It was created by synthv1 $as_me 0.8.6, which was -generated by GNU Autoconf 2.69. Invocation command line was - - $ $0 $@ - -_ACEOF -exec 5>>config.log -{ -cat <<_ASUNAME -## --------- ## -## Platform. ## -## --------- ## - -hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` -uname -m = `(uname -m) 2>/dev/null || echo unknown` -uname -r = `(uname -r) 2>/dev/null || echo unknown` -uname -s = `(uname -s) 2>/dev/null || echo unknown` -uname -v = `(uname -v) 2>/dev/null || echo unknown` - -/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` -/bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` - -/bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` -/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` -/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` -/usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` -/bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` -/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` -/bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` - -_ASUNAME - -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - $as_echo "PATH: $as_dir" - done -IFS=$as_save_IFS - -} >&5 - -cat >&5 <<_ACEOF - - -## ----------- ## -## Core tests. ## -## ----------- ## - -_ACEOF - - -# Keep a trace of the command line. -# Strip out --no-create and --no-recursion so they do not pile up. -# Strip out --silent because we don't want to record it for future runs. -# Also quote any args containing shell meta-characters. -# Make two passes to allow for proper duplicate-argument suppression. -ac_configure_args= -ac_configure_args0= -ac_configure_args1= -ac_must_keep_next=false -for ac_pass in 1 2 -do - for ac_arg - do - case $ac_arg in - -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; - -q | -quiet | --quiet | --quie | --qui | --qu | --q \ - | -silent | --silent | --silen | --sile | --sil) - continue ;; - *\'*) - ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; - esac - case $ac_pass in - 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;; - 2) - as_fn_append ac_configure_args1 " '$ac_arg'" - if test $ac_must_keep_next = true; then - ac_must_keep_next=false # Got value, back to normal. - else - case $ac_arg in - *=* | --config-cache | -C | -disable-* | --disable-* \ - | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ - | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ - | -with-* | --with-* | -without-* | --without-* | --x) - case "$ac_configure_args0 " in - "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; - esac - ;; - -* ) ac_must_keep_next=true ;; - esac - fi - as_fn_append ac_configure_args " '$ac_arg'" - ;; - esac - done -done -{ ac_configure_args0=; unset ac_configure_args0;} -{ ac_configure_args1=; unset ac_configure_args1;} - -# When interrupted or exit'd, cleanup temporary files, and complete -# config.log. We remove comments because anyway the quotes in there -# would cause problems or look ugly. -# WARNING: Use '\'' to represent an apostrophe within the trap. -# WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. -trap 'exit_status=$? - # Save into config.log some information that might help in debugging. - { - echo - - $as_echo "## ---------------- ## -## Cache variables. ## -## ---------------- ##" - echo - # The following way of writing the cache mishandles newlines in values, -( - for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do - eval ac_val=\$$ac_var - case $ac_val in #( - *${as_nl}*) - case $ac_var in #( - *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 -$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; - esac - case $ac_var in #( - _ | IFS | as_nl) ;; #( - BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( - *) { eval $ac_var=; unset $ac_var;} ;; - esac ;; - esac - done - (set) 2>&1 | - case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #( - *${as_nl}ac_space=\ *) - sed -n \ - "s/'\''/'\''\\\\'\'''\''/g; - s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p" - ;; #( - *) - sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" - ;; - esac | - sort -) - echo - - $as_echo "## ----------------- ## -## Output variables. ## -## ----------------- ##" - echo - for ac_var in $ac_subst_vars - do - eval ac_val=\$$ac_var - case $ac_val in - *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; - esac - $as_echo "$ac_var='\''$ac_val'\''" - done | sort - echo - - if test -n "$ac_subst_files"; then - $as_echo "## ------------------- ## -## File substitutions. ## -## ------------------- ##" - echo - for ac_var in $ac_subst_files - do - eval ac_val=\$$ac_var - case $ac_val in - *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; - esac - $as_echo "$ac_var='\''$ac_val'\''" - done | sort - echo - fi - - if test -s confdefs.h; then - $as_echo "## ----------- ## -## confdefs.h. ## -## ----------- ##" - echo - cat confdefs.h - echo - fi - test "$ac_signal" != 0 && - $as_echo "$as_me: caught signal $ac_signal" - $as_echo "$as_me: exit $exit_status" - } >&5 - rm -f core *.core core.conftest.* && - rm -f -r conftest* confdefs* conf$$* $ac_clean_files && - exit $exit_status -' 0 -for ac_signal in 1 2 13 15; do - trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal -done -ac_signal=0 - -# confdefs.h avoids OS command line length limits that DEFS can exceed. -rm -f -r conftest* confdefs.h - -$as_echo "/* confdefs.h */" > confdefs.h - -# Predefined preprocessor variables. - -cat >>confdefs.h <<_ACEOF -#define PACKAGE_NAME "$PACKAGE_NAME" -_ACEOF - -cat >>confdefs.h <<_ACEOF -#define PACKAGE_TARNAME "$PACKAGE_TARNAME" -_ACEOF - -cat >>confdefs.h <<_ACEOF -#define PACKAGE_VERSION "$PACKAGE_VERSION" -_ACEOF - -cat >>confdefs.h <<_ACEOF -#define PACKAGE_STRING "$PACKAGE_STRING" -_ACEOF - -cat >>confdefs.h <<_ACEOF -#define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" -_ACEOF - -cat >>confdefs.h <<_ACEOF -#define PACKAGE_URL "$PACKAGE_URL" -_ACEOF - - -# Let the site file select an alternate cache file if it wants to. -# Prefer an explicitly selected file to automatically selected ones. -ac_site_file1=NONE -ac_site_file2=NONE -if test -n "$CONFIG_SITE"; then - # We do not want a PATH search for config.site. - case $CONFIG_SITE in #(( - -*) ac_site_file1=./$CONFIG_SITE;; - */*) ac_site_file1=$CONFIG_SITE;; - *) ac_site_file1=./$CONFIG_SITE;; - esac -elif test "x$prefix" != xNONE; then - ac_site_file1=$prefix/share/config.site - ac_site_file2=$prefix/etc/config.site -else - ac_site_file1=$ac_default_prefix/share/config.site - ac_site_file2=$ac_default_prefix/etc/config.site -fi -for ac_site_file in "$ac_site_file1" "$ac_site_file2" -do - test "x$ac_site_file" = xNONE && continue - if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 -$as_echo "$as_me: loading site script $ac_site_file" >&6;} - sed 's/^/| /' "$ac_site_file" >&5 - . "$ac_site_file" \ - || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error $? "failed to load site script $ac_site_file -See \`config.log' for more details" "$LINENO" 5; } - fi -done - -if test -r "$cache_file"; then - # Some versions of bash will fail to source /dev/null (special files - # actually), so we avoid doing that. DJGPP emulates it as a regular file. - if test /dev/null != "$cache_file" && test -f "$cache_file"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 -$as_echo "$as_me: loading cache $cache_file" >&6;} - case $cache_file in - [\\/]* | ?:[\\/]* ) . "$cache_file";; - *) . "./$cache_file";; - esac - fi -else - { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 -$as_echo "$as_me: creating cache $cache_file" >&6;} - >$cache_file -fi - -# Check that the precious variables saved in the cache have kept the same -# value. -ac_cache_corrupted=false -for ac_var in $ac_precious_vars; do - eval ac_old_set=\$ac_cv_env_${ac_var}_set - eval ac_new_set=\$ac_env_${ac_var}_set - eval ac_old_val=\$ac_cv_env_${ac_var}_value - eval ac_new_val=\$ac_env_${ac_var}_value - case $ac_old_set,$ac_new_set in - set,) - { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 -$as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} - ac_cache_corrupted=: ;; - ,set) - { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5 -$as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} - ac_cache_corrupted=: ;; - ,);; - *) - if test "x$ac_old_val" != "x$ac_new_val"; then - # differences in whitespace do not lead to failure. - ac_old_val_w=`echo x $ac_old_val` - ac_new_val_w=`echo x $ac_new_val` - if test "$ac_old_val_w" != "$ac_new_val_w"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5 -$as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} - ac_cache_corrupted=: - else - { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 -$as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} - eval $ac_var=\$ac_old_val - fi - { $as_echo "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5 -$as_echo "$as_me: former value: \`$ac_old_val'" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5 -$as_echo "$as_me: current value: \`$ac_new_val'" >&2;} - fi;; - esac - # Pass precious variables to config.status. - if test "$ac_new_set" = set; then - case $ac_new_val in - *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; - *) ac_arg=$ac_var=$ac_new_val ;; - esac - case " $ac_configure_args " in - *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. - *) as_fn_append ac_configure_args " '$ac_arg'" ;; - esac - fi -done -if $ac_cache_corrupted; then - { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 -$as_echo "$as_me: error: changes in the environment can compromise the build" >&2;} - as_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5 -fi -## -------------------- ## -## Main body of script. ## -## -------------------- ## - -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - - - - -ac_config_headers="$ac_config_headers src/config.h" - -ac_config_files="$ac_config_files Makefile synthv1.spec src/src_core.pri src/src_ui.pri src/src_jack.pri src/src_lv2.pri" - - -# Build version string. -if ${ac_cv_build_version+:} false; then : - $as_echo_n "(cached) " >&6 -else - - ac_cv_build_version=$(git describe --tags --dirty --abbrev=6 2>/dev/null) - if test -n "$ac_cv_build_version"; then - ac_cv_build_version=$(echo $ac_cv_build_version | sed 's/^[^_]*[_v]//i') - ac_cv_build_version=$(echo $ac_cv_build_version | sed 's/-g/git./') - ac_cv_build_version=$(echo $ac_cv_build_version | sed 's/[_|-]\+/./g') - ac_cv_build_version_extra=$(git rev-parse --abbrev-ref HEAD 2>/dev/null) - if test "x$ac_cv_build_version_extra" != "xmaster"; then - ac_cv_build_version="$ac_cv_build_version [$ac_cv_build_version_extra]" - fi - else - ac_cv_build_version=$PACKAGE_VERSION - fi - -fi - -ac_build_version="$ac_cv_build_version" - -cat >>confdefs.h <<_ACEOF -#define CONFIG_BUILD_VERSION "$ac_build_version" -_ACEOF - - -# Sanitized version string. -if ${ac_cv_version+:} false; then : - $as_echo_n "(cached) " >&6 -else - - ac_cv_version=$(echo $PACKAGE_VERSION | sed -r 's/^([0-9|\.]+).*$/\1/') - -fi - -ac_version="$ac_cv_version" - -cat >>confdefs.h <<_ACEOF -#define CONFIG_VERSION "$ac_version" -_ACEOF - - - -# Set default installation prefix. - -if test "x$prefix" = "xNONE"; then - prefix=$ac_default_prefix -fi -if test "x$exec_prefix" = "xNONE"; then - exec_prefix=$prefix -fi -eval ac_prefix=$prefix - - -cat >>confdefs.h <<_ACEOF -#define CONFIG_PREFIX "$ac_prefix" -_ACEOF - - -# Set default installation directories. -eval ac_bindir=$bindir - - -cat >>confdefs.h <<_ACEOF -#define CONFIG_BINDIR "$ac_bindir" -_ACEOF - - -eval ac_libdir=$libdir - - -cat >>confdefs.h <<_ACEOF -#define CONFIG_LIBDIR "$ac_libdir" -_ACEOF - - -eval datarootdir=$datarootdir -eval ac_datadir=$datadir - - -cat >>confdefs.h <<_ACEOF -#define CONFIG_DATADIR "$ac_datadir" -_ACEOF - - -eval ac_mandir=$mandir - - -cat >>confdefs.h <<_ACEOF -#define CONFIG_MANDIR "$ac_mandir" -_ACEOF - - - -# Enable debugging argument option. -# Check whether --enable-debug was given. -if test "${enable_debug+set}" = set; then : - enableval=$enable_debug; ac_debug="$enableval" -fi - - -# Enable JACK standalone build. -# Check whether --enable-jack was given. -if test "${enable_jack+set}" = set; then : - enableval=$enable_jack; ac_jack="$enableval" -else - ac_jack="yes" -fi - - -# Enable JACK session support. -# Check whether --enable-jack-session was given. -if test "${enable_jack_session+set}" = set; then : - enableval=$enable_jack_session; ac_jack_session="$enableval" -else - ac_jack_session="yes" -fi - - -# Enable JACK MIDI support option. -# Check whether --enable-jack-midi was given. -if test "${enable_jack_midi+set}" = set; then : - enableval=$enable_jack_midi; ac_jack_midi="$enableval" -else - ac_jack_midi="yes" -fi - - -# Enable ALSA MIDI support option. -# Check whether --enable-alsa-midi was given. -if test "${enable_alsa_midi+set}" = set; then : - enableval=$enable_alsa_midi; ac_alsa_midi="$enableval" -else - ac_alsa_midi="yes" -fi - - -# Enable LV2 plugin build. -# Check whether --enable-lv2 was given. -if test "${enable_lv2+set}" = set; then : - enableval=$enable_lv2; ac_lv2="$enableval" -else - ac_lv2="yes" -fi - - -# Check whether --enable-lv2-external-ui was given. -if test "${enable_lv2_external_ui+set}" = set; then : - enableval=$enable_lv2_external_ui; ac_lv2_external_ui="$enableval" -else - ac_lv2_external_ui="yes" -fi - - -# Check whether --enable-lv2-ui-idle was given. -if test "${enable_lv2_ui_idle+set}" = set; then : - enableval=$enable_lv2_ui_idle; ac_lv2_ui_idle="$enableval" -else - ac_lv2_ui_idle="yes" -fi - - -# Check whether --enable-lv2-ui-show was given. -if test "${enable_lv2_ui_show+set}" = set; then : - enableval=$enable_lv2_ui_show; ac_lv2_ui_show="$enableval" -else - ac_lv2_ui_show="yes" -fi - - -# Check whether --enable-lv2-programs was given. -if test "${enable_lv2_programs+set}" = set; then : - enableval=$enable_lv2_programs; ac_lv2_programs="$enableval" -else - ac_lv2_programs="yes" -fi - - - -# Enable liblo availability. -# Check whether --enable-liblo was given. -if test "${enable_liblo+set}" = set; then : - enableval=$enable_liblo; ac_liblo="$enableval" -else - ac_liblo="yes" -fi - - -# Enable NSM support. -# Check whether --enable-nsm was given. -if test "${enable_nsm+set}" = set; then : - enableval=$enable_nsm; ac_nsm="$enableval" -else - ac_nsm="yes" -fi - - - -if test "x$ac_debug" = "xyes"; then - -$as_echo "#define CONFIG_DEBUG 1" >>confdefs.h - - ac_debug="debug" -else - ac_debug="release" -fi - - - - -# Enable Qt4/5 availability. -# Check whether --enable-qt4 was given. -if test "${enable_qt4+set}" = set; then : - enableval=$enable_qt4; ac_qt4="$enableval" -else - ac_qt4="no" -fi - - - -# Standard installation base dirs. -ac_with_paths="" - -# Set for alternate Qt4/5 installation dir. - -# Check whether --with-qt4 was given. -if test "${with_qt4+set}" = set; then : - withval=$with_qt4; ac_qt4_path="$withval" -else - ac_qt4_path="no" -fi - - - -# Check whether --with-qt5 was given. -if test "${with_qt5+set}" = set; then : - withval=$with_qt5; ac_qt5_path="$withval" -else - ac_qt5_path="no" -fi - - -if test "x$ac_qt4_path" != "xno"; then - ac_with_paths="$ac_with_paths $ac_qt4_path" - ac_qt4="yes" -fi - -if test "x$ac_qt5_path" != "xno"; then - ac_with_paths="$ac_with_paths $ac_qt5_path" - ac_qt4="no" -fi - -# Set for alternate ALSA installation dir. - -# Check whether --with-alsa was given. -if test "${with_alsa+set}" = set; then : - withval=$with_alsa; ac_with_paths="$ac_with_paths $withval" -fi - - -# Set for alternate JACK installation dir. - -# Check whether --with-jack was given. -if test "${with_jack+set}" = set; then : - withval=$with_jack; ac_with_paths="$ac_with_paths $withval" -fi - - -# Set for alternate LV2 installation dir. - -# Check whether --with-lv2 was given. -if test "${with_lv2+set}" = set; then : - withval=$with_lv2; ac_with_paths="$ac_with_paths $withval" -fi - - -# Set for alternate liblo installation dir. - -# Check whether --with-liblo was given. -if test "${with_liblo+set}" = set; then : - withval=$with_liblo; ac_with_paths="$ac_with_paths $withval" -fi - - - -# Honor user specified flags. -ac_cflags=$CFLAGS -ac_ldflags=$LDFLAGS - - -# Checks for programs. -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu -if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. -set dummy ${ac_tool_prefix}gcc; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_CC+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$CC"; then - ac_cv_prog_CC="$CC" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_CC="${ac_tool_prefix}gcc" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -CC=$ac_cv_prog_CC -if test -n "$CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 -$as_echo "$CC" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$ac_cv_prog_CC"; then - ac_ct_CC=$CC - # Extract the first word of "gcc", so it can be a program name with args. -set dummy gcc; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_CC+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_CC"; then - ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_ac_ct_CC="gcc" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_CC=$ac_cv_prog_ac_ct_CC -if test -n "$ac_ct_CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 -$as_echo "$ac_ct_CC" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - if test "x$ac_ct_CC" = x; then - CC="" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - CC=$ac_ct_CC - fi -else - CC="$ac_cv_prog_CC" -fi - -if test -z "$CC"; then - if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. -set dummy ${ac_tool_prefix}cc; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_CC+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$CC"; then - ac_cv_prog_CC="$CC" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_CC="${ac_tool_prefix}cc" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -CC=$ac_cv_prog_CC -if test -n "$CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 -$as_echo "$CC" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - fi -fi -if test -z "$CC"; then - # Extract the first word of "cc", so it can be a program name with args. -set dummy cc; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_CC+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$CC"; then - ac_cv_prog_CC="$CC" # Let the user override the test. -else - ac_prog_rejected=no -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then - ac_prog_rejected=yes - continue - fi - ac_cv_prog_CC="cc" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -if test $ac_prog_rejected = yes; then - # We found a bogon in the path, so make sure we never use it. - set dummy $ac_cv_prog_CC - shift - if test $# != 0; then - # We chose a different compiler from the bogus one. - # However, it has the same basename, so the bogon will be chosen - # first if we set CC to just the basename; use the full file name. - shift - ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" - fi -fi -fi -fi -CC=$ac_cv_prog_CC -if test -n "$CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 -$as_echo "$CC" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$CC"; then - if test -n "$ac_tool_prefix"; then - for ac_prog in cl.exe - do - # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. -set dummy $ac_tool_prefix$ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_CC+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$CC"; then - ac_cv_prog_CC="$CC" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_CC="$ac_tool_prefix$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -CC=$ac_cv_prog_CC -if test -n "$CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 -$as_echo "$CC" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - test -n "$CC" && break - done -fi -if test -z "$CC"; then - ac_ct_CC=$CC - for ac_prog in cl.exe -do - # Extract the first word of "$ac_prog", so it can be a program name with args. -set dummy $ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_CC+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_CC"; then - ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_ac_ct_CC="$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_CC=$ac_cv_prog_ac_ct_CC -if test -n "$ac_ct_CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 -$as_echo "$ac_ct_CC" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - test -n "$ac_ct_CC" && break -done - - if test "x$ac_ct_CC" = x; then - CC="" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - CC=$ac_ct_CC - fi -fi - -fi - - -test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error $? "no acceptable C compiler found in \$PATH -See \`config.log' for more details" "$LINENO" 5; } - -# Provide some information about the compiler. -$as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 -set X $ac_compile -ac_compiler=$2 -for ac_option in --version -v -V -qversion; do - { { ac_try="$ac_compiler $ac_option >&5" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_compiler $ac_option >&5") 2>conftest.err - ac_status=$? - if test -s conftest.err; then - sed '10a\ -... rest of stderr output deleted ... - 10q' conftest.err >conftest.er1 - cat conftest.er1 >&5 - fi - rm -f conftest.er1 conftest.err - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } -done - -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -ac_clean_files_save=$ac_clean_files -ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out" -# Try to create an executable without -o first, disregard a.out. -# It will help us diagnose broken compilers, and finding out an intuition -# of exeext. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5 -$as_echo_n "checking whether the C compiler works... " >&6; } -ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` - -# The possible output files: -ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*" - -ac_rmfiles= -for ac_file in $ac_files -do - case $ac_file in - *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; - * ) ac_rmfiles="$ac_rmfiles $ac_file";; - esac -done -rm -f $ac_rmfiles - -if { { ac_try="$ac_link_default" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_link_default") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then : - # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. -# So ignore a value of `no', otherwise this would lead to `EXEEXT = no' -# in a Makefile. We should not override ac_cv_exeext if it was cached, -# so that the user can short-circuit this test for compilers unknown to -# Autoconf. -for ac_file in $ac_files '' -do - test -f "$ac_file" || continue - case $ac_file in - *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) - ;; - [ab].out ) - # We found the default executable, but exeext='' is most - # certainly right. - break;; - *.* ) - if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no; - then :; else - ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` - fi - # We set ac_cv_exeext here because the later test for it is not - # safe: cross compilers may not add the suffix if given an `-o' - # argument, so we may need to know it at that point already. - # Even if this section looks crufty: it has the advantage of - # actually working. - break;; - * ) - break;; - esac -done -test "$ac_cv_exeext" = no && ac_cv_exeext= - -else - ac_file='' -fi -if test -z "$ac_file"; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -$as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error 77 "C compiler cannot create executables -See \`config.log' for more details" "$LINENO" 5; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5 -$as_echo_n "checking for C compiler default output file name... " >&6; } -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5 -$as_echo "$ac_file" >&6; } -ac_exeext=$ac_cv_exeext - -rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out -ac_clean_files=$ac_clean_files_save -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5 -$as_echo_n "checking for suffix of executables... " >&6; } -if { { ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_link") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then : - # If both `conftest.exe' and `conftest' are `present' (well, observable) -# catch `conftest.exe'. For instance with Cygwin, `ls conftest' will -# work properly (i.e., refer to `conftest.exe'), while it won't with -# `rm'. -for ac_file in conftest.exe conftest conftest.*; do - test -f "$ac_file" || continue - case $ac_file in - *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; - *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` - break;; - * ) break;; - esac -done -else - { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error $? "cannot compute suffix of executables: cannot compile and link -See \`config.log' for more details" "$LINENO" 5; } -fi -rm -f conftest conftest$ac_cv_exeext -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 -$as_echo "$ac_cv_exeext" >&6; } - -rm -f conftest.$ac_ext -EXEEXT=$ac_cv_exeext -ac_exeext=$EXEEXT -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -int -main () -{ -FILE *f = fopen ("conftest.out", "w"); - return ferror (f) || fclose (f) != 0; - - ; - return 0; -} -_ACEOF -ac_clean_files="$ac_clean_files conftest.out" -# Check that the compiler produces executables we can run. If not, either -# the compiler is broken, or we cross compile. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 -$as_echo_n "checking whether we are cross compiling... " >&6; } -if test "$cross_compiling" != yes; then - { { ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_link") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } - if { ac_try='./conftest$ac_cv_exeext' - { { case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_try") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; }; then - cross_compiling=no - else - if test "$cross_compiling" = maybe; then - cross_compiling=yes - else - { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error $? "cannot run C compiled programs. -If you meant to cross compile, use \`--host'. -See \`config.log' for more details" "$LINENO" 5; } - fi - fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 -$as_echo "$cross_compiling" >&6; } - -rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out -ac_clean_files=$ac_clean_files_save -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 -$as_echo_n "checking for suffix of object files... " >&6; } -if ${ac_cv_objext+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -rm -f conftest.o conftest.obj -if { { ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_compile") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then : - for ac_file in conftest.o conftest.obj conftest.*; do - test -f "$ac_file" || continue; - case $ac_file in - *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;; - *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` - break;; - esac -done -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error $? "cannot compute suffix of object files: cannot compile -See \`config.log' for more details" "$LINENO" 5; } -fi -rm -f conftest.$ac_cv_objext conftest.$ac_ext -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5 -$as_echo "$ac_cv_objext" >&6; } -OBJEXT=$ac_cv_objext -ac_objext=$OBJEXT -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5 -$as_echo_n "checking whether we are using the GNU C compiler... " >&6; } -if ${ac_cv_c_compiler_gnu+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ -#ifndef __GNUC__ - choke me -#endif - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_compiler_gnu=yes -else - ac_compiler_gnu=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -ac_cv_c_compiler_gnu=$ac_compiler_gnu - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 -$as_echo "$ac_cv_c_compiler_gnu" >&6; } -if test $ac_compiler_gnu = yes; then - GCC=yes -else - GCC= -fi -ac_test_CFLAGS=${CFLAGS+set} -ac_save_CFLAGS=$CFLAGS -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 -$as_echo_n "checking whether $CC accepts -g... " >&6; } -if ${ac_cv_prog_cc_g+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_save_c_werror_flag=$ac_c_werror_flag - ac_c_werror_flag=yes - ac_cv_prog_cc_g=no - CFLAGS="-g" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_prog_cc_g=yes -else - CFLAGS="" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - -else - ac_c_werror_flag=$ac_save_c_werror_flag - CFLAGS="-g" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_prog_cc_g=yes -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - ac_c_werror_flag=$ac_save_c_werror_flag -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 -$as_echo "$ac_cv_prog_cc_g" >&6; } -if test "$ac_test_CFLAGS" = set; then - CFLAGS=$ac_save_CFLAGS -elif test $ac_cv_prog_cc_g = yes; then - if test "$GCC" = yes; then - CFLAGS="-g -O2" - else - CFLAGS="-g" - fi -else - if test "$GCC" = yes; then - CFLAGS="-O2" - else - CFLAGS= - fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 -$as_echo_n "checking for $CC option to accept ISO C89... " >&6; } -if ${ac_cv_prog_cc_c89+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_cv_prog_cc_c89=no -ac_save_CC=$CC -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -#include -struct stat; -/* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ -struct buf { int x; }; -FILE * (*rcsopen) (struct buf *, struct stat *, int); -static char *e (p, i) - char **p; - int i; -{ - return p[i]; -} -static char *f (char * (*g) (char **, int), char **p, ...) -{ - char *s; - va_list v; - va_start (v,p); - s = g (p, va_arg (v,int)); - va_end (v); - return s; -} - -/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has - function prototypes and stuff, but not '\xHH' hex character constants. - These don't provoke an error unfortunately, instead are silently treated - as 'x'. The following induces an error, until -std is added to get - proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an - array size at least. It's necessary to write '\x00'==0 to get something - that's true only with -std. */ -int osf4_cc_array ['\x00' == 0 ? 1 : -1]; - -/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters - inside strings and character constants. */ -#define FOO(x) 'x' -int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; - -int test (int i, double x); -struct s1 {int (*f) (int a);}; -struct s2 {int (*f) (double a);}; -int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); -int argc; -char **argv; -int -main () -{ -return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; - ; - return 0; -} -_ACEOF -for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ - -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" -do - CC="$ac_save_CC $ac_arg" - if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_prog_cc_c89=$ac_arg -fi -rm -f core conftest.err conftest.$ac_objext - test "x$ac_cv_prog_cc_c89" != "xno" && break -done -rm -f conftest.$ac_ext -CC=$ac_save_CC - -fi -# AC_CACHE_VAL -case "x$ac_cv_prog_cc_c89" in - x) - { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 -$as_echo "none needed" >&6; } ;; - xno) - { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 -$as_echo "unsupported" >&6; } ;; - *) - CC="$CC $ac_cv_prog_cc_c89" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 -$as_echo "$ac_cv_prog_cc_c89" >&6; } ;; -esac -if test "x$ac_cv_prog_cc_c89" != xno; then : - -fi - -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5 -$as_echo_n "checking how to run the C preprocessor... " >&6; } -# On Suns, sometimes $CPP names a directory. -if test -n "$CPP" && test -d "$CPP"; then - CPP= -fi -if test -z "$CPP"; then - if ${ac_cv_prog_CPP+:} false; then : - $as_echo_n "(cached) " >&6 -else - # Double quotes because CPP needs to be expanded - for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" - do - ac_preproc_ok=false -for ac_c_preproc_warn_flag in '' yes -do - # Use a header file that comes with gcc, so configuring glibc - # with a fresh cross-compiler works. - # Prefer to if __STDC__ is defined, since - # exists even on freestanding compilers. - # On the NeXT, cc -E runs the code through the compiler's parser, - # not just through cpp. "Syntax error" is here to catch this case. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#ifdef __STDC__ -# include -#else -# include -#endif - Syntax error -_ACEOF -if ac_fn_c_try_cpp "$LINENO"; then : - -else - # Broken: fails on valid input. -continue -fi -rm -f conftest.err conftest.i conftest.$ac_ext - - # OK, works on sane cases. Now check whether nonexistent headers - # can be detected and how. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -_ACEOF -if ac_fn_c_try_cpp "$LINENO"; then : - # Broken: success on invalid input. -continue -else - # Passes both tests. -ac_preproc_ok=: -break -fi -rm -f conftest.err conftest.i conftest.$ac_ext - -done -# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. -rm -f conftest.i conftest.err conftest.$ac_ext -if $ac_preproc_ok; then : - break -fi - - done - ac_cv_prog_CPP=$CPP - -fi - CPP=$ac_cv_prog_CPP -else - ac_cv_prog_CPP=$CPP -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5 -$as_echo "$CPP" >&6; } -ac_preproc_ok=false -for ac_c_preproc_warn_flag in '' yes -do - # Use a header file that comes with gcc, so configuring glibc - # with a fresh cross-compiler works. - # Prefer to if __STDC__ is defined, since - # exists even on freestanding compilers. - # On the NeXT, cc -E runs the code through the compiler's parser, - # not just through cpp. "Syntax error" is here to catch this case. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#ifdef __STDC__ -# include -#else -# include -#endif - Syntax error -_ACEOF -if ac_fn_c_try_cpp "$LINENO"; then : - -else - # Broken: fails on valid input. -continue -fi -rm -f conftest.err conftest.i conftest.$ac_ext - - # OK, works on sane cases. Now check whether nonexistent headers - # can be detected and how. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -_ACEOF -if ac_fn_c_try_cpp "$LINENO"; then : - # Broken: success on invalid input. -continue -else - # Passes both tests. -ac_preproc_ok=: -break -fi -rm -f conftest.err conftest.i conftest.$ac_ext - -done -# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. -rm -f conftest.i conftest.err conftest.$ac_ext -if $ac_preproc_ok; then : - -else - { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error $? "C preprocessor \"$CPP\" fails sanity check -See \`config.log' for more details" "$LINENO" 5; } -fi - -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - -ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu -if test -z "$CXX"; then - if test -n "$CCC"; then - CXX=$CCC - else - if test -n "$ac_tool_prefix"; then - for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC - do - # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. -set dummy $ac_tool_prefix$ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_CXX+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$CXX"; then - ac_cv_prog_CXX="$CXX" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_CXX="$ac_tool_prefix$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -CXX=$ac_cv_prog_CXX -if test -n "$CXX"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXX" >&5 -$as_echo "$CXX" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - test -n "$CXX" && break - done -fi -if test -z "$CXX"; then - ac_ct_CXX=$CXX - for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC -do - # Extract the first word of "$ac_prog", so it can be a program name with args. -set dummy $ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_CXX+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_CXX"; then - ac_cv_prog_ac_ct_CXX="$ac_ct_CXX" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_ac_ct_CXX="$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_CXX=$ac_cv_prog_ac_ct_CXX -if test -n "$ac_ct_CXX"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CXX" >&5 -$as_echo "$ac_ct_CXX" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - test -n "$ac_ct_CXX" && break -done - - if test "x$ac_ct_CXX" = x; then - CXX="g++" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - CXX=$ac_ct_CXX - fi -fi - - fi -fi -# Provide some information about the compiler. -$as_echo "$as_me:${as_lineno-$LINENO}: checking for C++ compiler version" >&5 -set X $ac_compile -ac_compiler=$2 -for ac_option in --version -v -V -qversion; do - { { ac_try="$ac_compiler $ac_option >&5" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_compiler $ac_option >&5") 2>conftest.err - ac_status=$? - if test -s conftest.err; then - sed '10a\ -... rest of stderr output deleted ... - 10q' conftest.err >conftest.er1 - cat conftest.er1 >&5 - fi - rm -f conftest.er1 conftest.err - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } -done - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C++ compiler" >&5 -$as_echo_n "checking whether we are using the GNU C++ compiler... " >&6; } -if ${ac_cv_cxx_compiler_gnu+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ -#ifndef __GNUC__ - choke me -#endif - - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_compile "$LINENO"; then : - ac_compiler_gnu=yes -else - ac_compiler_gnu=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -ac_cv_cxx_compiler_gnu=$ac_compiler_gnu - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_cxx_compiler_gnu" >&5 -$as_echo "$ac_cv_cxx_compiler_gnu" >&6; } -if test $ac_compiler_gnu = yes; then - GXX=yes -else - GXX= -fi -ac_test_CXXFLAGS=${CXXFLAGS+set} -ac_save_CXXFLAGS=$CXXFLAGS -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CXX accepts -g" >&5 -$as_echo_n "checking whether $CXX accepts -g... " >&6; } -if ${ac_cv_prog_cxx_g+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_save_cxx_werror_flag=$ac_cxx_werror_flag - ac_cxx_werror_flag=yes - ac_cv_prog_cxx_g=no - CXXFLAGS="-g" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_compile "$LINENO"; then : - ac_cv_prog_cxx_g=yes -else - CXXFLAGS="" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_compile "$LINENO"; then : - -else - ac_cxx_werror_flag=$ac_save_cxx_werror_flag - CXXFLAGS="-g" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_compile "$LINENO"; then : - ac_cv_prog_cxx_g=yes -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - ac_cxx_werror_flag=$ac_save_cxx_werror_flag -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cxx_g" >&5 -$as_echo "$ac_cv_prog_cxx_g" >&6; } -if test "$ac_test_CXXFLAGS" = set; then - CXXFLAGS=$ac_save_CXXFLAGS -elif test $ac_cv_prog_cxx_g = yes; then - if test "$GXX" = yes; then - CXXFLAGS="-g -O2" - else - CXXFLAGS="-g" - fi -else - if test "$GXX" = yes; then - CXXFLAGS="-O2" - else - CXXFLAGS= - fi -fi -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - -ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C++ preprocessor" >&5 -$as_echo_n "checking how to run the C++ preprocessor... " >&6; } -if test -z "$CXXCPP"; then - if ${ac_cv_prog_CXXCPP+:} false; then : - $as_echo_n "(cached) " >&6 -else - # Double quotes because CXXCPP needs to be expanded - for CXXCPP in "$CXX -E" "/lib/cpp" - do - ac_preproc_ok=false -for ac_cxx_preproc_warn_flag in '' yes -do - # Use a header file that comes with gcc, so configuring glibc - # with a fresh cross-compiler works. - # Prefer to if __STDC__ is defined, since - # exists even on freestanding compilers. - # On the NeXT, cc -E runs the code through the compiler's parser, - # not just through cpp. "Syntax error" is here to catch this case. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#ifdef __STDC__ -# include -#else -# include -#endif - Syntax error -_ACEOF -if ac_fn_cxx_try_cpp "$LINENO"; then : - -else - # Broken: fails on valid input. -continue -fi -rm -f conftest.err conftest.i conftest.$ac_ext - - # OK, works on sane cases. Now check whether nonexistent headers - # can be detected and how. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -_ACEOF -if ac_fn_cxx_try_cpp "$LINENO"; then : - # Broken: success on invalid input. -continue -else - # Passes both tests. -ac_preproc_ok=: -break -fi -rm -f conftest.err conftest.i conftest.$ac_ext - -done -# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. -rm -f conftest.i conftest.err conftest.$ac_ext -if $ac_preproc_ok; then : - break -fi - - done - ac_cv_prog_CXXCPP=$CXXCPP - -fi - CXXCPP=$ac_cv_prog_CXXCPP -else - ac_cv_prog_CXXCPP=$CXXCPP -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXXCPP" >&5 -$as_echo "$CXXCPP" >&6; } -ac_preproc_ok=false -for ac_cxx_preproc_warn_flag in '' yes -do - # Use a header file that comes with gcc, so configuring glibc - # with a fresh cross-compiler works. - # Prefer to if __STDC__ is defined, since - # exists even on freestanding compilers. - # On the NeXT, cc -E runs the code through the compiler's parser, - # not just through cpp. "Syntax error" is here to catch this case. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#ifdef __STDC__ -# include -#else -# include -#endif - Syntax error -_ACEOF -if ac_fn_cxx_try_cpp "$LINENO"; then : - -else - # Broken: fails on valid input. -continue -fi -rm -f conftest.err conftest.i conftest.$ac_ext - - # OK, works on sane cases. Now check whether nonexistent headers - # can be detected and how. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -_ACEOF -if ac_fn_cxx_try_cpp "$LINENO"; then : - # Broken: success on invalid input. -continue -else - # Passes both tests. -ac_preproc_ok=: -break -fi -rm -f conftest.err conftest.i conftest.$ac_ext - -done -# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. -rm -f conftest.i conftest.err conftest.$ac_ext -if $ac_preproc_ok; then : - -else - { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error $? "C++ preprocessor \"$CXXCPP\" fails sanity check -See \`config.log' for more details" "$LINENO" 5; } -fi - -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - - -# Checks for languages. -ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - - -# Check for pkg-config. - - - - - - - -if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then - if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}pkg-config", so it can be a program name with args. -set dummy ${ac_tool_prefix}pkg-config; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_path_PKG_CONFIG+:} false; then : - $as_echo_n "(cached) " >&6 -else - case $PKG_CONFIG in - [\\/]* | ?:[\\/]*) - ac_cv_path_PKG_CONFIG="$PKG_CONFIG" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_path_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - - ;; -esac -fi -PKG_CONFIG=$ac_cv_path_PKG_CONFIG -if test -n "$PKG_CONFIG"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PKG_CONFIG" >&5 -$as_echo "$PKG_CONFIG" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$ac_cv_path_PKG_CONFIG"; then - ac_pt_PKG_CONFIG=$PKG_CONFIG - # Extract the first word of "pkg-config", so it can be a program name with args. -set dummy pkg-config; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_path_ac_pt_PKG_CONFIG+:} false; then : - $as_echo_n "(cached) " >&6 -else - case $ac_pt_PKG_CONFIG in - [\\/]* | ?:[\\/]*) - ac_cv_path_ac_pt_PKG_CONFIG="$ac_pt_PKG_CONFIG" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_path_ac_pt_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - - ;; -esac -fi -ac_pt_PKG_CONFIG=$ac_cv_path_ac_pt_PKG_CONFIG -if test -n "$ac_pt_PKG_CONFIG"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_PKG_CONFIG" >&5 -$as_echo "$ac_pt_PKG_CONFIG" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - if test "x$ac_pt_PKG_CONFIG" = x; then - PKG_CONFIG="" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - PKG_CONFIG=$ac_pt_PKG_CONFIG - fi -else - PKG_CONFIG="$ac_cv_path_PKG_CONFIG" -fi - -fi -if test -n "$PKG_CONFIG"; then - _pkg_min_version=0.9.0 - { $as_echo "$as_me:${as_lineno-$LINENO}: checking pkg-config is at least version $_pkg_min_version" >&5 -$as_echo_n "checking pkg-config is at least version $_pkg_min_version... " >&6; } - if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } - else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } - PKG_CONFIG="" - fi -fi - -# Check whether -std=c++11 support is necessary (4 < g++ version < 6). -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for g++ major version" >&5 -$as_echo_n "checking for g++ major version... " >&6; } -if ${ac_cv_gxx_version_major+:} false; then : - $as_echo_n "(cached) " >&6 -else - - ac_cv_gxx_version_major=$($CC -dumpversion) - if test -n "$ac_cv_gxx_version_major"; then - ac_cv_gxx_version_major=$(echo $ac_cv_gxx_version_major | cut -d'.' -f1); - fi - ac_gxx_version_major=$(($ac_cv_gxx_version_major + 0)) - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_gxx_version_major" >&5 -$as_echo "$ac_cv_gxx_version_major" >&6; } -ac_gxx_version_major=$ac_cv_gxx_version_major -if test $ac_gxx_version_major -ge 4 -a $ac_gxx_version_major -lt 6; then - CXXFLAGS="-std=c++11 $CXXFLAGS" -fi - -# Check for proper flags. -ac_arch=$(uname -m) - -# Check for install paths and alternatives... -ac_libdirs="lib" - -if test "x$ac_arch" = "xx86_64"; then - ac_libdirs="$ac_libdirs lib64" -fi - -CFLAGS="-fPIC $CFLAGS" -CPPFLAGS="-fPIC $CPPFLAGS" - -# Prepend alternate dependencies paths. -ac_path=$PATH - -for X in $ac_with_paths; do - if test -d $X/bin; then - ac_path="$X/bin:$ac_path" - fi - if test -d $X/include; then - CFLAGS="-I$X/include $CFLAGS " - CPPFLAGS="-I$X/include $CPPFLAGS" - ac_incpath="$X/include $ac_incpath" - fi - for Y in $ac_libdirs; do - if test -d $X/$Y; then - LIBS="-L$X/$Y $LIBS" - ac_libs="-L$X/$Y $ac_libs" - fi - done -done - -# A common error message: -ac_errmsg="not found in current PATH. Maybe QT development environment isn't available." - -if test "x$ac_qt4" = "xyes"; then - # Extract the first word of "qmake-qt4", so it can be a program name with args. -set dummy qmake-qt4; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_path_ac_qmake+:} false; then : - $as_echo_n "(cached) " >&6 -else - case $ac_qmake in - [\\/]* | ?:[\\/]*) - ac_cv_path_ac_qmake="$ac_qmake" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $ac_path -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_path_ac_qmake="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - - test -z "$ac_cv_path_ac_qmake" && ac_cv_path_ac_qmake="no" - ;; -esac -fi -ac_qmake=$ac_cv_path_ac_qmake -if test -n "$ac_qmake"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_qmake" >&5 -$as_echo "$ac_qmake" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -else - # Extract the first word of "qmake-qt5", so it can be a program name with args. -set dummy qmake-qt5; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_path_ac_qmake+:} false; then : - $as_echo_n "(cached) " >&6 -else - case $ac_qmake in - [\\/]* | ?:[\\/]*) - ac_cv_path_ac_qmake="$ac_qmake" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $ac_path -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_path_ac_qmake="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - - test -z "$ac_cv_path_ac_qmake" && ac_cv_path_ac_qmake="no" - ;; -esac -fi -ac_qmake=$ac_cv_path_ac_qmake -if test -n "$ac_qmake"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_qmake" >&5 -$as_echo "$ac_qmake" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test "x$ac_qmake" = "xno"; then - # Extract the first word of "qmake", so it can be a program name with args. -set dummy qmake; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_path_ac_cv_qmake+:} false; then : - $as_echo_n "(cached) " >&6 -else - case $ac_cv_qmake in - [\\/]* | ?:[\\/]*) - ac_cv_path_ac_cv_qmake="$ac_cv_qmake" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $ac_path -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_path_ac_cv_qmake="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - - test -z "$ac_cv_path_ac_cv_qmake" && ac_cv_path_ac_cv_qmake="no" - ;; -esac -fi -ac_cv_qmake=$ac_cv_path_ac_cv_qmake -if test -n "$ac_cv_qmake"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_qmake" >&5 -$as_echo "$ac_cv_qmake" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - ac_qmake=$ac_cv_qmake -fi -if test "x$ac_qmake" = "xno"; then - as_fn_error $? "qmake $ac_errmsg" "$LINENO" 5 -fi - -# Check for proper Qt major version. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for Qt major version" >&5 -$as_echo_n "checking for Qt major version... " >&6; } -if ${ac_cv_qt_version_major+:} false; then : - $as_echo_n "(cached) " >&6 -else - - ac_cv_qt_version_major=$($ac_qmake -query QT_VERSION | cut -d'.' -f1) - ac_cv_qt_version_major=$(($ac_cv_qt_version_major + 0)) - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_qt_version_major" >&5 -$as_echo "$ac_cv_qt_version_major" >&6; } -ac_qt_version_major=$ac_cv_qt_version_major -if test "x$ac_qt4" = "xyes"; then - if test $ac_qt_version_major -ne 4; then - as_fn_error $? "qmake-qt4 $ac_errmsg (qt4-devel)" "$LINENO" 5 - fi -else - if test $ac_qt_version_major -ne 5; then - as_fn_error $? "qmake-qt5 $ac_errmsg (qt5-devel)" "$LINENO" 5 - fi -fi - -# Check for proper Qt install path. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for Qt install path" >&5 -$as_echo_n "checking for Qt install path... " >&6; } -if ${ac_cv_qt_install_path+:} false; then : - $as_echo_n "(cached) " >&6 -else - - ac_cv_qt_install_path=$($ac_qmake -query QT_INSTALL_BINS) - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_qt_install_path" >&5 -$as_echo "$ac_cv_qt_install_path" >&6; } -ac_qt_install_path=$ac_cv_qt_install_path -if test -d $ac_qt_install_path; then - ac_path="$ac_qt_install_path:$ac_path" -fi - -# Check it again, now with updated PATH, just in case... -# Extract the first word of "qmake", so it can be a program name with args. -set dummy qmake; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_path_ac_cv_qmake+:} false; then : - $as_echo_n "(cached) " >&6 -else - case $ac_cv_qmake in - [\\/]* | ?:[\\/]*) - ac_cv_path_ac_cv_qmake="$ac_cv_qmake" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $ac_path -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_path_ac_cv_qmake="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - - test -z "$ac_cv_path_ac_cv_qmake" && ac_cv_path_ac_cv_qmake="no" - ;; -esac -fi -ac_cv_qmake=$ac_cv_path_ac_cv_qmake -if test -n "$ac_cv_qmake"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_qmake" >&5 -$as_echo "$ac_cv_qmake" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -ac_qmake=$ac_cv_qmake -if test "x$ac_qmake" = "xno"; then - as_fn_error $? "qmake $ac_errmsg" "$LINENO" 5 -fi - - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for Qt install headers" >&5 -$as_echo_n "checking for Qt install headers... " >&6; } -if ${ac_cv_qt_install_headers+:} false; then : - $as_echo_n "(cached) " >&6 -else - - ac_cv_qt_install_headers=$($ac_qmake -query QT_INSTALL_HEADERS) - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_qt_install_headers" >&5 -$as_echo "$ac_cv_qt_install_headers" >&6; } -ac_qt_install_headers=$ac_cv_qt_install_headers -if test -d $ac_qt_install_headers; then - CFLAGS="-I$ac_qt_install_headers $CFLAGS " - CPPFLAGS="-I$ac_qt_install_headers $CPPFLAGS" - ac_incpath="$ac_qt_install_headers $ac_incpath" -fi - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for Qt install libraries" >&5 -$as_echo_n "checking for Qt install libraries... " >&6; } -if ${ac_cv_qt_install_libs+:} false; then : - $as_echo_n "(cached) " >&6 -else - - ac_cv_qt_install_libs=$($ac_qmake -query QT_INSTALL_LIBS) - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_qt_install_libs" >&5 -$as_echo "$ac_cv_qt_install_libs" >&6; } -ac_qt_install_libs=$ac_cv_qt_install_libs -if test -d $ac_qt_install_libs; then - LIBS="-L$ac_qt_install_libs $LIBS" - ac_libs="-L$ac_qt_install_libs $ac_libs" -fi - -# Finally, check for proper Qt4/5 version. -if test "x$ac_qt4" = "xyes"; then - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for Qt library version >= 4.4" >&5 -$as_echo_n "checking for Qt library version >= 4.4... " >&6; } -if ${ac_cv_qtversion+:} false; then : - $as_echo_n "(cached) " >&6 -else - - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include "QtCore/qglobal.h" -int -main () -{ - - #if QT_VERSION < 0x040400 || QT_VERSION >= 0x050000 - #error Qt library 4.4 or greater required. - #endif - - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_compile "$LINENO"; then : - ac_cv_qtversion="yes" -else - - echo "no; Qt 4.4 or greater is required" - exit 1 - -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_qtversion" >&5 -$as_echo "$ac_cv_qtversion" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Qt library version >= 5.1" >&5 -$as_echo_n "checking for Qt library version >= 5.1... " >&6; } -if ${ac_cv_qtversion+:} false; then : - $as_echo_n "(cached) " >&6 -else - - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include "QtCore/qglobal.h" -int -main () -{ - - #if QT_VERSION < 0x050100 || QT_VERSION >= 0x060000 - #error Qt library 5.1 or greater required. - #endif - - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_compile "$LINENO"; then : - ac_cv_qtversion="yes" -else - - echo "no; Qt 5.1 or greater is required" - exit 1 - -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_qtversion" >&5 -$as_echo "$ac_cv_qtversion" >&6; } -fi - -# Check for Qt moc utility. -# Extract the first word of "moc", so it can be a program name with args. -set dummy moc; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_path_ac_moc+:} false; then : - $as_echo_n "(cached) " >&6 -else - case $ac_moc in - [\\/]* | ?:[\\/]*) - ac_cv_path_ac_moc="$ac_moc" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $ac_path -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_path_ac_moc="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - - test -z "$ac_cv_path_ac_moc" && ac_cv_path_ac_moc="no" - ;; -esac -fi -ac_moc=$ac_cv_path_ac_moc -if test -n "$ac_moc"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_moc" >&5 -$as_echo "$ac_moc" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -if test "x$ac_moc" = "xno"; then - as_fn_error $? "moc $ac_errmsg" "$LINENO" 5 -fi - - -# Check for Qt uic utility. -# Extract the first word of "uic", so it can be a program name with args. -set dummy uic; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_path_ac_uic+:} false; then : - $as_echo_n "(cached) " >&6 -else - case $ac_uic in - [\\/]* | ?:[\\/]*) - ac_cv_path_ac_uic="$ac_uic" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $ac_path -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_path_ac_uic="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - - test -z "$ac_cv_path_ac_uic" && ac_cv_path_ac_uic="no" - ;; -esac -fi -ac_uic=$ac_cv_path_ac_uic -if test -n "$ac_uic"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_uic" >&5 -$as_echo "$ac_uic" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -if test "x$ac_uic" = "xno"; then - as_fn_error $? "uic $ac_errmsg" "$LINENO" 5 -fi - - -# Check for Qt lupdate utility. -# Extract the first word of "lupdate", so it can be a program name with args. -set dummy lupdate; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_path_ac_lupdate+:} false; then : - $as_echo_n "(cached) " >&6 -else - case $ac_lupdate in - [\\/]* | ?:[\\/]*) - ac_cv_path_ac_lupdate="$ac_lupdate" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $ac_path -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_path_ac_lupdate="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - - test -z "$ac_cv_path_ac_lupdate" && ac_cv_path_ac_lupdate="no" - ;; -esac -fi -ac_lupdate=$ac_cv_path_ac_lupdate -if test -n "$ac_lupdate"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_lupdate" >&5 -$as_echo "$ac_lupdate" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -if test "x$ac_lupdate" = "xno"; then - as_fn_error $? "lupdate $ac_errmsg" "$LINENO" 5 -fi - - -# Check for Qt lrelease utility. -# Extract the first word of "lrelease", so it can be a program name with args. -set dummy lrelease; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_path_ac_lrelease+:} false; then : - $as_echo_n "(cached) " >&6 -else - case $ac_lrelease in - [\\/]* | ?:[\\/]*) - ac_cv_path_ac_lrelease="$ac_lrelease" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $ac_path -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_path_ac_lrelease="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - - test -z "$ac_cv_path_ac_lrelease" && ac_cv_path_ac_lrelease="no" - ;; -esac -fi -ac_lrelease=$ac_cv_path_ac_lrelease -if test -n "$ac_lrelease"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_lrelease" >&5 -$as_echo "$ac_lrelease" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -if test "x$ac_release" = "xno"; then - as_fn_error $? "lrelease $ac_errmsg" "$LINENO" 5 -fi - - - -# Checks for libraries. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for main in -lm" >&5 -$as_echo_n "checking for main in -lm... " >&6; } -if ${ac_cv_lib_m_main+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-lm $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - - -int -main () -{ -return main (); - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_link "$LINENO"; then : - ac_cv_lib_m_main=yes -else - ac_cv_lib_m_main=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_m_main" >&5 -$as_echo "$ac_cv_lib_m_main" >&6; } -if test "x$ac_cv_lib_m_main" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_LIBM 1 -_ACEOF - - LIBS="-lm $LIBS" - -fi - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for main in -lX11" >&5 -$as_echo_n "checking for main in -lX11... " >&6; } -if ${ac_cv_lib_X11_main+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-lX11 $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - - -int -main () -{ -return main (); - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_link "$LINENO"; then : - ac_cv_lib_X11_main=yes -else - ac_cv_lib_X11_main=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_X11_main" >&5 -$as_echo "$ac_cv_lib_X11_main" >&6; } -if test "x$ac_cv_lib_X11_main" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_LIBX11 1 -_ACEOF - - LIBS="-lX11 $LIBS" - -fi - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for main in -lXext" >&5 -$as_echo_n "checking for main in -lXext... " >&6; } -if ${ac_cv_lib_Xext_main+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-lXext $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - - -int -main () -{ -return main (); - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_link "$LINENO"; then : - ac_cv_lib_Xext_main=yes -else - ac_cv_lib_Xext_main=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_Xext_main" >&5 -$as_echo "$ac_cv_lib_Xext_main" >&6; } -if test "x$ac_cv_lib_Xext_main" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_LIBXEXT 1 -_ACEOF - - LIBS="-lXext $LIBS" - -fi - - -ac_cflags="-ffast-math $ac_cflags" - -ac_jack_cflags="$ac_cflags" -ac_jack_ldflags="$ac_ldflags" -ac_jack_incpath="$ac_incpath" -ac_jack_libs="$ac_libs" - -ac_lv2_cflags="$ac_cflags" -ac_lv2_ldflags="$ac_ldflags" -ac_lv2_incpath="$ac_incpath" -ac_lv2_libs="$ac_libs" - -ac_all_targets="" -ac_install_targets="" -ac_uninstall_targets="" -ac_clean_targets="" - - -# Check for JACK libraries. -if test "x$ac_jack" = "xyes"; then - -pkg_failed=no -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for jack >= 0.100.0" >&5 -$as_echo_n "checking for jack >= 0.100.0... " >&6; } - -if test -n "$JACK_CFLAGS"; then - pkg_cv_JACK_CFLAGS="$JACK_CFLAGS" - elif test -n "$PKG_CONFIG"; then - if test -n "$PKG_CONFIG" && \ - { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"jack >= 0.100.0\""; } >&5 - ($PKG_CONFIG --exists --print-errors "jack >= 0.100.0") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then - pkg_cv_JACK_CFLAGS=`$PKG_CONFIG --cflags "jack >= 0.100.0" 2>/dev/null` - test "x$?" != "x0" && pkg_failed=yes -else - pkg_failed=yes -fi - else - pkg_failed=untried -fi -if test -n "$JACK_LIBS"; then - pkg_cv_JACK_LIBS="$JACK_LIBS" - elif test -n "$PKG_CONFIG"; then - if test -n "$PKG_CONFIG" && \ - { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"jack >= 0.100.0\""; } >&5 - ($PKG_CONFIG --exists --print-errors "jack >= 0.100.0") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then - pkg_cv_JACK_LIBS=`$PKG_CONFIG --libs "jack >= 0.100.0" 2>/dev/null` - test "x$?" != "x0" && pkg_failed=yes -else - pkg_failed=yes -fi - else - pkg_failed=untried -fi - - - -if test $pkg_failed = yes; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } - -if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then - _pkg_short_errors_supported=yes -else - _pkg_short_errors_supported=no -fi - if test $_pkg_short_errors_supported = yes; then - JACK_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "jack >= 0.100.0" 2>&1` - else - JACK_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "jack >= 0.100.0" 2>&1` - fi - # Put the nasty error message in config.log where it belongs - echo "$JACK_PKG_ERRORS" >&5 - - ac_jack="no" -elif test $pkg_failed = untried; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } - ac_jack="no" -else - JACK_CFLAGS=$pkg_cv_JACK_CFLAGS - JACK_LIBS=$pkg_cv_JACK_LIBS - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } - ac_jack="yes" -fi - if test "x$ac_jack" = "xyes"; then - -$as_echo "#define CONFIG_JACK 1" >>confdefs.h - - ac_jack_cflags="$ac_jack_cflags $JACK_CFLAGS" - ac_jack_libs="$ac_jack_libs $JACK_LIBS" - CFLAGS="$CFLAGS $JACK_CFLAGS" - CPPFLAGS="$CPPFLAGS $JACK_CFLAGS" - LIBS="$LIBS $JACK_LIBS" - else - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: *** JACK library not found." >&5 -$as_echo "$as_me: WARNING: *** JACK library not found." >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: *** JACK stand-alone build will be disabled." >&5 -$as_echo "$as_me: WARNING: *** JACK stand-alone build will be disabled." >&2;} - fi -fi - -if test "x$ac_jack" = "xyes"; then - # Check for JACK session event callback availability. - if test "x$ac_jack_session" = "xyes"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for jack_set_session_callback in -ljack" >&5 -$as_echo_n "checking for jack_set_session_callback in -ljack... " >&6; } -if ${ac_cv_lib_jack_jack_set_session_callback+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-ljack $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char jack_set_session_callback (); -int -main () -{ -return jack_set_session_callback (); - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_link "$LINENO"; then : - ac_cv_lib_jack_jack_set_session_callback=yes -else - ac_cv_lib_jack_jack_set_session_callback=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_jack_jack_set_session_callback" >&5 -$as_echo "$ac_cv_lib_jack_jack_set_session_callback" >&6; } -if test "x$ac_cv_lib_jack_jack_set_session_callback" = xyes; then : - ac_jack_session="yes" -else - ac_jack_session="no" -fi - - else - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: *** JACK session support will be disabled." >&5 -$as_echo "$as_me: WARNING: *** JACK session support will be disabled." >&2;} - fi - # Check for ALSA libraries. - if test "x$ac_alsa_midi" = "xyes"; then - -pkg_failed=no -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for alsa" >&5 -$as_echo_n "checking for alsa... " >&6; } - -if test -n "$ALSA_CFLAGS"; then - pkg_cv_ALSA_CFLAGS="$ALSA_CFLAGS" - elif test -n "$PKG_CONFIG"; then - if test -n "$PKG_CONFIG" && \ - { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"alsa\""; } >&5 - ($PKG_CONFIG --exists --print-errors "alsa") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then - pkg_cv_ALSA_CFLAGS=`$PKG_CONFIG --cflags "alsa" 2>/dev/null` - test "x$?" != "x0" && pkg_failed=yes -else - pkg_failed=yes -fi - else - pkg_failed=untried -fi -if test -n "$ALSA_LIBS"; then - pkg_cv_ALSA_LIBS="$ALSA_LIBS" - elif test -n "$PKG_CONFIG"; then - if test -n "$PKG_CONFIG" && \ - { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"alsa\""; } >&5 - ($PKG_CONFIG --exists --print-errors "alsa") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then - pkg_cv_ALSA_LIBS=`$PKG_CONFIG --libs "alsa" 2>/dev/null` - test "x$?" != "x0" && pkg_failed=yes -else - pkg_failed=yes -fi - else - pkg_failed=untried -fi - - - -if test $pkg_failed = yes; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } - -if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then - _pkg_short_errors_supported=yes -else - _pkg_short_errors_supported=no -fi - if test $_pkg_short_errors_supported = yes; then - ALSA_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "alsa" 2>&1` - else - ALSA_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "alsa" 2>&1` - fi - # Put the nasty error message in config.log where it belongs - echo "$ALSA_PKG_ERRORS" >&5 - - ac_alsa_midi="no" -elif test $pkg_failed = untried; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } - ac_alsa_midi="no" -else - ALSA_CFLAGS=$pkg_cv_ALSA_CFLAGS - ALSA_LIBS=$pkg_cv_ALSA_LIBS - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } - ac_alsa_midi="yes" -fi - fi - if test "x$ac_alsa_midi" = "xyes"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for main in -lasound" >&5 -$as_echo_n "checking for main in -lasound... " >&6; } -if ${ac_cv_lib_asound_main+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-lasound $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - - -int -main () -{ -return main (); - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_link "$LINENO"; then : - ac_cv_lib_asound_main=yes -else - ac_cv_lib_asound_main=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_asound_main" >&5 -$as_echo "$ac_cv_lib_asound_main" >&6; } -if test "x$ac_cv_lib_asound_main" = xyes; then : - ac_alsa_midi="yes" -else - ac_alsa_midi="no" -fi - - if test "x$ac_alsa_midi" = "xyes"; then - -$as_echo "#define CONFIG_ALSA_MIDI 1" >>confdefs.h - - ac_jack_cflags="$ac_jack_cflags $ALSA_CFLAGS" - ac_jack_libs="$ac_jack_libs $ALSA_LIBS" - else - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: *** ALSA library not found." >&5 -$as_echo "$as_me: WARNING: *** ALSA library not found." >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: *** ALSA MIDI support will be disabled." >&5 -$as_echo "$as_me: WARNING: *** ALSA MIDI support will be disabled." >&2;} - fi - fi -fi - -# Check for JACK build support. -if test "x$ac_jack" = "xyes"; then - ac_all_targets="jack $ac_all_targets" - ac_install_targets="install_jack $ac_install_targets" - ac_uninstall_targets="uninstall_jack $ac_uninstall_targets" - ac_clean_targets="clean_jack $ac_clean_targets" -else - ac_jack_session="no" - ac_jack_midi="no" - ac_alsa_midi="no" - ac_liblo="no" - ac_nsm="no" -fi - -# Check for optional LIBLO library. -if test "x$ac_liblo" = "xyes"; then - -pkg_failed=no -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for liblo" >&5 -$as_echo_n "checking for liblo... " >&6; } - -if test -n "$LIBLO_CFLAGS"; then - pkg_cv_LIBLO_CFLAGS="$LIBLO_CFLAGS" - elif test -n "$PKG_CONFIG"; then - if test -n "$PKG_CONFIG" && \ - { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"liblo\""; } >&5 - ($PKG_CONFIG --exists --print-errors "liblo") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then - pkg_cv_LIBLO_CFLAGS=`$PKG_CONFIG --cflags "liblo" 2>/dev/null` - test "x$?" != "x0" && pkg_failed=yes -else - pkg_failed=yes -fi - else - pkg_failed=untried -fi -if test -n "$LIBLO_LIBS"; then - pkg_cv_LIBLO_LIBS="$LIBLO_LIBS" - elif test -n "$PKG_CONFIG"; then - if test -n "$PKG_CONFIG" && \ - { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"liblo\""; } >&5 - ($PKG_CONFIG --exists --print-errors "liblo") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then - pkg_cv_LIBLO_LIBS=`$PKG_CONFIG --libs "liblo" 2>/dev/null` - test "x$?" != "x0" && pkg_failed=yes -else - pkg_failed=yes -fi - else - pkg_failed=untried -fi - - - -if test $pkg_failed = yes; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } - -if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then - _pkg_short_errors_supported=yes -else - _pkg_short_errors_supported=no -fi - if test $_pkg_short_errors_supported = yes; then - LIBLO_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "liblo" 2>&1` - else - LIBLO_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "liblo" 2>&1` - fi - # Put the nasty error message in config.log where it belongs - echo "$LIBLO_PKG_ERRORS" >&5 - - ac_liblo="no" -elif test $pkg_failed = untried; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } - ac_liblo="no" -else - LIBLO_CFLAGS=$pkg_cv_LIBLO_CFLAGS - LIBLO_LIBS=$pkg_cv_LIBLO_LIBS - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } - ac_liblo="yes" -fi - if test "x$ac_liblo" = "xyes"; then - -$as_echo "#define CONFIG_LIBLO 1" >>confdefs.h - - ac_jack_cflags="$ac_jack_cflags $LIBLO_CFLAGS" - ac_jack_libs="$ac_jack_libs $LIBLO_LIBS" - else - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: *** LIBLO library not found." >&5 -$as_echo "$as_me: WARNING: *** LIBLO library not found." >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: *** OSC service support will be disabled." >&5 -$as_echo "$as_me: WARNING: *** OSC service support will be disabled." >&2;} - ac_nsm="no" - fi -else - ac_nsm="no" -fi - - -# Checks for header files. - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 -$as_echo_n "checking for grep that handles long lines and -e... " >&6; } -if ${ac_cv_path_GREP+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -z "$GREP"; then - ac_path_GREP_found=false - # Loop through the user's path and test for each of PROGNAME-LIST - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_prog in grep ggrep; do - for ac_exec_ext in '' $ac_executable_extensions; do - ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext" - as_fn_executable_p "$ac_path_GREP" || continue -# Check for GNU ac_path_GREP and select it if it is found. - # Check for GNU $ac_path_GREP -case `"$ac_path_GREP" --version 2>&1` in -*GNU*) - ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; -*) - ac_count=0 - $as_echo_n 0123456789 >"conftest.in" - while : - do - cat "conftest.in" "conftest.in" >"conftest.tmp" - mv "conftest.tmp" "conftest.in" - cp "conftest.in" "conftest.nl" - $as_echo 'GREP' >> "conftest.nl" - "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break - diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break - as_fn_arith $ac_count + 1 && ac_count=$as_val - if test $ac_count -gt ${ac_path_GREP_max-0}; then - # Best one so far, save it but keep looking for a better one - ac_cv_path_GREP="$ac_path_GREP" - ac_path_GREP_max=$ac_count - fi - # 10*(2^10) chars as input seems more than enough - test $ac_count -gt 10 && break - done - rm -f conftest.in conftest.tmp conftest.nl conftest.out;; -esac - - $ac_path_GREP_found && break 3 - done - done - done -IFS=$as_save_IFS - if test -z "$ac_cv_path_GREP"; then - as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 - fi -else - ac_cv_path_GREP=$GREP -fi - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5 -$as_echo "$ac_cv_path_GREP" >&6; } - GREP="$ac_cv_path_GREP" - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5 -$as_echo_n "checking for egrep... " >&6; } -if ${ac_cv_path_EGREP+:} false; then : - $as_echo_n "(cached) " >&6 -else - if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 - then ac_cv_path_EGREP="$GREP -E" - else - if test -z "$EGREP"; then - ac_path_EGREP_found=false - # Loop through the user's path and test for each of PROGNAME-LIST - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_prog in egrep; do - for ac_exec_ext in '' $ac_executable_extensions; do - ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext" - as_fn_executable_p "$ac_path_EGREP" || continue -# Check for GNU ac_path_EGREP and select it if it is found. - # Check for GNU $ac_path_EGREP -case `"$ac_path_EGREP" --version 2>&1` in -*GNU*) - ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; -*) - ac_count=0 - $as_echo_n 0123456789 >"conftest.in" - while : - do - cat "conftest.in" "conftest.in" >"conftest.tmp" - mv "conftest.tmp" "conftest.in" - cp "conftest.in" "conftest.nl" - $as_echo 'EGREP' >> "conftest.nl" - "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break - diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break - as_fn_arith $ac_count + 1 && ac_count=$as_val - if test $ac_count -gt ${ac_path_EGREP_max-0}; then - # Best one so far, save it but keep looking for a better one - ac_cv_path_EGREP="$ac_path_EGREP" - ac_path_EGREP_max=$ac_count - fi - # 10*(2^10) chars as input seems more than enough - test $ac_count -gt 10 && break - done - rm -f conftest.in conftest.tmp conftest.nl conftest.out;; -esac - - $ac_path_EGREP_found && break 3 - done - done - done -IFS=$as_save_IFS - if test -z "$ac_cv_path_EGREP"; then - as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 - fi -else - ac_cv_path_EGREP=$EGREP -fi - - fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5 -$as_echo "$ac_cv_path_EGREP" >&6; } - EGREP="$ac_cv_path_EGREP" - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 -$as_echo_n "checking for ANSI C header files... " >&6; } -if ${ac_cv_header_stdc+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -#include -#include -#include - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_compile "$LINENO"; then : - ac_cv_header_stdc=yes -else - ac_cv_header_stdc=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - -if test $ac_cv_header_stdc = yes; then - # SunOS 4.x string.h does not declare mem*, contrary to ANSI. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include - -_ACEOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "memchr" >/dev/null 2>&1; then : - -else - ac_cv_header_stdc=no -fi -rm -f conftest* - -fi - -if test $ac_cv_header_stdc = yes; then - # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include - -_ACEOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "free" >/dev/null 2>&1; then : - -else - ac_cv_header_stdc=no -fi -rm -f conftest* - -fi - -if test $ac_cv_header_stdc = yes; then - # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. - if test "$cross_compiling" = yes; then : - : -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -#include -#if ((' ' & 0x0FF) == 0x020) -# define ISLOWER(c) ('a' <= (c) && (c) <= 'z') -# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) -#else -# define ISLOWER(c) \ - (('a' <= (c) && (c) <= 'i') \ - || ('j' <= (c) && (c) <= 'r') \ - || ('s' <= (c) && (c) <= 'z')) -# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) -#endif - -#define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) -int -main () -{ - int i; - for (i = 0; i < 256; i++) - if (XOR (islower (i), ISLOWER (i)) - || toupper (i) != TOUPPER (i)) - return 2; - return 0; -} -_ACEOF -if ac_fn_cxx_try_run "$LINENO"; then : - -else - ac_cv_header_stdc=no -fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext -fi - -fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5 -$as_echo "$ac_cv_header_stdc" >&6; } -if test $ac_cv_header_stdc = yes; then - -$as_echo "#define STDC_HEADERS 1" >>confdefs.h - -fi - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for sys/wait.h that is POSIX.1 compatible" >&5 -$as_echo_n "checking for sys/wait.h that is POSIX.1 compatible... " >&6; } -if ${ac_cv_header_sys_wait_h+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -#include -#ifndef WEXITSTATUS -# define WEXITSTATUS(stat_val) ((unsigned int) (stat_val) >> 8) -#endif -#ifndef WIFEXITED -# define WIFEXITED(stat_val) (((stat_val) & 255) == 0) -#endif - -int -main () -{ - int s; - wait (&s); - s = WIFEXITED (s) ? WEXITSTATUS (s) : 1; - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_compile "$LINENO"; then : - ac_cv_header_sys_wait_h=yes -else - ac_cv_header_sys_wait_h=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_sys_wait_h" >&5 -$as_echo "$ac_cv_header_sys_wait_h" >&6; } -if test $ac_cv_header_sys_wait_h = yes; then - -$as_echo "#define HAVE_SYS_WAIT_H 1" >>confdefs.h - -fi - -# On IRIX 5.3, sys/types and inttypes.h are conflicting. -for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ - inttypes.h stdint.h unistd.h -do : - as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` -ac_fn_cxx_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default -" -if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : - cat >>confdefs.h <<_ACEOF -#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 -_ACEOF - -fi - -done - - -for ac_header in fcntl.h sys/ioctl.h sys/stat.h unistd.h signal.h -do : - as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` -ac_fn_cxx_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" -if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : - cat >>confdefs.h <<_ACEOF -#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 -_ACEOF - -fi - -done - - - -# Check for JACK session headers availability. -if test "x$ac_jack_session" = "xyes"; then - ac_fn_cxx_check_header_mongrel "$LINENO" "jack/session.h" "ac_cv_header_jack_session_h" "$ac_includes_default" -if test "x$ac_cv_header_jack_session_h" = xyes; then : - ac_jack_session="yes" -else - ac_jack_session="no" -fi - - - if test "x$ac_jack_session" = "xyes"; then - -$as_echo "#define CONFIG_JACK_SESSION 1" >>confdefs.h - - else - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: *** JACK session header file not found." >&5 -$as_echo "$as_me: WARNING: *** JACK session header file not found." >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: *** JACK session support will be disabled." >&5 -$as_echo "$as_me: WARNING: *** JACK session support will be disabled." >&2;} - fi -fi - -# Check for JACK MIDI headers availability. -if test "x$ac_jack_midi" = "xyes"; then - ac_fn_cxx_check_header_mongrel "$LINENO" "jack/midiport.h" "ac_cv_header_jack_midiport_h" "$ac_includes_default" -if test "x$ac_cv_header_jack_midiport_h" = xyes; then : - ac_jack_midi="yes" -else - ac_jack_midi="no" -fi - - - if test "x$ac_jack_midi" = "xyes"; then - -$as_echo "#define CONFIG_JACK_MIDI 1" >>confdefs.h - - else - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: *** JACK MIDI header files not found." >&5 -$as_echo "$as_me: WARNING: *** JACK MIDI header files not found." >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: *** JACK MIDI support will be disabled." >&5 -$as_echo "$as_me: WARNING: *** JACK MIDI support will be disabled." >&2;} - fi -fi - -# Check for LV2 headers. -if test "x$ac_lv2" = "xyes"; then - for ac_header in lv2.h \ - lv2/lv2plug.in/ns/ext/atom/atom.h \ - lv2/lv2plug.in/ns/ext/atom/forge.h \ - lv2/lv2plug.in/ns/ext/atom/util.h -do : - as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` -ac_fn_cxx_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" -if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : - cat >>confdefs.h <<_ACEOF -#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 -_ACEOF - ac_lv2="yes" -else - ac_lv2="no" -fi - -done - - if test "x$ac_lv2" = "xyes"; then - -$as_echo "#define CONFIG_LV2 1" >>confdefs.h - - ac_all_targets="lv2 $ac_all_targets" - ac_install_targets="install_lv2 $ac_install_targets" - ac_uninstall_targets="uninstall_lv2 $ac_uninstall_targets" - ac_clean_targets="clean_lv2 $ac_clean_targets" - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for lv2_atom_forge_object" >&5 -$as_echo_n "checking for lv2_atom_forge_object... " >&6; } -if ${ac_cv_lv2_atom_forge_object+:} false; then : - $as_echo_n "(cached) " >&6 -else - - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include "lv2/lv2plug.in/ns/ext/atom/forge.h" -int -main () -{ - - // Checking for lv2_atom_forge_object... - LV2_Atom_Forge *forge; - LV2_Atom_Forge_Frame *frame; - lv2_atom_forge_object(forge, frame, 0, 101); - - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_link "$LINENO"; then : - ac_cv_lv2_atom_forge_object="yes" -else - ac_cv_lv2_atom_forge_object="no" -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lv2_atom_forge_object" >&5 -$as_echo "$ac_cv_lv2_atom_forge_object" >&6; } - ac_lv2_atom_forge_object=$ac_cv_lv2_atom_forge_object - if test "x$ac_lv2_atom_forge_object" = "xyes"; then - -$as_echo "#define CONFIG_LV2_ATOM_FORGE_OBJECT 1" >>confdefs.h - - fi - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for lv2_atom_forge_key" >&5 -$as_echo_n "checking for lv2_atom_forge_key... " >&6; } -if ${ac_cv_lv2_atom_forge_key+:} false; then : - $as_echo_n "(cached) " >&6 -else - - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include "lv2/lv2plug.in/ns/ext/atom/forge.h" -int -main () -{ - - // Checking for lv2_atom_forge_key... - LV2_Atom_Forge *forge; - lv2_atom_forge_key(forge, 102); - - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_link "$LINENO"; then : - ac_cv_lv2_atom_forge_key="yes" -else - ac_cv_lv2_atom_forge_key="no" -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lv2_atom_forge_key" >&5 -$as_echo "$ac_cv_lv2_atom_forge_key" >&6; } - ac_lv2_atom_forge_key=$ac_cv_lv2_atom_forge_key - if test "x$ac_lv2_atom_forge_key" = "xyes"; then - -$as_echo "#define CONFIG_LV2_ATOM_FORGE_KEY 1" >>confdefs.h - - fi - else - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: *** LV2 header files not found." >&5 -$as_echo "$as_me: WARNING: *** LV2 header files not found." >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: *** LV2 plug-in build will be disabled." >&5 -$as_echo "$as_me: WARNING: *** LV2 plug-in build will be disabled." >&2;} - fi -fi - -if test "x$ac_lv2" = "xno"; then - lv2_external_ui="no" - ac_lv2_ui_idle="no" - ac_lv2_ui_show="no" - ac_lv2_programs="no" -fi - -if test "x$ac_lv2_external_ui" = "xyes"; then - CFLAGS="$CFLAGS -Isrc/lv2" - CPPFLAGS="$CPPFLAGS -Isrc/lv2" - ac_fn_cxx_check_header_mongrel "$LINENO" "lv2_external_ui.h" "ac_cv_header_lv2_external_ui_h" "$ac_includes_default" -if test "x$ac_cv_header_lv2_external_ui_h" = xyes; then : - ac_lv2_external_ui="yes" -else - ac_lv2_external_ui="no" -fi - - - if test "x$ac_lv2_external_ui" = "xyes"; then - -$as_echo "#define CONFIG_LV2_EXTERNAL_UI 1" >>confdefs.h - - ac_lv2_incpath="lv2 $ac_lv2_incpath" - else - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: *** LV2 External UI extension will be disabled." >&5 -$as_echo "$as_me: WARNING: *** LV2 External UI extension will be disabled." >&2;} - fi -fi - -if test "x$ac_lv2_ui_idle" = "xyes"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for LV2 UI Idle interface" >&5 -$as_echo_n "checking for LV2 UI Idle interface... " >&6; } -if ${ac_cv_lv2_ui_idle+:} false; then : - $as_echo_n "(cached) " >&6 -else - - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include "lv2/lv2plug.in/ns/extensions/ui/ui.h" -int -main () -{ - - // Checking for LV2 UI Idle interface... - LV2UI_Idle_Interface idle; - - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_link "$LINENO"; then : - ac_cv_lv2_ui_idle="yes" -else - ac_cv_lv2_ui_idle="no" -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lv2_ui_idle" >&5 -$as_echo "$ac_cv_lv2_ui_idle" >&6; } - ac_lv2_ui_idle=$ac_cv_lv2_ui_idle - if test "x$ac_lv2_ui_idle" = "xyes"; then - -$as_echo "#define CONFIG_LV2_UI_IDLE 1" >>confdefs.h - - else - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: *** LV2 UI Idle interface support will be disabled." >&5 -$as_echo "$as_me: WARNING: *** LV2 UI Idle interface support will be disabled." >&2;} - fi -fi - -if test "x$ac_lv2_ui_show" = "xyes"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for LV2 UI Show interface" >&5 -$as_echo_n "checking for LV2 UI Show interface... " >&6; } -if ${ac_cv_lv2_ui_show+:} false; then : - $as_echo_n "(cached) " >&6 -else - - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include "lv2/lv2plug.in/ns/extensions/ui/ui.h" -int -main () -{ - - // Checking for LV2 UI Show interface... - LV2UI_Show_Interface show; - - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_link "$LINENO"; then : - ac_cv_lv2_ui_show="yes" -else - ac_cv_lv2_ui_show="no" -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lv2_ui_show" >&5 -$as_echo "$ac_cv_lv2_ui_show" >&6; } - ac_lv2_ui_show=$ac_cv_lv2_ui_show - if test "x$ac_lv2_ui_show" = "xyes"; then - -$as_echo "#define CONFIG_LV2_UI_SHOW 1" >>confdefs.h - - else - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: *** LV2 UI Show interface support will be disabled." >&5 -$as_echo "$as_me: WARNING: *** LV2 UI Show interface support will be disabled." >&2;} - fi -fi - -if test "x$ac_lv2_programs" = "xyes"; then - ac_fn_cxx_check_header_mongrel "$LINENO" "lv2_programs.h" "ac_cv_header_lv2_programs_h" "$ac_includes_default" -if test "x$ac_cv_header_lv2_programs_h" = xyes; then : - ac_lv2_programs="yes" -else - ac_lv2_programs="no" -fi - - - if test "x$ac_lv2_programs" = "xyes"; then - -$as_echo "#define CONFIG_LV2_PROGRAMS 1" >>confdefs.h - - ac_lv2_incpath="lv2 $ac_lv2_incpath" - else - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: *** LV2 Programs extension will be disabled." >&5 -$as_echo "$as_me: WARNING: *** LV2 Programs extension will be disabled." >&2;} - fi -fi - -# Check for NSM support. -if test "x$ac_nsm" = "xyes"; then - -$as_echo "#define CONFIG_NSM 1" >>confdefs.h - -fi - - -# Checks for build targets -if test "x$ac_jack" = "xno" -a "x$ac_lv2" = "xno"; then - as_fn_error $? "*** JACK and LV2 build options disabled." "$LINENO" 5 -fi - -if test "x$ac_jack" = "xyes"; then - if test "x$ac_jack_midi" = "xno" -a "x$ac_alsa_midi" = "xno"; then - as_fn_error $? "*** JACK MIDI and ALSA MIDI support disabled." "$LINENO" 5 - fi -fi - - - - - - - - - - - - - - - - - - - - - - -# Checks for typedefs, structures, and compiler characteristics. -# AC_C_CONST - -# Finally produce a configure header file and the makefiles. -cat >confcache <<\_ACEOF -# This file is a shell script that caches the results of configure -# tests run on this system so they can be shared between configure -# scripts and configure runs, see configure's option --config-cache. -# It is not useful on other systems. If it contains results you don't -# want to keep, you may remove or edit it. -# -# config.status only pays attention to the cache file if you give it -# the --recheck option to rerun configure. -# -# `ac_cv_env_foo' variables (set or unset) will be overridden when -# loading this file, other *unset* `ac_cv_foo' will be assigned the -# following values. - -_ACEOF - -# The following way of writing the cache mishandles newlines in values, -# but we know of no workaround that is simple, portable, and efficient. -# So, we kill variables containing newlines. -# Ultrix sh set writes to stderr and can't be redirected directly, -# and sets the high bit in the cache file unless we assign to the vars. -( - for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do - eval ac_val=\$$ac_var - case $ac_val in #( - *${as_nl}*) - case $ac_var in #( - *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 -$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; - esac - case $ac_var in #( - _ | IFS | as_nl) ;; #( - BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( - *) { eval $ac_var=; unset $ac_var;} ;; - esac ;; - esac - done - - (set) 2>&1 | - case $as_nl`(ac_space=' '; set) 2>&1` in #( - *${as_nl}ac_space=\ *) - # `set' does not quote correctly, so add quotes: double-quote - # substitution turns \\\\ into \\, and sed turns \\ into \. - sed -n \ - "s/'/'\\\\''/g; - s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" - ;; #( - *) - # `set' quotes correctly as required by POSIX, so do not add quotes. - sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" - ;; - esac | - sort -) | - sed ' - /^ac_cv_env_/b end - t clear - :clear - s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ - t end - s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ - :end' >>confcache -if diff "$cache_file" confcache >/dev/null 2>&1; then :; else - if test -w "$cache_file"; then - if test "x$cache_file" != "x/dev/null"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 -$as_echo "$as_me: updating cache $cache_file" >&6;} - if test ! -f "$cache_file" || test -h "$cache_file"; then - cat confcache >"$cache_file" - else - case $cache_file in #( - */* | ?:*) - mv -f confcache "$cache_file"$$ && - mv -f "$cache_file"$$ "$cache_file" ;; #( - *) - mv -f confcache "$cache_file" ;; - esac - fi - fi - else - { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 -$as_echo "$as_me: not updating unwritable cache $cache_file" >&6;} - fi -fi -rm -f confcache - -test "x$prefix" = xNONE && prefix=$ac_default_prefix -# Let make expand exec_prefix. -test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' - -DEFS=-DHAVE_CONFIG_H - -ac_libobjs= -ac_ltlibobjs= -U= -for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue - # 1. Remove the extension, and $U if already installed. - ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' - ac_i=`$as_echo "$ac_i" | sed "$ac_script"` - # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR - # will be set to the directory where LIBOBJS objects are built. - as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext" - as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo' -done -LIBOBJS=$ac_libobjs - -LTLIBOBJS=$ac_ltlibobjs - - - -: "${CONFIG_STATUS=./config.status}" -ac_write_fail=0 -ac_clean_files_save=$ac_clean_files -ac_clean_files="$ac_clean_files $CONFIG_STATUS" -{ $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 -$as_echo "$as_me: creating $CONFIG_STATUS" >&6;} -as_write_fail=0 -cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1 -#! $SHELL -# Generated by $as_me. -# Run this file to recreate the current configuration. -# Compiler output produced by configure, useful for debugging -# configure, is in config.log if it exists. - -debug=false -ac_cs_recheck=false -ac_cs_silent=false - -SHELL=\${CONFIG_SHELL-$SHELL} -export SHELL -_ASEOF -cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1 -## -------------------- ## -## M4sh Initialization. ## -## -------------------- ## - -# Be more Bourne compatible -DUALCASE=1; export DUALCASE # for MKS sh -if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : - emulate sh - NULLCMD=: - # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which - # is contrary to our usage. Disable this feature. - alias -g '${1+"$@"}'='"$@"' - setopt NO_GLOB_SUBST -else - case `(set -o) 2>/dev/null` in #( - *posix*) : - set -o posix ;; #( - *) : - ;; -esac -fi - - -as_nl=' -' -export as_nl -# Printing a long string crashes Solaris 7 /usr/bin/printf. -as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' -as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo -as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo -# Prefer a ksh shell builtin over an external printf program on Solaris, -# but without wasting forks for bash or zsh. -if test -z "$BASH_VERSION$ZSH_VERSION" \ - && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then - as_echo='print -r --' - as_echo_n='print -rn --' -elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then - as_echo='printf %s\n' - as_echo_n='printf %s' -else - if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then - as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' - as_echo_n='/usr/ucb/echo -n' - else - as_echo_body='eval expr "X$1" : "X\\(.*\\)"' - as_echo_n_body='eval - arg=$1; - case $arg in #( - *"$as_nl"*) - expr "X$arg" : "X\\(.*\\)$as_nl"; - arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; - esac; - expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" - ' - export as_echo_n_body - as_echo_n='sh -c $as_echo_n_body as_echo' - fi - export as_echo_body - as_echo='sh -c $as_echo_body as_echo' -fi - -# The user is always right. -if test "${PATH_SEPARATOR+set}" != set; then - PATH_SEPARATOR=: - (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { - (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || - PATH_SEPARATOR=';' - } -fi - - -# IFS -# We need space, tab and new line, in precisely that order. Quoting is -# there to prevent editors from complaining about space-tab. -# (If _AS_PATH_WALK were called with IFS unset, it would disable word -# splitting by setting IFS to empty value.) -IFS=" "" $as_nl" - -# Find who we are. Look in the path if we contain no directory separator. -as_myself= -case $0 in #(( - *[\\/]* ) as_myself=$0 ;; - *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break - done -IFS=$as_save_IFS - - ;; -esac -# We did not find ourselves, most probably we were run as `sh COMMAND' -# in which case we are not to be found in the path. -if test "x$as_myself" = x; then - as_myself=$0 -fi -if test ! -f "$as_myself"; then - $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 - exit 1 -fi - -# Unset variables that we do not need and which cause bugs (e.g. in -# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" -# suppresses any "Segmentation fault" message there. '((' could -# trigger a bug in pdksh 5.2.14. -for as_var in BASH_ENV ENV MAIL MAILPATH -do eval test x\${$as_var+set} = xset \ - && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : -done -PS1='$ ' -PS2='> ' -PS4='+ ' - -# NLS nuisances. -LC_ALL=C -export LC_ALL -LANGUAGE=C -export LANGUAGE - -# CDPATH. -(unset CDPATH) >/dev/null 2>&1 && unset CDPATH - - -# as_fn_error STATUS ERROR [LINENO LOG_FD] -# ---------------------------------------- -# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are -# provided, also output the error to LOG_FD, referencing LINENO. Then exit the -# script with STATUS, using 1 if that was 0. -as_fn_error () -{ - as_status=$1; test $as_status -eq 0 && as_status=1 - if test "$4"; then - as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 - fi - $as_echo "$as_me: error: $2" >&2 - as_fn_exit $as_status -} # as_fn_error - - -# as_fn_set_status STATUS -# ----------------------- -# Set $? to STATUS, without forking. -as_fn_set_status () -{ - return $1 -} # as_fn_set_status - -# as_fn_exit STATUS -# ----------------- -# Exit the shell with STATUS, even in a "trap 0" or "set -e" context. -as_fn_exit () -{ - set +e - as_fn_set_status $1 - exit $1 -} # as_fn_exit - -# as_fn_unset VAR -# --------------- -# Portably unset VAR. -as_fn_unset () -{ - { eval $1=; unset $1;} -} -as_unset=as_fn_unset -# as_fn_append VAR VALUE -# ---------------------- -# Append the text in VALUE to the end of the definition contained in VAR. Take -# advantage of any shell optimizations that allow amortized linear growth over -# repeated appends, instead of the typical quadratic growth present in naive -# implementations. -if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : - eval 'as_fn_append () - { - eval $1+=\$2 - }' -else - as_fn_append () - { - eval $1=\$$1\$2 - } -fi # as_fn_append - -# as_fn_arith ARG... -# ------------------ -# Perform arithmetic evaluation on the ARGs, and store the result in the -# global $as_val. Take advantage of shells that can avoid forks. The arguments -# must be portable across $(()) and expr. -if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : - eval 'as_fn_arith () - { - as_val=$(( $* )) - }' -else - as_fn_arith () - { - as_val=`expr "$@" || test $? -eq 1` - } -fi # as_fn_arith - - -if expr a : '\(a\)' >/dev/null 2>&1 && - test "X`expr 00001 : '.*\(...\)'`" = X001; then - as_expr=expr -else - as_expr=false -fi - -if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then - as_basename=basename -else - as_basename=false -fi - -if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then - as_dirname=dirname -else - as_dirname=false -fi - -as_me=`$as_basename -- "$0" || -$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ - X"$0" : 'X\(//\)$' \| \ - X"$0" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X/"$0" | - sed '/^.*\/\([^/][^/]*\)\/*$/{ - s//\1/ - q - } - /^X\/\(\/\/\)$/{ - s//\1/ - q - } - /^X\/\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - -# Avoid depending upon Character Ranges. -as_cr_letters='abcdefghijklmnopqrstuvwxyz' -as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' -as_cr_Letters=$as_cr_letters$as_cr_LETTERS -as_cr_digits='0123456789' -as_cr_alnum=$as_cr_Letters$as_cr_digits - -ECHO_C= ECHO_N= ECHO_T= -case `echo -n x` in #((((( --n*) - case `echo 'xy\c'` in - *c*) ECHO_T=' ';; # ECHO_T is single tab character. - xy) ECHO_C='\c';; - *) echo `echo ksh88 bug on AIX 6.1` > /dev/null - ECHO_T=' ';; - esac;; -*) - ECHO_N='-n';; -esac - -rm -f conf$$ conf$$.exe conf$$.file -if test -d conf$$.dir; then - rm -f conf$$.dir/conf$$.file -else - rm -f conf$$.dir - mkdir conf$$.dir 2>/dev/null -fi -if (echo >conf$$.file) 2>/dev/null; then - if ln -s conf$$.file conf$$ 2>/dev/null; then - as_ln_s='ln -s' - # ... but there are two gotchas: - # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. - # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. - # In both cases, we have to default to `cp -pR'. - ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || - as_ln_s='cp -pR' - elif ln conf$$.file conf$$ 2>/dev/null; then - as_ln_s=ln - else - as_ln_s='cp -pR' - fi -else - as_ln_s='cp -pR' -fi -rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file -rmdir conf$$.dir 2>/dev/null - - -# as_fn_mkdir_p -# ------------- -# Create "$as_dir" as a directory, including parents if necessary. -as_fn_mkdir_p () -{ - - case $as_dir in #( - -*) as_dir=./$as_dir;; - esac - test -d "$as_dir" || eval $as_mkdir_p || { - as_dirs= - while :; do - case $as_dir in #( - *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( - *) as_qdir=$as_dir;; - esac - as_dirs="'$as_qdir' $as_dirs" - as_dir=`$as_dirname -- "$as_dir" || -$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$as_dir" : 'X\(//\)[^/]' \| \ - X"$as_dir" : 'X\(//\)$' \| \ - X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X"$as_dir" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ - s//\1/ - q - } - /^X\(\/\/\)[^/].*/{ - s//\1/ - q - } - /^X\(\/\/\)$/{ - s//\1/ - q - } - /^X\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - test -d "$as_dir" && break - done - test -z "$as_dirs" || eval "mkdir $as_dirs" - } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" - - -} # as_fn_mkdir_p -if mkdir -p . 2>/dev/null; then - as_mkdir_p='mkdir -p "$as_dir"' -else - test -d ./-p && rmdir ./-p - as_mkdir_p=false -fi - - -# as_fn_executable_p FILE -# ----------------------- -# Test if FILE is an executable regular file. -as_fn_executable_p () -{ - test -f "$1" && test -x "$1" -} # as_fn_executable_p -as_test_x='test -x' -as_executable_p=as_fn_executable_p - -# Sed expression to map a string onto a valid CPP name. -as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" - -# Sed expression to map a string onto a valid variable name. -as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" - - -exec 6>&1 -## ----------------------------------- ## -## Main body of $CONFIG_STATUS script. ## -## ----------------------------------- ## -_ASEOF -test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1 - -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 -# Save the log message, to keep $0 and so on meaningful, and to -# report actual input values of CONFIG_FILES etc. instead of their -# values after options handling. -ac_log=" -This file was extended by synthv1 $as_me 0.8.6, which was -generated by GNU Autoconf 2.69. Invocation command line was - - CONFIG_FILES = $CONFIG_FILES - CONFIG_HEADERS = $CONFIG_HEADERS - CONFIG_LINKS = $CONFIG_LINKS - CONFIG_COMMANDS = $CONFIG_COMMANDS - $ $0 $@ - -on `(hostname || uname -n) 2>/dev/null | sed 1q` -" - -_ACEOF - -case $ac_config_files in *" -"*) set x $ac_config_files; shift; ac_config_files=$*;; -esac - -case $ac_config_headers in *" -"*) set x $ac_config_headers; shift; ac_config_headers=$*;; -esac - - -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 -# Files that config.status was made for. -config_files="$ac_config_files" -config_headers="$ac_config_headers" - -_ACEOF - -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 -ac_cs_usage="\ -\`$as_me' instantiates files and other configuration actions -from templates according to the current configuration. Unless the files -and actions are specified as TAGs, all are instantiated by default. - -Usage: $0 [OPTION]... [TAG]... - - -h, --help print this help, then exit - -V, --version print version number and configuration settings, then exit - --config print configuration, then exit - -q, --quiet, --silent - do not print progress messages - -d, --debug don't remove temporary files - --recheck update $as_me by reconfiguring in the same conditions - --file=FILE[:TEMPLATE] - instantiate the configuration file FILE - --header=FILE[:TEMPLATE] - instantiate the configuration header FILE - -Configuration files: -$config_files - -Configuration headers: -$config_headers - -Report bugs to ." - -_ACEOF -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 -ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" -ac_cs_version="\\ -synthv1 config.status 0.8.6 -configured by $0, generated by GNU Autoconf 2.69, - with options \\"\$ac_cs_config\\" - -Copyright (C) 2012 Free Software Foundation, Inc. -This config.status script is free software; the Free Software Foundation -gives unlimited permission to copy, distribute and modify it." - -ac_pwd='$ac_pwd' -srcdir='$srcdir' -test -n "\$AWK" || AWK=awk -_ACEOF - -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 -# The default lists apply if the user does not specify any file. -ac_need_defaults=: -while test $# != 0 -do - case $1 in - --*=?*) - ac_option=`expr "X$1" : 'X\([^=]*\)='` - ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` - ac_shift=: - ;; - --*=) - ac_option=`expr "X$1" : 'X\([^=]*\)='` - ac_optarg= - ac_shift=: - ;; - *) - ac_option=$1 - ac_optarg=$2 - ac_shift=shift - ;; - esac - - case $ac_option in - # Handling of the options. - -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) - ac_cs_recheck=: ;; - --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) - $as_echo "$ac_cs_version"; exit ;; - --config | --confi | --conf | --con | --co | --c ) - $as_echo "$ac_cs_config"; exit ;; - --debug | --debu | --deb | --de | --d | -d ) - debug=: ;; - --file | --fil | --fi | --f ) - $ac_shift - case $ac_optarg in - *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; - '') as_fn_error $? "missing file argument" ;; - esac - as_fn_append CONFIG_FILES " '$ac_optarg'" - ac_need_defaults=false;; - --header | --heade | --head | --hea ) - $ac_shift - case $ac_optarg in - *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; - esac - as_fn_append CONFIG_HEADERS " '$ac_optarg'" - ac_need_defaults=false;; - --he | --h) - # Conflict between --help and --header - as_fn_error $? "ambiguous option: \`$1' -Try \`$0 --help' for more information.";; - --help | --hel | -h ) - $as_echo "$ac_cs_usage"; exit ;; - -q | -quiet | --quiet | --quie | --qui | --qu | --q \ - | -silent | --silent | --silen | --sile | --sil | --si | --s) - ac_cs_silent=: ;; - - # This is an error. - -*) as_fn_error $? "unrecognized option: \`$1' -Try \`$0 --help' for more information." ;; - - *) as_fn_append ac_config_targets " $1" - ac_need_defaults=false ;; - - esac - shift -done - -ac_configure_extra_args= - -if $ac_cs_silent; then - exec 6>/dev/null - ac_configure_extra_args="$ac_configure_extra_args --silent" -fi - -_ACEOF -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 -if \$ac_cs_recheck; then - set X $SHELL '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion - shift - \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6 - CONFIG_SHELL='$SHELL' - export CONFIG_SHELL - exec "\$@" -fi - -_ACEOF -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 -exec 5>>config.log -{ - echo - sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX -## Running $as_me. ## -_ASBOX - $as_echo "$ac_log" -} >&5 - -_ACEOF -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 -_ACEOF - -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 - -# Handling of arguments. -for ac_config_target in $ac_config_targets -do - case $ac_config_target in - "src/config.h") CONFIG_HEADERS="$CONFIG_HEADERS src/config.h" ;; - "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; - "synthv1.spec") CONFIG_FILES="$CONFIG_FILES synthv1.spec" ;; - "src/src_core.pri") CONFIG_FILES="$CONFIG_FILES src/src_core.pri" ;; - "src/src_ui.pri") CONFIG_FILES="$CONFIG_FILES src/src_ui.pri" ;; - "src/src_jack.pri") CONFIG_FILES="$CONFIG_FILES src/src_jack.pri" ;; - "src/src_lv2.pri") CONFIG_FILES="$CONFIG_FILES src/src_lv2.pri" ;; - - *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;; - esac -done - - -# If the user did not use the arguments to specify the items to instantiate, -# then the envvar interface is used. Set only those that are not. -# We use the long form for the default assignment because of an extremely -# bizarre bug on SunOS 4.1.3. -if $ac_need_defaults; then - test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files - test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers -fi - -# Have a temporary directory for convenience. Make it in the build tree -# simply because there is no reason against having it here, and in addition, -# creating and moving files from /tmp can sometimes cause problems. -# Hook for its removal unless debugging. -# Note that there is a small window in which the directory will not be cleaned: -# after its creation but before its name has been assigned to `$tmp'. -$debug || -{ - tmp= ac_tmp= - trap 'exit_status=$? - : "${ac_tmp:=$tmp}" - { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status -' 0 - trap 'as_fn_exit 1' 1 2 13 15 -} -# Create a (secure) tmp directory for tmp files. - -{ - tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && - test -d "$tmp" -} || -{ - tmp=./conf$$-$RANDOM - (umask 077 && mkdir "$tmp") -} || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5 -ac_tmp=$tmp - -# Set up the scripts for CONFIG_FILES section. -# No need to generate them if there are no CONFIG_FILES. -# This happens for instance with `./config.status config.h'. -if test -n "$CONFIG_FILES"; then - - -ac_cr=`echo X | tr X '\015'` -# On cygwin, bash can eat \r inside `` if the user requested igncr. -# But we know of no other shell where ac_cr would be empty at this -# point, so we can use a bashism as a fallback. -if test "x$ac_cr" = x; then - eval ac_cr=\$\'\\r\' -fi -ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' /dev/null` -if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then - ac_cs_awk_cr='\\r' -else - ac_cs_awk_cr=$ac_cr -fi - -echo 'BEGIN {' >"$ac_tmp/subs1.awk" && -_ACEOF - - -{ - echo "cat >conf$$subs.awk <<_ACEOF" && - echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' && - echo "_ACEOF" -} >conf$$subs.sh || - as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 -ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'` -ac_delim='%!_!# ' -for ac_last_try in false false false false false :; do - . ./conf$$subs.sh || - as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 - - ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X` - if test $ac_delim_n = $ac_delim_num; then - break - elif $ac_last_try; then - as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 - else - ac_delim="$ac_delim!$ac_delim _$ac_delim!! " - fi -done -rm -f conf$$subs.sh - -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 -cat >>"\$ac_tmp/subs1.awk" <<\\_ACAWK && -_ACEOF -sed -n ' -h -s/^/S["/; s/!.*/"]=/ -p -g -s/^[^!]*!// -:repl -t repl -s/'"$ac_delim"'$// -t delim -:nl -h -s/\(.\{148\}\)..*/\1/ -t more1 -s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/ -p -n -b repl -:more1 -s/["\\]/\\&/g; s/^/"/; s/$/"\\/ -p -g -s/.\{148\}// -t nl -:delim -h -s/\(.\{148\}\)..*/\1/ -t more2 -s/["\\]/\\&/g; s/^/"/; s/$/"/ -p -b -:more2 -s/["\\]/\\&/g; s/^/"/; s/$/"\\/ -p -g -s/.\{148\}// -t delim -' >$CONFIG_STATUS || ac_write_fail=1 -rm -f conf$$subs.awk -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 -_ACAWK -cat >>"\$ac_tmp/subs1.awk" <<_ACAWK && - for (key in S) S_is_set[key] = 1 - FS = "" - -} -{ - line = $ 0 - nfields = split(line, field, "@") - substed = 0 - len = length(field[1]) - for (i = 2; i < nfields; i++) { - key = field[i] - keylen = length(key) - if (S_is_set[key]) { - value = S[key] - line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3) - len += length(value) + length(field[++i]) - substed = 1 - } else - len += 1 + keylen - } - - print line -} - -_ACAWK -_ACEOF -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 -if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then - sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g" -else - cat -fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \ - || as_fn_error $? "could not setup config files machinery" "$LINENO" 5 -_ACEOF - -# VPATH may cause trouble with some makes, so we remove sole $(srcdir), -# ${srcdir} and @srcdir@ entries from VPATH if srcdir is ".", strip leading and -# trailing colons and then remove the whole line if VPATH becomes empty -# (actually we leave an empty line to preserve line numbers). -if test "x$srcdir" = x.; then - ac_vpsub='/^[ ]*VPATH[ ]*=[ ]*/{ -h -s/// -s/^/:/ -s/[ ]*$/:/ -s/:\$(srcdir):/:/g -s/:\${srcdir}:/:/g -s/:@srcdir@:/:/g -s/^:*// -s/:*$// -x -s/\(=[ ]*\).*/\1/ -G -s/\n// -s/^[^=]*=[ ]*$// -}' -fi - -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 -fi # test -n "$CONFIG_FILES" - -# Set up the scripts for CONFIG_HEADERS section. -# No need to generate them if there are no CONFIG_HEADERS. -# This happens for instance with `./config.status Makefile'. -if test -n "$CONFIG_HEADERS"; then -cat >"$ac_tmp/defines.awk" <<\_ACAWK || -BEGIN { -_ACEOF - -# Transform confdefs.h into an awk script `defines.awk', embedded as -# here-document in config.status, that substitutes the proper values into -# config.h.in to produce config.h. - -# Create a delimiter string that does not exist in confdefs.h, to ease -# handling of long lines. -ac_delim='%!_!# ' -for ac_last_try in false false :; do - ac_tt=`sed -n "/$ac_delim/p" confdefs.h` - if test -z "$ac_tt"; then - break - elif $ac_last_try; then - as_fn_error $? "could not make $CONFIG_HEADERS" "$LINENO" 5 - else - ac_delim="$ac_delim!$ac_delim _$ac_delim!! " - fi -done - -# For the awk script, D is an array of macro values keyed by name, -# likewise P contains macro parameters if any. Preserve backslash -# newline sequences. - -ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]* -sed -n ' -s/.\{148\}/&'"$ac_delim"'/g -t rset -:rset -s/^[ ]*#[ ]*define[ ][ ]*/ / -t def -d -:def -s/\\$// -t bsnl -s/["\\]/\\&/g -s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ -D["\1"]=" \3"/p -s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2"/p -d -:bsnl -s/["\\]/\\&/g -s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ -D["\1"]=" \3\\\\\\n"\\/p -t cont -s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2\\\\\\n"\\/p -t cont -d -:cont -n -s/.\{148\}/&'"$ac_delim"'/g -t clear -:clear -s/\\$// -t bsnlc -s/["\\]/\\&/g; s/^/"/; s/$/"/p -d -:bsnlc -s/["\\]/\\&/g; s/^/"/; s/$/\\\\\\n"\\/p -b cont -' >$CONFIG_STATUS || ac_write_fail=1 - -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 - for (key in D) D_is_set[key] = 1 - FS = "" -} -/^[\t ]*#[\t ]*(define|undef)[\t ]+$ac_word_re([\t (]|\$)/ { - line = \$ 0 - split(line, arg, " ") - if (arg[1] == "#") { - defundef = arg[2] - mac1 = arg[3] - } else { - defundef = substr(arg[1], 2) - mac1 = arg[2] - } - split(mac1, mac2, "(") #) - macro = mac2[1] - prefix = substr(line, 1, index(line, defundef) - 1) - if (D_is_set[macro]) { - # Preserve the white space surrounding the "#". - print prefix "define", macro P[macro] D[macro] - next - } else { - # Replace #undef with comments. This is necessary, for example, - # in the case of _POSIX_SOURCE, which is predefined and required - # on some systems where configure will not decide to define it. - if (defundef == "undef") { - print "/*", prefix defundef, macro, "*/" - next - } - } -} -{ print } -_ACAWK -_ACEOF -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 - as_fn_error $? "could not setup config headers machinery" "$LINENO" 5 -fi # test -n "$CONFIG_HEADERS" - - -eval set X " :F $CONFIG_FILES :H $CONFIG_HEADERS " -shift -for ac_tag -do - case $ac_tag in - :[FHLC]) ac_mode=$ac_tag; continue;; - esac - case $ac_mode$ac_tag in - :[FHL]*:*);; - :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;; - :[FH]-) ac_tag=-:-;; - :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; - esac - ac_save_IFS=$IFS - IFS=: - set x $ac_tag - IFS=$ac_save_IFS - shift - ac_file=$1 - shift - - case $ac_mode in - :L) ac_source=$1;; - :[FH]) - ac_file_inputs= - for ac_f - do - case $ac_f in - -) ac_f="$ac_tmp/stdin";; - *) # Look for the file first in the build tree, then in the source tree - # (if the path is not absolute). The absolute path cannot be DOS-style, - # because $ac_f cannot contain `:'. - test -f "$ac_f" || - case $ac_f in - [\\/$]*) false;; - *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; - esac || - as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;; - esac - case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac - as_fn_append ac_file_inputs " '$ac_f'" - done - - # Let's still pretend it is `configure' which instantiates (i.e., don't - # use $as_me), people would be surprised to read: - # /* config.h. Generated by config.status. */ - configure_input='Generated from '` - $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' - `' by configure.' - if test x"$ac_file" != x-; then - configure_input="$ac_file. $configure_input" - { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 -$as_echo "$as_me: creating $ac_file" >&6;} - fi - # Neutralize special characters interpreted by sed in replacement strings. - case $configure_input in #( - *\&* | *\|* | *\\* ) - ac_sed_conf_input=`$as_echo "$configure_input" | - sed 's/[\\\\&|]/\\\\&/g'`;; #( - *) ac_sed_conf_input=$configure_input;; - esac - - case $ac_tag in - *:-:* | *:-) cat >"$ac_tmp/stdin" \ - || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; - esac - ;; - esac - - ac_dir=`$as_dirname -- "$ac_file" || -$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$ac_file" : 'X\(//\)[^/]' \| \ - X"$ac_file" : 'X\(//\)$' \| \ - X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X"$ac_file" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ - s//\1/ - q - } - /^X\(\/\/\)[^/].*/{ - s//\1/ - q - } - /^X\(\/\/\)$/{ - s//\1/ - q - } - /^X\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - as_dir="$ac_dir"; as_fn_mkdir_p - ac_builddir=. - -case "$ac_dir" in -.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; -*) - ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` - # A ".." for each directory in $ac_dir_suffix. - ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` - case $ac_top_builddir_sub in - "") ac_top_builddir_sub=. ac_top_build_prefix= ;; - *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; - esac ;; -esac -ac_abs_top_builddir=$ac_pwd -ac_abs_builddir=$ac_pwd$ac_dir_suffix -# for backward compatibility: -ac_top_builddir=$ac_top_build_prefix - -case $srcdir in - .) # We are building in place. - ac_srcdir=. - ac_top_srcdir=$ac_top_builddir_sub - ac_abs_top_srcdir=$ac_pwd ;; - [\\/]* | ?:[\\/]* ) # Absolute name. - ac_srcdir=$srcdir$ac_dir_suffix; - ac_top_srcdir=$srcdir - ac_abs_top_srcdir=$srcdir ;; - *) # Relative name. - ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix - ac_top_srcdir=$ac_top_build_prefix$srcdir - ac_abs_top_srcdir=$ac_pwd/$srcdir ;; -esac -ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix - - - case $ac_mode in - :F) - # - # CONFIG_FILE - # - -_ACEOF - -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 -# If the template does not know about datarootdir, expand it. -# FIXME: This hack should be removed a few years after 2.60. -ac_datarootdir_hack=; ac_datarootdir_seen= -ac_sed_dataroot=' -/datarootdir/ { - p - q -} -/@datadir@/p -/@docdir@/p -/@infodir@/p -/@localedir@/p -/@mandir@/p' -case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in -*datarootdir*) ac_datarootdir_seen=yes;; -*@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 -$as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} -_ACEOF -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 - ac_datarootdir_hack=' - s&@datadir@&$datadir&g - s&@docdir@&$docdir&g - s&@infodir@&$infodir&g - s&@localedir@&$localedir&g - s&@mandir@&$mandir&g - s&\\\${datarootdir}&$datarootdir&g' ;; -esac -_ACEOF - -# Neutralize VPATH when `$srcdir' = `.'. -# Shell code in configure.ac might set extrasub. -# FIXME: do we really want to maintain this feature? -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 -ac_sed_extra="$ac_vpsub -$extrasub -_ACEOF -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 -:t -/@[a-zA-Z_][a-zA-Z_0-9]*@/!b -s|@configure_input@|$ac_sed_conf_input|;t t -s&@top_builddir@&$ac_top_builddir_sub&;t t -s&@top_build_prefix@&$ac_top_build_prefix&;t t -s&@srcdir@&$ac_srcdir&;t t -s&@abs_srcdir@&$ac_abs_srcdir&;t t -s&@top_srcdir@&$ac_top_srcdir&;t t -s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t -s&@builddir@&$ac_builddir&;t t -s&@abs_builddir@&$ac_abs_builddir&;t t -s&@abs_top_builddir@&$ac_abs_top_builddir&;t t -$ac_datarootdir_hack -" -eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \ - >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5 - -test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && - { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } && - { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \ - "$ac_tmp/out"`; test -z "$ac_out"; } && - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' -which seems to be undefined. Please make sure it is defined" >&5 -$as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' -which seems to be undefined. Please make sure it is defined" >&2;} - - rm -f "$ac_tmp/stdin" - case $ac_file in - -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";; - *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";; - esac \ - || as_fn_error $? "could not create $ac_file" "$LINENO" 5 - ;; - :H) - # - # CONFIG_HEADER - # - if test x"$ac_file" != x-; then - { - $as_echo "/* $configure_input */" \ - && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" - } >"$ac_tmp/config.h" \ - || as_fn_error $? "could not create $ac_file" "$LINENO" 5 - if diff "$ac_file" "$ac_tmp/config.h" >/dev/null 2>&1; then - { $as_echo "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5 -$as_echo "$as_me: $ac_file is unchanged" >&6;} - else - rm -f "$ac_file" - mv "$ac_tmp/config.h" "$ac_file" \ - || as_fn_error $? "could not create $ac_file" "$LINENO" 5 - fi - else - $as_echo "/* $configure_input */" \ - && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" \ - || as_fn_error $? "could not create -" "$LINENO" 5 - fi - ;; - - - esac - -done # for ac_tag - - -as_fn_exit 0 -_ACEOF -ac_clean_files=$ac_clean_files_save - -test $ac_write_fail = 0 || - as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5 - - -# configure is writing to config.log, and then calls config.status. -# config.status does its own redirection, appending to config.log. -# Unfortunately, on DOS this fails, as config.log is still kept open -# by configure, so config.status won't be able to write to it; its -# output is simply discarded. So we exec the FD to /dev/null, -# effectively closing config.log, so it can be properly (re)opened and -# appended to by config.status. When coming back to configure, we -# need to make the FD available again. -if test "$no_create" != yes; then - ac_cs_success=: - ac_config_status_args= - test "$silent" = yes && - ac_config_status_args="$ac_config_status_args --quiet" - exec 5>/dev/null - $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false - exec 5>>config.log - # Use ||, not &&, to avoid exiting from the if with $? = 1, which - # would make configure fail if this is the last instruction. - $ac_cs_success || as_fn_exit 1 -fi -if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 -$as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} -fi - - -# make clean > /dev/null 2>&1 - -# Output summary message - -echo -echo " $PACKAGE_NAME $ac_build_version" -echo -echo " Build target . . . . . . . . . . . . . . . . . . .: $ac_debug" -echo -echo " JACK stand-alone build . . . . . . . . . . . . . .: $ac_jack" -echo " JACK session support . . . . . . . . . . . . . . .: $ac_jack_session" -echo " JACK MIDI support . . . . . . . . . . . . . . . .: $ac_jack_midi" -echo " ALSA MIDI support . . . . . . . . . . . . . . . .: $ac_alsa_midi" -echo " LV2 plug-in build . . . . . . . . . . . . . . . .: $ac_lv2" -echo " LV2 plug-in External UI support . . . . . . . . .: $ac_lv2_external_ui" -echo " LV2 plug-in UI Idle interface support . . . . . .: $ac_lv2_ui_idle" -echo " LV2 plug-in UI Show interface support . . . . . .: $ac_lv2_ui_show" -echo " LV2 plug-in Programs support . . . . . . . . . . .: $ac_lv2_programs" -echo " OSC service support (liblo) . . . . . . . . . . .: $ac_liblo" -echo " NSM (Non Session Management) support . . . . . . .: $ac_nsm" -echo -echo " Install prefix . . . . . . . . . . . . . . . . . .: $ac_prefix" -echo -echo "Now type 'make', followed by 'make install' as root." -echo diff -Nru synthv1-0.8.6/configure.ac synthv1-0.9.10+git20190929/configure.ac --- synthv1-0.8.6/configure.ac 2017-12-20 07:56:50.302842973 +0000 +++ synthv1-0.9.10+git20190929/configure.ac 2019-09-28 23:00:43.000000000 +0000 @@ -1,5 +1,5 @@ # Process this file with autoconf to produce a configure script. -AC_INIT(synthv1, 0.8.6, rncbc@rncbc.org) +AC_INIT(synthv1, 0.9.10, rncbc@rncbc.org) AC_CONFIG_SRCDIR(src/synthv1.cpp) AC_CONFIG_HEADERS(src/config.h) @@ -64,69 +64,84 @@ # Enable debugging argument option. AC_ARG_ENABLE(debug, - AC_HELP_STRING([--enable-debug], [enable debugging (default=no)]), + AS_HELP_STRING([--enable-debug], [enable debugging (default=no)]), [ac_debug="$enableval"]) # Enable JACK standalone build. AC_ARG_ENABLE(jack, - AC_HELP_STRING([--enable-jack], [enable JACK stand-alone build (default=yes)]), + AS_HELP_STRING([--enable-jack], [enable JACK stand-alone build (default=yes)]), [ac_jack="$enableval"], [ac_jack="yes"]) # Enable JACK session support. AC_ARG_ENABLE(jack-session, - AC_HELP_STRING([--enable-jack-session], [enable JACK session support (default=yes)]), + AS_HELP_STRING([--enable-jack-session], [enable JACK session support (default=yes)]), [ac_jack_session="$enableval"], [ac_jack_session="yes"]) # Enable JACK MIDI support option. AC_ARG_ENABLE(jack-midi, - AC_HELP_STRING([--enable-jack-midi], [enable JACK MIDI support (default=yes)]), + AS_HELP_STRING([--enable-jack-midi], [enable JACK MIDI support (default=yes)]), [ac_jack_midi="$enableval"], [ac_jack_midi="yes"]) # Enable ALSA MIDI support option. AC_ARG_ENABLE(alsa-midi, - AC_HELP_STRING([--enable-alsa-midi], [enable ALSA MIDI support (default=yes)]), + AS_HELP_STRING([--enable-alsa-midi], [enable ALSA MIDI support (default=yes)]), [ac_alsa_midi="$enableval"], [ac_alsa_midi="yes"]) # Enable LV2 plugin build. AC_ARG_ENABLE(lv2, - AC_HELP_STRING([--enable-lv2], [enable LV2 plug-in build (default=yes)]), + AS_HELP_STRING([--enable-lv2], [enable LV2 plug-in build (default=yes)]), [ac_lv2="$enableval"], [ac_lv2="yes"]) -AC_ARG_ENABLE(lv2-external-ui, - AC_HELP_STRING([--enable-lv2-external-ui], [enable LV2 plug-in External UI support (default=yes)]), - [ac_lv2_external_ui="$enableval"], - [ac_lv2_external_ui="yes"]) +AC_ARG_ENABLE(lv2-ui-x11, + AS_HELP_STRING([--enable-lv2-ui-x11], [enable LV2 plug-in X11 UI support (default=yes)]), + [ac_lv2_ui_x11="$enableval"], + [ac_lv2_ui_x11="yes"]) + +AC_ARG_ENABLE(lv2-ui-external, + AS_HELP_STRING([--enable-lv2-ui-external], [enable LV2 plug-in External UI support (default=yes)]), + [ac_lv2_ui_external="$enableval"], + [ac_lv2_ui_external="yes"]) AC_ARG_ENABLE(lv2-ui-idle, - AC_HELP_STRING([--enable-lv2-ui-idle], [enable LV2 UI Idle interface support (default=yes)]), + AS_HELP_STRING([--enable-lv2-ui-idle], [enable LV2 UI Idle interface support (default=yes)]), [ac_lv2_ui_idle="$enableval"], [ac_lv2_ui_idle="yes"]) AC_ARG_ENABLE(lv2-ui-show, - AC_HELP_STRING([--enable-lv2-ui-show], [enable LV2 UI Show interface support (default=yes)]), + AS_HELP_STRING([--enable-lv2-ui-show], [enable LV2 UI Show interface support (default=yes)]), [ac_lv2_ui_show="$enableval"], [ac_lv2_ui_show="yes"]) +AC_ARG_ENABLE(lv2-ui-resize, + AS_HELP_STRING([--enable-lv2-ui-resize], [enable LV2 UI Resize interface support (default=yes)]), + [ac_lv2_ui_resize="$enableval"], + [ac_lv2_ui_resize="yes"]) + AC_ARG_ENABLE(lv2-programs, - AC_HELP_STRING([--enable-lv2-programs], [enable LV2 plug-in Programs support (default=yes)]), + AS_HELP_STRING([--enable-lv2-programs], [enable LV2 plug-in Programs support (default=yes)]), [ac_lv2_programs="$enableval"], [ac_lv2_programs="yes"]) +AC_ARG_ENABLE(lv2-patch, + AS_HELP_STRING([--enable-lv2-patch], [enable LV2 plug-in Patch support (default=yes)]), + [ac_lv2_patch="$enableval"], + [ac_lv2_patch="yes"]) + # Enable liblo availability. AC_ARG_ENABLE(liblo, - AC_HELP_STRING([--enable-liblo], [enable liblo interface (default=yes)]), + AS_HELP_STRING([--enable-liblo], [enable liblo interface (default=yes)]), [ac_liblo="$enableval"], [ac_liblo="yes"]) # Enable NSM support. AC_ARG_ENABLE(nsm, - AC_HELP_STRING([--enable-nsm], [enable NSM support (default=yes)]), + AS_HELP_STRING([--enable-nsm], [enable NSM support (default=yes)]), [ac_nsm="$enableval"], [ac_nsm="yes"]) @@ -141,53 +156,38 @@ AC_SUBST(ac_debug) -# Enable Qt4/5 availability. -AC_ARG_ENABLE(qt4, - AC_HELP_STRING([--enable-qt4], [enable Qt4 build (default=no)]), - [ac_qt4="$enableval"], - [ac_qt4="no"]) - - # Standard installation base dirs. +ac_path=$PATH ac_with_paths="" -# Set for alternate Qt4/5 installation dir. -AC_ARG_WITH(qt4, - AC_HELP_STRING([--with-qt4=PATH], [use alternate Qt4 install path]), - [ac_qt4_path="$withval"], [ac_qt4_path="no"]) - -AC_ARG_WITH(qt5, - AC_HELP_STRING([--with-qt5=PATH], [use alternate Qt5 install path]), - [ac_qt5_path="$withval"], [ac_qt5_path="no"]) - -if test "x$ac_qt4_path" != "xno"; then - ac_with_paths="$ac_with_paths $ac_qt4_path" - ac_qt4="yes" -fi - -if test "x$ac_qt5_path" != "xno"; then - ac_with_paths="$ac_with_paths $ac_qt5_path" - ac_qt4="no" +# Set for alternate Qt installation dir. +AC_ARG_WITH(qt, + AS_HELP_STRING([--with-qt=PATH], [use alternate Qt install path]), + [ac_qt_path="$withval"], [ac_qt_path="no"]) + +if test "x$ac_qt_path" != "xno"; then + ac_path="$ac_qt_path/bin:$ac_path" fi + # Set for alternate ALSA installation dir. AC_ARG_WITH(alsa, - AC_HELP_STRING([--with-alsa=PATH], [use alternate ALSA install path]), + AS_HELP_STRING([--with-alsa=PATH], [use alternate ALSA install path]), [ac_with_paths="$ac_with_paths $withval"]) # Set for alternate JACK installation dir. AC_ARG_WITH(jack, - AC_HELP_STRING([--with-jack=PATH], [use alternate JACK install path]), + AS_HELP_STRING([--with-jack=PATH], [use alternate JACK install path]), [ac_with_paths="$ac_with_paths $withval"]) # Set for alternate LV2 installation dir. AC_ARG_WITH(lv2, - AC_HELP_STRING([--with-lv2=PATH], [use alternate LV2 install path]), + AS_HELP_STRING([--with-lv2=PATH], [use alternate LV2 install path]), [ac_with_paths="$ac_with_paths $withval"]) # Set for alternate liblo installation dir. AC_ARG_WITH(liblo, - AC_HELP_STRING([--with-liblo=PATH], [use alternate liblo path]), + AS_HELP_STRING([--with-liblo=PATH], [use alternate liblo path]), [ac_with_paths="$ac_with_paths $withval"]) @@ -217,7 +217,8 @@ ]) ac_gxx_version_major=$ac_cv_gxx_version_major if test $ac_gxx_version_major -ge 4 -a $ac_gxx_version_major -lt 6; then - CXXFLAGS="-std=c++11 $CXXFLAGS" + CPPFLAGS="-std=c++11 $CPPFLAGS" + ac_cflags="-std=c++11 $ac_cflags" fi # Check for proper flags. @@ -234,40 +235,38 @@ CPPFLAGS="-fPIC $CPPFLAGS" # Prepend alternate dependencies paths. -ac_path=$PATH - for X in $ac_with_paths; do if test -d $X/bin; then - ac_path="$X/bin:$ac_path" + ac_path="$X/bin:$ac_path" fi if test -d $X/include; then - CFLAGS="-I$X/include $CFLAGS " - CPPFLAGS="-I$X/include $CPPFLAGS" - ac_incpath="$X/include $ac_incpath" + CFLAGS="-I$X/include $CFLAGS " + CPPFLAGS="-I$X/include $CPPFLAGS" + ac_incpath="$X/include $ac_incpath" fi for Y in $ac_libdirs; do - if test -d $X/$Y; then - LIBS="-L$X/$Y $LIBS" - ac_libs="-L$X/$Y $ac_libs" - fi + if test -d $X/$Y; then + LIBS="-L$X/$Y $LIBS" + ac_libs="-L$X/$Y $ac_libs" + fi done done # A common error message: ac_errmsg="not found in current PATH. Maybe QT development environment isn't available." -if test "x$ac_qt4" = "xyes"; then - AC_PATH_PROG(ac_qmake, qmake-qt4, [no], $ac_path) -else - AC_PATH_PROG(ac_qmake, qmake-qt5, [no], $ac_path) +# Check for qtchooser availability. +AC_PATH_TOOL(ac_qtchooser, qtchooser, [no], $ac_path) +if test -x $ac_qtchooser; then + export QT_SELECT=5 fi + +# Check for proper qmake path/version alternatives. +AC_PATH_TOOL(ac_qmake, qmake, [no], $ac_path) if test "x$ac_qmake" = "xno"; then - AC_PATH_PROG(ac_cv_qmake, qmake, [no], $ac_path) + AC_PATH_TOOL(ac_cv_qmake, qmake-qt5, [no], $ac_path) ac_qmake=$ac_cv_qmake fi -if test "x$ac_qmake" = "xno"; then - AC_MSG_ERROR([qmake $ac_errmsg]) -fi # Check for proper Qt major version. AC_CACHE_CHECK([for Qt major version], [ac_cv_qt_version_major], [ @@ -275,14 +274,13 @@ ac_cv_qt_version_major=$(($ac_cv_qt_version_major + 0)) ]) ac_qt_version_major=$ac_cv_qt_version_major -if test "x$ac_qt4" = "xyes"; then - if test $ac_qt_version_major -ne 4; then - AC_MSG_ERROR([qmake-qt4 $ac_errmsg (qt4-devel)]) - fi -else - if test $ac_qt_version_major -ne 5; then - AC_MSG_ERROR([qmake-qt5 $ac_errmsg (qt5-devel)]) - fi +if test $ac_qt_version_major -ne 5; then + AC_PATH_TOOL(ac_cv_qmake, qmake-qt5, [no], $ac_path) + ac_qmake=$ac_cv_qmake +fi + +if test "x$ac_qmake" = "xno"; then + AC_MSG_ERROR([qmake-qt5 $ac_errmsg (qt5-devel)]) fi # Check for proper Qt install path. @@ -295,7 +293,7 @@ fi # Check it again, now with updated PATH, just in case... -AC_PATH_PROG(ac_cv_qmake, qmake, [no], $ac_path) +AC_PATH_TOOL(ac_cv_qmake, qmake, [no], $ac_path) ac_qmake=$ac_cv_qmake if test "x$ac_qmake" = "xno"; then AC_MSG_ERROR([qmake $ac_errmsg]) @@ -322,58 +320,55 @@ ac_libs="-L$ac_qt_install_libs $ac_libs" fi -# Finally, check for proper Qt4/5 version. -if test "x$ac_qt4" = "xyes"; then - AC_CACHE_CHECK([for Qt library version >= 4.4], - ac_cv_qtversion, [ - AC_TRY_COMPILE([#include "QtCore/qglobal.h"], [ - #if QT_VERSION < 0x040400 || QT_VERSION >= 0x050000 - #error Qt library 4.4 or greater required. - #endif - ], ac_cv_qtversion="yes", [ - echo "no; Qt 4.4 or greater is required" - exit 1 - ]) - ]) -else - AC_CACHE_CHECK([for Qt library version >= 5.1], - ac_cv_qtversion, [ - AC_TRY_COMPILE([#include "QtCore/qglobal.h"], [ - #if QT_VERSION < 0x050100 || QT_VERSION >= 0x060000 - #error Qt library 5.1 or greater required. - #endif - ], ac_cv_qtversion="yes", [ - echo "no; Qt 5.1 or greater is required" - exit 1 - ]) +# Finally, check for proper Qt version. +AC_CACHE_CHECK([for Qt library version >= 5.1], + ac_cv_qtversion, [ + AC_TRY_COMPILE([#include "QtCore/qglobal.h"], [ + #if QT_VERSION < 0x050100 + #error Qt library 5.1 or greater required. + #endif + ], ac_cv_qtversion="yes", [ + echo "no; Qt 5.1 or greater is required" + exit 1 ]) -fi +]) # Check for Qt moc utility. -AC_PATH_PROG(ac_moc, moc, [no], $ac_path) +AC_PATH_TOOL(ac_moc, moc, [no], $ac_path) if test "x$ac_moc" = "xno"; then AC_MSG_ERROR([moc $ac_errmsg]) fi AC_SUBST(ac_moc) # Check for Qt uic utility. -AC_PATH_PROG(ac_uic, uic, [no], $ac_path) +AC_PATH_TOOL(ac_uic, uic, [no], $ac_path) if test "x$ac_uic" = "xno"; then AC_MSG_ERROR([uic $ac_errmsg]) fi AC_SUBST(ac_uic) + # Check for Qt lupdate utility. -AC_PATH_PROG(ac_lupdate, lupdate, [no], $ac_path) +AC_PATH_TOOL(ac_lupdate, lupdate, [no], $ac_path) if test "x$ac_lupdate" = "xno"; then - AC_MSG_ERROR([lupdate $ac_errmsg]) + AC_PATH_TOOL(ac_cv_lupdate, lupdate-qt5, [no], $ac_path) + if test "x$ac_cv_lupdate" = "xno"; then + AC_MSG_ERROR([lupdate $ac_errmsg (qt5-linguist)]) + else + ac_lupdate=$ac_cv_lupdate; + fi fi AC_SUBST(ac_lupdate) # Check for Qt lrelease utility. -AC_PATH_PROG(ac_lrelease, lrelease, [no], $ac_path) -if test "x$ac_release" = "xno"; then - AC_MSG_ERROR([lrelease $ac_errmsg]) +AC_PATH_TOOL(ac_lrelease, lrelease, [no], $ac_path) +if test "x$ac_lrelease" = "xno"; then + AC_PATH_TOOL(ac_cv_lrelease, lrelease-qt5, [no], $ac_path) + if test "x$ac_cv_lrelease" = "xno"; then + AC_MSG_ERROR([lrelease $ac_errmsg (qt5-linguist)]) + else + ac_lrelease=$ac_cv_lrelease; + fi fi AC_SUBST(ac_lrelease) @@ -502,11 +497,20 @@ # Check for LV2 headers. if test "x$ac_lv2" = "xyes"; then - AC_CHECK_HEADERS(lv2.h \ - lv2/lv2plug.in/ns/ext/atom/atom.h \ - lv2/lv2plug.in/ns/ext/atom/forge.h \ - lv2/lv2plug.in/ns/ext/atom/util.h, - [ac_lv2="yes"], [ac_lv2="no"]) + PKG_CHECK_MODULES([LV2], [lv2], [ac_lv2="yes"], [ac_lv2="no"]) + if test "x$ac_lv2" = "xyes"; then + ac_lv2_cflags="$ac_lv2_cflags $LV2_CFLAGS" + CFLAGS="$CFLAGS $LV2_CFLAGS" + CPPFLAGS="$CPPFLAGS $LV2_CFLAGS" + fi + if test "x$ac_lv2" = "xyes"; then + AC_CHECK_HEADERS( + lv2/lv2plug.in/ns/ext/urid/urid.h \ + lv2/lv2plug.in/ns/ext/atom/atom.h \ + lv2/lv2plug.in/ns/ext/atom/forge.h \ + lv2/lv2plug.in/ns/ext/atom/util.h, + [ac_lv2="yes"], [ac_lv2="no"]) + fi if test "x$ac_lv2" = "xyes"; then AC_DEFINE(CONFIG_LV2, 1, [Define if LV2 plug-in build is enabled.]) ac_all_targets="lv2 $ac_all_targets" @@ -545,18 +549,27 @@ fi if test "x$ac_lv2" = "xno"; then - lv2_external_ui="no" + ac_lv2_ui_x11="no" + ac_lv2_ui_external="no" ac_lv2_ui_idle="no" ac_lv2_ui_show="no" + ac_lv2_ui_resize="no" ac_lv2_programs="no" + ac_lv2_patch="no" +fi + +if test "x$ac_lv2_ui_x11" = "xyes"; then + AC_DEFINE(CONFIG_LV2_UI_X11, 1, [Define if LV2 X11 UI support is available.]) +else + AC_MSG_WARN([*** LV2 X11 UI support will be disabled.]) fi -if test "x$ac_lv2_external_ui" = "xyes"; then +if test "x$ac_lv2_ui_external" = "xyes"; then CFLAGS="$CFLAGS -Isrc/lv2" CPPFLAGS="$CPPFLAGS -Isrc/lv2" - AC_CHECK_HEADER(lv2_external_ui.h, [ac_lv2_external_ui="yes"], [ac_lv2_external_ui="no"]) - if test "x$ac_lv2_external_ui" = "xyes"; then - AC_DEFINE(CONFIG_LV2_EXTERNAL_UI, 1, [Define if LV2 External UI extension is available.]) + AC_CHECK_HEADER(lv2_external_ui.h, [ac_lv2_ui_external="yes"], [ac_lv2_ui_external="no"]) + if test "x$ac_lv2_ui_external" = "xyes"; then + AC_DEFINE(CONFIG_LV2_UI_EXTERNAL, 1, [Define if LV2 External UI extension is available.]) ac_lv2_incpath="lv2 $ac_lv2_incpath" else AC_MSG_WARN([*** LV2 External UI extension will be disabled.]) @@ -595,6 +608,22 @@ fi fi +if test "x$ac_lv2_ui_resize" = "xyes"; then + AC_CACHE_CHECK([for LV2 UI Resize interface], + ac_cv_lv2_ui_resize, [ + AC_TRY_LINK([#include "lv2/lv2plug.in/ns/extensions/ui/ui.h"], [ + // Checking for LV2 UI Resize interface... + LV2UI_Resize resize; + ], ac_cv_lv2_ui_resize="yes", ac_cv_lv2_ui_resize="no") + ]) + ac_lv2_ui_resize=$ac_cv_lv2_ui_resize + if test "x$ac_lv2_ui_resize" = "xyes"; then + AC_DEFINE(CONFIG_LV2_UI_RESIZE, 1, [Define if LV2 UI Resize interface support is available.]) + else + AC_MSG_WARN([*** LV2 UI Resize interface support will be disabled.]) + fi +fi + if test "x$ac_lv2_programs" = "xyes"; then AC_CHECK_HEADER(lv2_programs.h, [ac_lv2_programs="yes"], [ac_lv2_programs="no"]) if test "x$ac_lv2_programs" = "xyes"; then @@ -605,6 +634,18 @@ fi fi +if test "x$ac_lv2_patch" = "xyes"; then + AC_CHECK_HEADER( + lv2/lv2plug.in/ns/ext/patch/patch.h, + [ac_lv2_patch="yes"], [ac_lv2_patch="no"]) + if test "x$ac_lv2_patch" = "xyes"; then + AC_DEFINE(CONFIG_LV2_PATCH, 1, [Define if LV2 Patch is supported.]) + else + AC_MSG_WARN([*** LV2 Patch support will be disabled.]) + fi +fi + + # Check for NSM support. if test "x$ac_nsm" = "xyes"; then AC_DEFINE(CONFIG_NSM, 1, [Define if NSM support is available.]) @@ -663,10 +704,13 @@ echo " JACK MIDI support . . . . . . . . . . . . . . . .: $ac_jack_midi" echo " ALSA MIDI support . . . . . . . . . . . . . . . .: $ac_alsa_midi" echo " LV2 plug-in build . . . . . . . . . . . . . . . .: $ac_lv2" -echo " LV2 plug-in External UI support . . . . . . . . .: $ac_lv2_external_ui" +echo " LV2 plug-in X11 UI support . . . . . . . . . . .: $ac_lv2_ui_x11" +echo " LV2 plug-in External UI support . . . . . . . . .: $ac_lv2_ui_external" echo " LV2 plug-in UI Idle interface support . . . . . .: $ac_lv2_ui_idle" echo " LV2 plug-in UI Show interface support . . . . . .: $ac_lv2_ui_show" +echo " LV2 plug-in UI Resize interface support . . . . .: $ac_lv2_ui_resize" echo " LV2 plug-in Programs support . . . . . . . . . . .: $ac_lv2_programs" +echo " LV2 plug-in Patch support . . . . . . . . . . . .: $ac_lv2_patch" echo " OSC service support (liblo) . . . . . . . . . . .: $ac_liblo" echo " NSM (Non Session Management) support . . . . . . .: $ac_nsm" echo diff -Nru synthv1-0.8.6/debian/changelog synthv1-0.9.10+git20190929/debian/changelog --- synthv1-0.8.6/debian/changelog 2017-12-29 09:08:36.000000000 +0000 +++ synthv1-0.9.10+git20190929/debian/changelog 2019-09-28 23:46:26.000000000 +0000 @@ -1,214 +1,288 @@ -synthv1 (0.8.6-1) unstable; urgency=medium +synthv1 (0.9.10+git20190929) bionic; urgency=medium - * New upstream version 0.8.6 - * Use secure uri in copyright file. - * Bump Standards. - * Set dh/compat 11. + * Import package - -- Jaromír Mikeš Fri, 29 Dec 2017 10:08:36 +0100 + -- falkTX Sun, 29 Sep 2019 00:46:26 +0100 -synthv1 (0.8.5-1) unstable; urgency=medium +synthv1 (0.9.10-47) unstable; urgency=low - * New upstream version 0.8.5 - * Bump Standards. - * Update Homepage to avoid redirecting. - * Update copyright file. - * Use secure uri in watch file. - * Fix install of metainfo files. - * Patch refreshed. + * An Early-Fall'19 release. - -- Jaromír Mikeš Thu, 02 Nov 2017 19:30:59 +0100 + -- Rui Nuno Capela Tue, 24 Sep 2019 19:00:00 +0100 -synthv1 (0.8.4-1) unstable; urgency=medium +synthv1 (0.9.9-46) unstable; urgency=low - * New upstream version 0.8.4 - * Bump Standards. - * Update Vcs - use git instead of cgit. - * Introduce postclone.sh script to ignore .pc/ dir. + * A Summer'19 release. - -- Jaromír Mikeš Wed, 23 Aug 2017 11:06:43 +0200 + -- Rui Nuno Capela Thu, 18 Jul 2019 19:00:00 +0100 -synthv1 (0.8.3-1) unstable; urgency=medium +synthv1 (0.9.8-45) unstable; urgency=low - * New upstream version 0.8.3 (Closes: #860214) - * Sign tags. - * Remove useless flags. - * Remove dh_autoreconf. - * Fix dh version. - * Avoid useless linking. + * A Spring'19 release. - -- Jaromír Mikeš Mon, 26 Jun 2017 22:00:32 +0200 + -- Rui Nuno Capela Thu, 6 Jun 2019 19:00:00 +0100 -synthv1 (0.8.0-1) unstable; urgency=medium +synthv1 (0.9.7-44) unstable; urgency=low - * New upstream version 0.8.0 - * Update copyright file. - * Set dh/compat 10. - * Patches refreshed. + * A Spring-Break'19 release. - -- Jaromír Mikeš Mon, 21 Nov 2016 11:18:27 +0100 + -- Rui Nuno Capela Sun, 14 Apr 2019 19:00:00 +0000 -synthv1 (0.7.6-1) unstable; urgency=medium +synthv1 (0.9.6-43) unstable; urgency=low - [ Jaromír Mikeš ] - * New upstream version 0.7.6 - * Start new upload. - * Patch refreshed. - * Package split. - * Rename and install man page. - * Finalize changelog. - * Rename and install man page. - * Split package (4). - * Fix Depends: fields. - * Add Breaks: Replaces: fields. - * Add synthv1.mime file. - * Add synthv1-common.install file. - * Add Breaks Replaces for synthv1-common package. - * Install desktop icons and mime. - * Fix clean in rules file. + * Pre-LAC2019 release frenzy. - [ IOhannes m zmölnig ] - * Minor amendments to package description + -- Rui Nuno Capela Mon, 18 Mar 2019 19:00:00 +0000 - -- Jaromír Mikeš Wed, 12 Oct 2016 20:25:24 +0200 +synthv1 (0.9.5-42) unstable; urgency=low -synthv1 (0.7.5-1) unstable; urgency=medium + * The End of Winter'19 release. - * Imported Upstream version 0.7.5 - * Remove patch applied upstream. - * Patch refreshed. - * Bump Standards. - * Fix VCS fields. - * Switch to qt5. - * Fix hardening. + -- Rui Nuno Capela Mon, 4 Mar 2019 19:00:00 +0000 - -- Jaromír Mikeš Thu, 16 Jun 2016 19:10:32 +0200 +synthv1 (0.9.4-41) unstable; urgency=low -synthv1 (0.7.1-1) unstable; urgency=medium + * A Late Autumn'18 release. - * Imported Upstream version 0.7.1 - * Refresh patches + -- Rui Nuno Capela Wed, 12 Dec 2018 19:00:00 +0000 - -- Jaromír Mikeš Thu, 03 Sep 2015 03:16:35 +0200 +synthv1 (0.9.3-40) unstable; urgency=low -synthv1 (0.6.3-1) unstable; urgency=medium + * An Autumn'18 release. - * Imported Upstream version 0.6.3 + -- Rui Nuno Capela Mon, 22 Oct 2018 19:00:00 +0000 - -- Jaromír Mikeš Mon, 11 May 2015 01:37:11 +0200 +synthv1 (0.9.2-39) unstable; urgency=low -synthv1 (0.6.2-1) unstable; urgency=medium + * A Summer'18 release. - * Imported Upstream version 0.6.2 + -- Rui Nuno Capela Tue, 24 Jul 2018 19:00:00 +0000 - -- Jaromír Mikeš Mon, 04 May 2015 22:51:39 +0200 +synthv1 (0.9.1-38) unstable; urgency=low -synthv1 (0.6.1-1) unstable; urgency=low + * An Early Summer'18 release. - * Imported Upstream version 0.6.1 - * Bump Standards. + -- Rui Nuno Capela Tue, 26 Mar 2018 19:00:00 +0000 - -- Jaromír Mikeš Sun, 22 Mar 2015 16:55:33 +0100 +synthv1 (0.9.0-37) unstable; urgency=low -synthv1 (0.5.1-1) unstable; urgency=low + * The End of Winter'18 release. - * Imported Upstream version 0.5.1 + -- Rui Nuno Capela Wed, 7 Mar 2018 19:00:00 +0000 - -- Jaromír Mikeš Thu, 25 Sep 2014 16:05:03 +0200 +synthv1 (0.8.6-36) unstable; urgency=low -synthv1 (0.5.0-1) unstable; urgency=low + * The End of Autumn'17 release. - * Imported Upstream version 0.5.0 - * Patch refreshed. - * Install lv2 plugin to non-multiarch dir. (Closes: #747677) (Closes: #747678) + -- Rui Nuno Capela Wed, 20 Dec 2017 19:00:00 +0000 - -- Jaromír Mikeš Sat, 09 Aug 2014 09:30:17 +0200 +synthv1 (0.8.5-35) unstable; urgency=low -synthv1 (0.4.1-1) unstable; urgency=low + * An Autumn'17 release. - * New upstream release. - * Fix syntax for Keywords entry in desktop file. + -- Rui Nuno Capela Sun, 29 Oct 2017 19:00:00 +0000 - -- Jaromír Mikeš Fri, 11 Apr 2014 20:21:39 +0200 +synthv1 (0.8.4-34) unstable; urgency=low -synthv1 (0.4.0-1) unstable; urgency=low + * A Late-Summer'17 release. - * Imported Upstream version 0.4.0 - * Two patches removed - applied upstream. + -- Rui Nuno Capela Tue, 22 Aug 2017 18:00:00 +0000 - -- Jaromír Mikeš Tue, 11 Mar 2014 15:08:33 +0100 +synthv1 (0.8.3-33) unstable; urgency=low -synthv1 (0.3.6-3) unstable; urgency=low + * A Summer'17 release. - * Fixed FTBS on kfreebsd-* and hurd. (Closes: #736960) - Thanks to Steven Chamberlain + -- Rui Nuno Capela Wed, 21 Jun 2017 18:00:00 +0000 - -- Jaromír Mikeš Wed, 29 Jan 2014 00:44:33 +0100 +synthv1 (0.8.2-32) unstable; urgency=low -synthv1 (0.3.6-2) unstable; urgency=low + * Pre-LAC2017 release frenzy. - * Fixed install path. + -- Rui Nuno Capela Tue, 2 May 2017 19:00:00 +0000 - -- Jaromír Mikeš Sat, 25 Jan 2014 10:11:58 +0100 +synthv1 (0.8.1-31) unstable; urgency=low -synthv1 (0.3.6-1) unstable; urgency=low + * A Spring'17 release. - * Imported Upstream version 0.3.6 - * Patch refreshed. - * Bump Standards. + -- Rui Nuno Capela Tue, 21 Mar 2017 12:00:00 +0000 - -- Jaromír Mikeš Thu, 23 Jan 2014 01:13:06 +0100 +synthv1 (0.8.0-30) unstable; urgency=low -synthv1 (0.3.5-1) unstable; urgency=low + * A Fall'16 release. - * New upstream release. - * Refresh patches. + -- Rui Nuno Capela Thu, 17 Nov 2016 12:00:00 +0000 - -- Alessio Treglia Tue, 08 Oct 2013 12:27:56 +0100 +synthv1 (0.7.6-29) unstable; urgency=low -synthv1 (0.3.4-1) unstable; urgency=low + * The eleventh official beta. - * New upstream release. - * Patch refreshed. - * Added liblo-dev as build-dep. - * Added patch to fix hardening. - * Added keywords to desktop file - patch. + -- Rui Nuno Capela Mon, 19 Sep 2016 12:00:00 +0100 - -- Jaromír Mikeš Tue, 10 Sep 2013 16:34:21 +0200 +synthv1 (0.7.5-28) unstable; urgency=low -synthv1 (0.3.3-1) unstable; urgency=low + * The tenth official beta. - [ Jaromír Mikeš ] - * Added myself as uploader + -- Rui Nuno Capela Thu, 16 Jun 2016 18:30:00 +0100 - [ Alessio Treglia ] - * New upstream release. +synthv1 (0.7.4-27) unstable; urgency=low - -- Alessio Treglia Mon, 01 Jul 2013 07:54:55 +0100 + * The ninth-bis official beta. -synthv1 (0.3.2-1) unstable; urgency=low + -- Rui Nuno Capela Wed, 2 Mar 2016 18:30:00 +0100 - * New upstream release. +synthv1 (0.7.3-26) unstable; urgency=low - -- Alessio Treglia Sat, 02 Mar 2013 11:20:03 +0000 + * The ninth official beta. -synthv1 (0.3.1-1) unstable; urgency=low + -- Rui Nuno Capela Mon, 22 Feb 2016 19:00:00 +0100 - * New upstream release. - * Refresh patches. +synthv1 (0.7.2-25) unstable; urgency=low - -- Alessio Treglia Fri, 08 Feb 2013 18:13:47 +0000 + * The eighth official beta. -synthv1 (0.3.0-1) unstable; urgency=low + -- Rui Nuno Capela Fri, 4 Dec 2015 18:30:00 +0100 - * New upstream release. - * Fix the Homepage. - * Fix Vcs-Browser field. +synthv1 (0.7.1-24) unstable; urgency=low - -- Alessio Treglia Sat, 29 Dec 2012 16:09:46 +0000 + * A seventh-bis official beta. -synthv1 (0.2.0-1) unstable; urgency=low + -- Rui Nuno Capela Mon, 24 Aug 2015 19:00:00 +0100 - * Initial release. (Closes: #678625) +synthv1 (0.7.0-23) unstable; urgency=low + + * A seventh official beta. + + -- Rui Nuno Capela Fri, 24 Jul 2015 19:00:00 +0100 + +synthv1 (0.6.3-22) unstable; urgency=low + + * A sixth official beta. + + -- Rui Nuno Capela Sat, 9 May 2015 11:00:00 +0100 + +synthv1 (0.6.2-21) unstable; urgency=low + + * A fifth official beta. + + -- Rui Nuno Capela Thu, 30 Apr 2015 18:30:00 +0100 + +synthv1 (0.6.1-20) unstable; urgency=low + + * A fourth official beta. + + -- Rui Nuno Capela Mon, 9 Mar 2015 18:30:00 +0100 + +synthv1 (0.6.0-19) unstable; urgency=low + + * A third official beta. + + -- Rui Nuno Capela Fri, 23 Jan 2015 18:30:00 +0100 + +synthv1 (0.5.1-18) unstable; urgency=low + + * One second official beta. + + -- Rui Nuno Capela Fri, 12 Sep 2014 18:00:00 +0100 + +synthv1 (0.5.0-17) unstable; urgency=low + + * Officially beta now. + + -- Rui Nuno Capela Mon, 30 Jun 2014 18:00:00 +0100 + +synthv1 (0.4.2-16) unstable; urgency=low + + * A pre-LAC frenzy beta. + + -- Rui Nuno Capela Tue, 29 Apr 2014 18:30:00 +0100 + +synthv1 (0.4.1-15) unstable; urgency=low + + * A proto-beta bis. + + -- Rui Nuno Capela Mon, 7 Apr 2014 18:30:00 +0100 + +synthv1 (0.4.0-14) unstable; urgency=low + + * A proto-beta party. + + -- Rui Nuno Capela Thu, 6 Mar 2014 18:00:00 +0100 + +synthv1 (0.3.6-13) unstable; urgency=low + + * A fifth of a Jubilee release. + + -- Rui Nuno Capela Tue, 31 Dec 2013 12:00:00 +0100 + +synthv1 (0.3.5-12) unstable; urgency=low + + * Fall greetings release. + + -- Rui Nuno Capela Mon, 30 Sep 2013 19:00:00 +0000 + +synthv1 (0.3.4-11) unstable; urgency=low + + * Brand new icon ready. + + -- Rui Nuno Capela Tue, 16 Jul 2013 18:30:00 +0000 + +synthv1 (0.3.3-10) unstable; urgency=low + + * Late spring blossoming. + + -- Rui Nuno Capela Fri, 31 May 2013 18:30:00 +0000 + +synthv1 (0.3.2-9) unstable; urgency=low + + * One third bug-fix release. + + -- Rui Nuno Capela Fri, 1 Mar 2013 18:00:00 +0000 + +synthv1 (0.3.1-8) unstable; urgency=low + + * One second bug-fix release. + + -- Rui Nuno Capela Fri, 8 Dec 2013 18:00:00 +0000 + +synthv1 (0.3.0-7) unstable; urgency=low + + * Third coming release. + + -- Rui Nuno Capela Fri, 21 Dec 2012 18:00:00 +0000 + +synthv1 (0.2.0-6) unstable; urgency=low + + * Second public release. + + -- Rui Nuno Capela Thu, 22 Nov 2012 18:00:00 +0000 + +synthv1 (0.1.1-5) unstable; urgency=low + + * One first bug-fix release. + + -- Rui Nuno Capela Mon, 24 Sep 2012 12:00:00 +0000 + +synthv1 (0.1.0-4) unstable; urgency=low + + * First true official release. + + -- Rui Nuno Capela Mon, 10 Sep 2012 12:00:00 +0000 + +synthv1 (0.0.9-3) unstable; urgency=low + + * Post-vacation relax: improved polyphony, preset salvage. + + -- Rui Nuno Capela Mon, 27 Aug 2012 18:00:00 +0000 + +synthv1 (0.0.8-2) unstable; urgency=low + + * Proto-Icon, Desktop file and Help About menus added. + + -- Rui Nuno Capela Sun, 15 Jul 2012 00:00:00 +0000 + +synthv1 (0.0.7-1) unstable; urgency=low + + * Initial debianization + + -- Rui Nuno Capela Sun, 8 Jul 2012 12:00:00 +0000 - -- Alessio Treglia Fri, 23 Nov 2012 11:34:19 +0000 diff -Nru synthv1-0.8.6/debian/compat synthv1-0.9.10+git20190929/debian/compat --- synthv1-0.8.6/debian/compat 2017-12-29 09:05:28.000000000 +0000 +++ synthv1-0.9.10+git20190929/debian/compat 2019-09-28 23:00:43.000000000 +0000 @@ -1 +1 @@ -11 +9 diff -Nru synthv1-0.8.6/debian/control synthv1-0.9.10+git20190929/debian/control --- synthv1-0.8.6/debian/control 2017-12-29 09:05:21.000000000 +0000 +++ synthv1-0.9.10+git20190929/debian/control 2019-09-28 23:41:43.000000000 +0000 @@ -1,71 +1,34 @@ Source: synthv1 -Section: sound -Priority: optional -Maintainer: Debian Multimedia Maintainers -Uploaders: - Alessio Treglia , - Jaromír Mikeš , -Build-Depends: - automake, - debhelper (>= 11~), - ladspa-sdk, - libasound2-dev, - libjack-dev, - qtbase5-dev, - qttools5-dev-tools, - libsndfile1-dev, - libtool, - libx11-dev, - lv2-dev, - liblo-dev, -Homepage: https://synthv1.sourceforge.io/ -Standards-Version: 4.1.2 -Vcs-Git: https://anonscm.debian.org/git/pkg-multimedia/synthv1.git -Vcs-Browser: https://anonscm.debian.org/git/pkg-multimedia/synthv1.git +Section: contrib/sound +Priority: extra +Maintainer: falkTX +Build-Depends: debhelper (>= 9), dh-autoreconf, pkg-config, qtchooser, + libasound2-dev, libjack-dev | libjack-jackd2-dev, lv2-dev, + lv2vst, liblo-static, qtbase5-static +Standards-Version: 3.9.7 Package: synthv1 Architecture: any -Depends: - ${misc:Depends}, - ${shlibs:Depends}, - synthv1-common (=${binary:Version}), -Recommends: - jackd -Description: old-school polyphonic synthesizer - standalone - synthv1 is an old-school all-digital 4-oscillator subtractive - polyphonic synthesizer with stereo effects, especially suited - to create strong bass sounds. +Depends: ${shlibs:Depends}, ${misc:Depends} +Breaks: synthv1-common (= 2:0.9.4-1kxstudio1v5) +Replaces: synthv1-common (= 2:0.9.4-1kxstudio1v5) +Provides: standalone-plugin +Description: An old-school polyphonic subtractive synthesizer - JACK standalone + An old-school all-digital 4-oscillator subtractive polyphonic synthesizer with stereo fx. . - This package provides the standalone app. + This package provides the standalone JACK client application (synthv1_jack) Package: synthv1-lv2 Architecture: any -Depends: - ${misc:Depends}, - ${shlibs:Depends}, - synthv1-common (=${binary:Version}), -Replaces: synthv1 (<< 0.7.6) -Breaks: synthv1 (<< 0.7.6) -Provides: - lv2-plugin -Description: old-school polyphonic synthesizer - LV2 plugin - synthv1 is an old-school all-digital 4-oscillator subtractive - polyphonic synthesizer with stereo effects, especially suited - to create strong bass sounds. +Depends: ${shlibs:Depends}, ${misc:Depends} +Provides: lv2-plugin, vst-plugin +Description: An old-school polyphonic subtractive synthesizer - LV2 plugin + An old-school all-digital 4-oscillator subtractive polyphonic synthesizer with stereo fx. . - This package provides the LV2 plugin. + This package provides the LV2 plugin (http://synthv1.sourceforge.net/lv2) Package: synthv1-common -Architecture: any -Depends: - ${misc:Depends}, - ${shlibs:Depends}, -Replaces: synthv1 (<< 0.7.6) -Breaks: synthv1 (<< 0.7.6) -Description: old-school polyphonic synthesizer - common files - synthv1 is an old-school all-digital 4-oscillator subtractive - polyphonic synthesizer with stereo effects, especially suited - to create strong bass sounds. - . - This package provides files shared by both the LV2 plugin - and the standalone application. +Architecture: all +Depends: ${misc:Depends} +Description: Dummy package + This is a dummy package and can be safely removed if nothing depends on it. diff -Nru synthv1-0.8.6/debian/copyright synthv1-0.9.10+git20190929/debian/copyright --- synthv1-0.8.6/debian/copyright 2017-12-29 09:04:14.000000000 +0000 +++ synthv1-0.9.10+git20190929/debian/copyright 2019-09-28 23:00:43.000000000 +0000 @@ -1,35 +1,33 @@ -Format: http://www.debian.org/doc/packaging-manuals/copyright-format/1.0/ -Upstream-Name: synthv1 -Upstream-Contact: Rui Nuno Capela -Source: https://sourceforge.net/projects/synthv1/files/ -Copyright: 2012, rncbc aka Rui Nuno Capela +This package was debianized by Rui Nuno Capela on +Sat, 7 Jul 2012 12:00:00 +0000. -Files: * -Copyright: - 2012 rncbc aka Rui Nuno Capela - 2007 arguru, discodsp.com - 2007 jorgen, linux-vst.com -License: GPL-2+ +It was downloaded from http://synthv1.sourceforge.net + +Upstream Author: Rui Nuno Capela -Files: debian/* Copyright: - 2012 Alessio Treglia - 2013-2017 Jaromír Mikeš -License: GPL-2+ - -License: GPL-2+ - This package 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 package 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, see . - . - On Debian systems, the complete text of the GNU General - Public License can be found in `/usr/share/common-licenses/GPL-2'. + + Copyright (C) 2012-2019, rncbc aka Rui Nuno Capela. All rights reserved. + +License: + + 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. + +On Debian systems, the complete text of the GNU General +Public License can be found in `/usr/share/common-licenses/GPL'. + +The Debian packaging is (C) 2012-2019, Rui Nuno Capela and +is licensed under the GPL, see above. + diff -Nru synthv1-0.8.6/debian/docs synthv1-0.9.10+git20190929/debian/docs --- synthv1-0.8.6/debian/docs 1970-01-01 00:00:00.000000000 +0000 +++ synthv1-0.9.10+git20190929/debian/docs 2019-09-28 23:00:43.000000000 +0000 @@ -0,0 +1,2 @@ +README +TODO diff -Nru synthv1-0.8.6/debian/gbp/postclone.sh synthv1-0.9.10+git20190929/debian/gbp/postclone.sh --- synthv1-0.8.6/debian/gbp/postclone.sh 2017-11-02 18:03:57.000000000 +0000 +++ synthv1-0.9.10+git20190929/debian/gbp/postclone.sh 1970-01-01 00:00:00.000000000 +0000 @@ -1,14 +0,0 @@ -#!/bin/sh - -## script to initialize a cloned repository -## with per (local) repository settings. - -# - ignore quilt's .pc/ directory -# - enable the "--follow-tags" mode for pushing - -echo "tuning git-repository for ${NAME}" -git config push.followTags true && echo "enabled push.followTags" - -GITEXCLUDE=".git/info/exclude" -egrep "^/?\.pc/?$" "${GITEXCLUDE}" >/dev/null 2>&1 \ - || (echo "/.pc/" >> "${GITEXCLUDE}" && echo "ignoring /.pc/") diff -Nru synthv1-0.8.6/debian/gbp.conf synthv1-0.9.10+git20190929/debian/gbp.conf --- synthv1-0.8.6/debian/gbp.conf 2017-06-26 18:54:39.000000000 +0000 +++ synthv1-0.9.10+git20190929/debian/gbp.conf 1970-01-01 00:00:00.000000000 +0000 @@ -1,3 +0,0 @@ -[DEFAULT] -pristine-tar = True -sign-tags = True diff -Nru synthv1-0.8.6/debian/patches/0002-fix_hardening.patch synthv1-0.9.10+git20190929/debian/patches/0002-fix_hardening.patch --- synthv1-0.8.6/debian/patches/0002-fix_hardening.patch 2016-11-21 10:21:54.000000000 +0000 +++ synthv1-0.9.10+git20190929/debian/patches/0002-fix_hardening.patch 1970-01-01 00:00:00.000000000 +0000 @@ -1,30 +0,0 @@ -Description: Fix hardening -Author: Jaromír Mikeš -Forwarded: yes - -Index: synthv1/src/src_jack.pri.in -=================================================================== ---- synthv1.orig/src/src_jack.pri.in -+++ synthv1/src/src_jack.pri.in -@@ -13,5 +13,6 @@ INCLUDEPATH += @ac_jack_incpath@ - LIBS += @ac_jack_libs@ - - # Extra optimization flags --QMAKE_CXXFLAGS += @ac_jack_cflags@ --QMAKE_LFLAGS += @ac_jack_ldflags@ -+QMAKE_CXXFLAGS += $(CPPFLAGS) @ac_jack_cflags@ -+QMAKE_CFLAGS += $(CPPFLAGS) -+QMAKE_LFLAGS += $(LDFLAGS) @ac_jack_ldflags@ -Index: synthv1/src/src_lv2.pri.in -=================================================================== ---- synthv1.orig/src/src_lv2.pri.in -+++ synthv1/src/src_lv2.pri.in -@@ -13,5 +13,6 @@ INCLUDEPATH += @ac_lv2_incpath@ - LIBS += @ac_lv2_libs@ - - # Extra optimization flags --QMAKE_CXXFLAGS += @ac_lv2_cflags@ --QMAKE_LFLAGS += @ac_lv2_ldflags@ -+QMAKE_CXXFLAGS += $(CPPFLAGS) @ac_lv2_cflags@ -+QMAKE_CFLAGS += $(CPPFLAGS) -+QMAKE_LFLAGS += $(LDFLAGS) @ac_lv2_ldflags@ diff -Nru synthv1-0.8.6/debian/patches/0004-fix_install_path.patch synthv1-0.9.10+git20190929/debian/patches/0004-fix_install_path.patch --- synthv1-0.8.6/debian/patches/0004-fix_install_path.patch 2017-11-02 18:25:35.000000000 +0000 +++ synthv1-0.9.10+git20190929/debian/patches/0004-fix_install_path.patch 1970-01-01 00:00:00.000000000 +0000 @@ -1,90 +0,0 @@ -Description: Install lv2 plugin to non-multiarch dir. -Author: Jaromír Mikeš -Forwarded: no - -Index: synthv1/src/src_lv2.pro -=================================================================== ---- synthv1.orig/src/src_lv2.pro -+++ synthv1/src/src_lv2.pro -@@ -39,7 +39,7 @@ unix { - contains(PREFIX, $$system(echo $HOME)) { - LV2DIR = $${PREFIX}/.lv2 - } else { -- LV2DIR = $${LIBDIR}/lv2 -+ LV2DIR = $${PREFIX}/lib/lv2 - } - - TARGET_LV2 = $${NAME}.lv2/$${NAME} -@@ -59,7 +59,7 @@ unix { - - QMAKE_CLEAN += $${TARGET_LV2}.so - -- LIBS += -l$${NAME} -Wl,-rpath,$${LIBDIR} -+ LIBS += -l$${NAME} -Wl,-rpath,$${PREFIX}/lib/$${NAME} - } - - QT -= gui -Index: synthv1/src/src_lv2ui.pro -=================================================================== ---- synthv1.orig/src/src_lv2ui.pro -+++ synthv1/src/src_lv2ui.pro -@@ -41,7 +41,7 @@ unix { - contains(PREFIX, $$system(echo $HOME)) { - LV2DIR = $${PREFIX}/.lv2 - } else { -- LV2DIR = $${LIBDIR}/lv2 -+ LV2DIR = $${PREFIX}/lib/lv2 - } - - TARGET_LV2UI = $${NAME}.lv2/$${NAME}_ui -@@ -71,7 +71,7 @@ unix { - - QMAKE_CLEAN += $${TARGET_LV2UI}.so $${TARGET_LV2UI}.ttl - -- LIBS += -l$${NAME} -l$${NAME}_ui -L$${NAME}.lv2 -Wl,-rpath,$${LIBDIR}:$${LV2DIR}/$${NAME}.lv2 -+ LIBS += -l$${NAME} -l$${NAME}_ui -L$${NAME}.lv2 -Wl,-rpath,$${PREFIX}/lib/$${NAME} - } - - QT += xml -Index: synthv1/src/src_jack.pro -=================================================================== ---- synthv1.orig/src/src_jack.pro -+++ synthv1/src/src_jack.pro -@@ -75,7 +75,7 @@ unix { - mimetypes_scalable.path = $${DATADIR}/icons/hicolor/scalable/mimetypes - mimetypes_scalable.files += mimetypes/application-x-$${NAME}-preset.svg - -- LIBS += -l$${NAME} -l$${NAME}_ui -Wl,-rpath,$${LIBDIR} -+ LIBS += -l$${NAME} -l$${NAME}_ui -Wl,-rpath,$${PREFIX}/lib/$${NAME} - } - - QT += xml -Index: synthv1/src/src_core.pro -=================================================================== ---- synthv1.orig/src/src_core.pro -+++ synthv1/src/src_core.pro -@@ -56,7 +56,7 @@ unix { - - INSTALLS += target - -- target.path = $${LIBDIR} -+ target.path = $${PREFIX}/lib/$${NAME} - } - - QT -= gui -Index: synthv1/src/src_ui.pro -=================================================================== ---- synthv1.orig/src/src_ui.pro -+++ synthv1/src/src_ui.pro -@@ -67,9 +67,9 @@ unix { - - INSTALLS += target - -- target.path = $${LIBDIR} -+ target.path = $${PREFIX}/lib/$${NAME} - -- LIBS += -l$${NAME} -Wl,-rpath,$${LIBDIR} -+ LIBS += -l$${NAME} -Wl,-rpath,$${PREFIX}/lib/$${NAME} - } - - QT += xml diff -Nru synthv1-0.8.6/debian/patches/series synthv1-0.9.10+git20190929/debian/patches/series --- synthv1-0.8.6/debian/patches/series 2016-09-26 17:33:44.000000000 +0000 +++ synthv1-0.9.10+git20190929/debian/patches/series 1970-01-01 00:00:00.000000000 +0000 @@ -1,2 +0,0 @@ -0002-fix_hardening.patch -0004-fix_install_path.patch diff -Nru synthv1-0.8.6/debian/README.source synthv1-0.9.10+git20190929/debian/README.source --- synthv1-0.8.6/debian/README.source 2017-11-02 18:03:57.000000000 +0000 +++ synthv1-0.9.10+git20190929/debian/README.source 1970-01-01 00:00:00.000000000 +0000 @@ -1,22 +0,0 @@ -gbp clone ---------- - -Starting with gbp>0.8.1, here's an simple way to automatically fine-tune the -repository in the following ways: -- make git ignore any .pc/ directory (created by quilt) -- enable the "--follow-tags" when running 'git-push', so it's harder - to forget to push packaging tags along with the branches. - -To enable this, run gbp-clone with the '--postclone debian/gbp/postclone.sh' -option. -To enable this for ALL repositories cloned via 'gbp' (in the future), do -something like the following: - - $ mkdir -p ~/bin - $ cp debian/gbp/postclone.sh ~/bin/gbphook-postclone - $ cat >> ~/.gbp.conf < Mon, 1 Aug 2016 12:15:50 +0200 diff -Nru synthv1-0.8.6/debian/rules synthv1-0.9.10+git20190929/debian/rules --- synthv1-0.8.6/debian/rules 2017-06-26 19:06:52.000000000 +0000 +++ synthv1-0.9.10+git20190929/debian/rules 2019-09-28 23:24:38.000000000 +0000 @@ -1,38 +1,41 @@ #!/usr/bin/make -f -export DEB_BUILD_MAINT_OPTIONS = hardening=+all +DEB_HOST_ARCH = $(shell dpkg-architecture -qDEB_HOST_ARCH) -export DEB_LDFLAGS_MAINT_APPEND = -Wl,--as-needed - -DEB_HOST_ARCH_OS ?= $(shell dpkg-architecture -qDEB_HOST_ARCH_OS) - -EXTRA_CONFIGURE_ARGS = \ - --enable-jack \ - --enable-jack-midi \ - --enable-jack-session \ - --enable-lv2 - -export QTDIR=/usr/share/qt5 -export QT_SELECT=qt5 - -ifeq ($(DEB_HOST_ARCH_OS),linux) -EXTRA_CONFIGURE_ARGS += --enable-alsa-midi +FLAGS = -O3 -ffast-math -fPIC -DPIC -fdata-sections -ffunction-sections -DNDEBUG +ifeq ($(DEB_HOST_ARCH),armhf) +FLAGS += -march=armv7ve -mcpu=cortex-a7 -mfloat-abi=hard -mfpu=neon-vfpv4 +else ifeq ($(DEB_HOST_ARCH),arm64) +FLAGS += -march=armv8-a -mcpu=cortex-a53 else -EXTRA_CONFIGURE_ARGS += --disable-alsa-midi +FLAGS += -mtune=generic -msse -msse2 -mfpmath=sse endif -%: - dh $@ +export CFLAGS=$(FLAGS) +export CXXFLAGS=$(FLAGS) -fvisibility-inlines-hidden +export CPPFLAGS= +export LDFLAGS=-Wl,-O1 -Wl,--as-needed -Wl,--no-undefined -Wl,--gc-sections -Wl,--strip-all -Wl,-z,nodelete +export PATH:=/opt/kxstudio/bin:$(PATH) +export PKG_CONFIG_PATH=/opt/kxstudio/lib/pkgconfig + +export QTDIR=/opt/kxstudio + +override_dh_auto_clean: + dh_auto_clean + ./autogen.sh clean override_dh_auto_configure: - dh_auto_configure -- $(EXTRA_CONFIGURE_ARGS) + dh_auto_configure -- --libdir=/usr/lib + +override_dh_auto_build: + dh_auto_build -- -j 4 override_dh_auto_install: - cp $(CURDIR)/synthv1.1 $(CURDIR)/synthv1_jack.1 dh_auto_install - cp $(CURDIR)/debian/tmp/usr/share/mime/packages/synthv1.xml $(CURDIR)/debian/synthv1-common.sharedmimeinfo -override_dh_clean: - dh_clean - rm -f $(CURDIR)/debian/synthv1-common.sharedmimeinfo - rm -f $(CURDIR)/synthv1_jack.1 + mkdir -p $(CURDIR)/debian/tmp/usr/lib/vst/ + cp /opt/kxstudio/lib/lv2vst.so $(CURDIR)/debian/tmp/usr/lib/vst/synthv1.lv2.so + echo "/usr/lib/lv2/synthv1.lv2/" > $(CURDIR)/debian/tmp/usr/lib/vst/synthv1.lv2.bundle + +%: + dh $@ --with autoreconf diff -Nru synthv1-0.8.6/debian/source/format synthv1-0.9.10+git20190929/debian/source/format --- synthv1-0.8.6/debian/source/format 2016-09-26 17:33:44.000000000 +0000 +++ synthv1-0.9.10+git20190929/debian/source/format 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -3.0 (quilt) diff -Nru synthv1-0.8.6/debian/synthv1-common.install synthv1-0.9.10+git20190929/debian/synthv1-common.install --- synthv1-0.8.6/debian/synthv1-common.install 2016-10-08 07:57:10.000000000 +0000 +++ synthv1-0.9.10+git20190929/debian/synthv1-common.install 1970-01-01 00:00:00.000000000 +0000 @@ -1,2 +0,0 @@ -usr/lib/synthv1/*.so.* usr/lib/synthv1/ -usr/share/icons/*/*/mimetypes/* diff -Nru synthv1-0.8.6/debian/synthv1.docs synthv1-0.9.10+git20190929/debian/synthv1.docs --- synthv1-0.8.6/debian/synthv1.docs 1970-01-01 00:00:00.000000000 +0000 +++ synthv1-0.9.10+git20190929/debian/synthv1.docs 2019-09-28 23:00:43.000000000 +0000 @@ -0,0 +1,5 @@ +AUTHORS +COPYING +ChangeLog +README +TODO diff -Nru synthv1-0.8.6/debian/synthv1.install synthv1-0.9.10+git20190929/debian/synthv1.install --- synthv1-0.8.6/debian/synthv1.install 2017-11-02 18:11:59.000000000 +0000 +++ synthv1-0.9.10+git20190929/debian/synthv1.install 2019-09-28 23:28:58.000000000 +0000 @@ -1,4 +1,2 @@ -usr/bin/* -usr/share/metainfo/synthv1.appdata.xml -usr/share/applications/synthv1.desktop -usr/share/icons/*/*/apps/* +/usr/bin/ +/usr/share/ diff -Nru synthv1-0.8.6/debian/synthv1-lv2.install synthv1-0.9.10+git20190929/debian/synthv1-lv2.install --- synthv1-0.8.6/debian/synthv1-lv2.install 2016-09-26 17:23:08.000000000 +0000 +++ synthv1-0.9.10+git20190929/debian/synthv1-lv2.install 2019-09-28 23:28:16.000000000 +0000 @@ -1 +1,2 @@ -usr/lib/lv2/synthv1.lv2/* usr/lib/lv2/synthv1.lv2/ +/usr/lib/lv2/*.lv2/ +/usr/lib/vst/ diff -Nru synthv1-0.8.6/debian/synthv1.manpages synthv1-0.9.10+git20190929/debian/synthv1.manpages --- synthv1-0.8.6/debian/synthv1.manpages 2016-09-26 17:45:16.000000000 +0000 +++ synthv1-0.9.10+git20190929/debian/synthv1.manpages 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -synthv1_jack.1 diff -Nru synthv1-0.8.6/debian/synthv1.mime synthv1-0.9.10+git20190929/debian/synthv1.mime --- synthv1-0.8.6/debian/synthv1.mime 2016-10-08 07:55:09.000000000 +0000 +++ synthv1-0.9.10+git20190929/debian/synthv1.mime 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -application/x-synthv1-preset; synthv1_jack '%s'; edit=synthv1_jack '%s'; test=test "$DISPLAY" != ""; priority=2 diff -Nru synthv1-0.8.6/debian/watch synthv1-0.9.10+git20190929/debian/watch --- synthv1-0.8.6/debian/watch 2017-11-02 18:11:15.000000000 +0000 +++ synthv1-0.9.10+git20190929/debian/watch 1970-01-01 00:00:00.000000000 +0000 @@ -1,2 +0,0 @@ -version=3 -https://sf.net/synthv1/synthv1-([\d.]+)\.tar\.gz diff -Nru synthv1-0.8.6/.git/config synthv1-0.9.10+git20190929/.git/config --- synthv1-0.8.6/.git/config 1970-01-01 00:00:00.000000000 +0000 +++ synthv1-0.9.10+git20190929/.git/config 2019-09-28 23:05:55.000000000 +0000 @@ -0,0 +1,14 @@ +[core] + repositoryformatversion = 0 + filemode = true + bare = false + logallrefupdates = true +[remote "origin"] + url = https://git.code.sf.net/p/synthv1/code + fetch = +refs/heads/*:refs/remotes/origin/* +[branch "master"] + remote = origin + merge = refs/heads/master +[branch "xstatic"] + remote = origin + merge = refs/heads/xstatic diff -Nru synthv1-0.8.6/.git/description synthv1-0.9.10+git20190929/.git/description --- synthv1-0.8.6/.git/description 1970-01-01 00:00:00.000000000 +0000 +++ synthv1-0.9.10+git20190929/.git/description 2019-09-28 23:00:02.000000000 +0000 @@ -0,0 +1 @@ +Unnamed repository; edit this file 'description' to name the repository. diff -Nru synthv1-0.8.6/.git/HEAD synthv1-0.9.10+git20190929/.git/HEAD --- synthv1-0.8.6/.git/HEAD 1970-01-01 00:00:00.000000000 +0000 +++ synthv1-0.9.10+git20190929/.git/HEAD 2019-09-28 23:05:55.000000000 +0000 @@ -0,0 +1 @@ +ref: refs/heads/xstatic diff -Nru synthv1-0.8.6/.git/hooks/applypatch-msg.sample synthv1-0.9.10+git20190929/.git/hooks/applypatch-msg.sample --- synthv1-0.8.6/.git/hooks/applypatch-msg.sample 1970-01-01 00:00:00.000000000 +0000 +++ synthv1-0.9.10+git20190929/.git/hooks/applypatch-msg.sample 2019-09-28 23:00:02.000000000 +0000 @@ -0,0 +1,15 @@ +#!/bin/sh +# +# An example hook script to check the commit log message taken by +# applypatch from an e-mail message. +# +# The hook should exit with non-zero status after issuing an +# appropriate message if it wants to stop the commit. The hook is +# allowed to edit the commit message file. +# +# To enable this hook, rename this file to "applypatch-msg". + +. git-sh-setup +commitmsg="$(git rev-parse --git-path hooks/commit-msg)" +test -x "$commitmsg" && exec "$commitmsg" ${1+"$@"} +: diff -Nru synthv1-0.8.6/.git/hooks/commit-msg.sample synthv1-0.9.10+git20190929/.git/hooks/commit-msg.sample --- synthv1-0.8.6/.git/hooks/commit-msg.sample 1970-01-01 00:00:00.000000000 +0000 +++ synthv1-0.9.10+git20190929/.git/hooks/commit-msg.sample 2019-09-28 23:00:02.000000000 +0000 @@ -0,0 +1,24 @@ +#!/bin/sh +# +# An example hook script to check the commit log message. +# Called by "git commit" with one argument, the name of the file +# that has the commit message. The hook should exit with non-zero +# status after issuing an appropriate message if it wants to stop the +# commit. The hook is allowed to edit the commit message file. +# +# To enable this hook, rename this file to "commit-msg". + +# Uncomment the below to add a Signed-off-by line to the message. +# Doing this in a hook is a bad idea in general, but the prepare-commit-msg +# hook is more suited to it. +# +# SOB=$(git var GIT_AUTHOR_IDENT | sed -n 's/^\(.*>\).*$/Signed-off-by: \1/p') +# grep -qs "^$SOB" "$1" || echo "$SOB" >> "$1" + +# This example catches duplicate Signed-off-by lines. + +test "" = "$(grep '^Signed-off-by: ' "$1" | + sort | uniq -c | sed -e '/^[ ]*1[ ]/d')" || { + echo >&2 Duplicate Signed-off-by lines. + exit 1 +} diff -Nru synthv1-0.8.6/.git/hooks/fsmonitor-watchman.sample synthv1-0.9.10+git20190929/.git/hooks/fsmonitor-watchman.sample --- synthv1-0.8.6/.git/hooks/fsmonitor-watchman.sample 1970-01-01 00:00:00.000000000 +0000 +++ synthv1-0.9.10+git20190929/.git/hooks/fsmonitor-watchman.sample 2019-09-28 23:00:02.000000000 +0000 @@ -0,0 +1,114 @@ +#!/usr/bin/perl + +use strict; +use warnings; +use IPC::Open2; + +# An example hook script to integrate Watchman +# (https://facebook.github.io/watchman/) with git to speed up detecting +# new and modified files. +# +# The hook is passed a version (currently 1) and a time in nanoseconds +# formatted as a string and outputs to stdout all files that have been +# modified since the given time. Paths must be relative to the root of +# the working tree and separated by a single NUL. +# +# To enable this hook, rename this file to "query-watchman" and set +# 'git config core.fsmonitor .git/hooks/query-watchman' +# +my ($version, $time) = @ARGV; + +# Check the hook interface version + +if ($version == 1) { + # convert nanoseconds to seconds + $time = int $time / 1000000000; +} else { + die "Unsupported query-fsmonitor hook version '$version'.\n" . + "Falling back to scanning...\n"; +} + +my $git_work_tree; +if ($^O =~ 'msys' || $^O =~ 'cygwin') { + $git_work_tree = Win32::GetCwd(); + $git_work_tree =~ tr/\\/\//; +} else { + require Cwd; + $git_work_tree = Cwd::cwd(); +} + +my $retry = 1; + +launch_watchman(); + +sub launch_watchman { + + my $pid = open2(\*CHLD_OUT, \*CHLD_IN, 'watchman -j --no-pretty') + or die "open2() failed: $!\n" . + "Falling back to scanning...\n"; + + # In the query expression below we're asking for names of files that + # changed since $time but were not transient (ie created after + # $time but no longer exist). + # + # To accomplish this, we're using the "since" generator to use the + # recency index to select candidate nodes and "fields" to limit the + # output to file names only. Then we're using the "expression" term to + # further constrain the results. + # + # The category of transient files that we want to ignore will have a + # creation clock (cclock) newer than $time_t value and will also not + # currently exist. + + my $query = <<" END"; + ["query", "$git_work_tree", { + "since": $time, + "fields": ["name"], + "expression": ["not", ["allof", ["since", $time, "cclock"], ["not", "exists"]]] + }] + END + + print CHLD_IN $query; + close CHLD_IN; + my $response = do {local $/; }; + + die "Watchman: command returned no output.\n" . + "Falling back to scanning...\n" if $response eq ""; + die "Watchman: command returned invalid output: $response\n" . + "Falling back to scanning...\n" unless $response =~ /^\{/; + + my $json_pkg; + eval { + require JSON::XS; + $json_pkg = "JSON::XS"; + 1; + } or do { + require JSON::PP; + $json_pkg = "JSON::PP"; + }; + + my $o = $json_pkg->new->utf8->decode($response); + + if ($retry > 0 and $o->{error} and $o->{error} =~ m/unable to resolve root .* directory (.*) is not watched/) { + print STDERR "Adding '$git_work_tree' to watchman's watch list.\n"; + $retry--; + qx/watchman watch "$git_work_tree"/; + die "Failed to make watchman watch '$git_work_tree'.\n" . + "Falling back to scanning...\n" if $? != 0; + + # Watchman will always return all files on the first query so + # return the fast "everything is dirty" flag to git and do the + # Watchman query just to get it over with now so we won't pay + # the cost in git to look up each individual file. + print "/\0"; + eval { launch_watchman() }; + exit 0; + } + + die "Watchman: $o->{error}.\n" . + "Falling back to scanning...\n" if $o->{error}; + + binmode STDOUT, ":utf8"; + local $, = "\0"; + print @{$o->{files}}; +} diff -Nru synthv1-0.8.6/.git/hooks/post-update.sample synthv1-0.9.10+git20190929/.git/hooks/post-update.sample --- synthv1-0.8.6/.git/hooks/post-update.sample 1970-01-01 00:00:00.000000000 +0000 +++ synthv1-0.9.10+git20190929/.git/hooks/post-update.sample 2019-09-28 23:00:02.000000000 +0000 @@ -0,0 +1,8 @@ +#!/bin/sh +# +# An example hook script to prepare a packed repository for use over +# dumb transports. +# +# To enable this hook, rename this file to "post-update". + +exec git update-server-info diff -Nru synthv1-0.8.6/.git/hooks/pre-applypatch.sample synthv1-0.9.10+git20190929/.git/hooks/pre-applypatch.sample --- synthv1-0.8.6/.git/hooks/pre-applypatch.sample 1970-01-01 00:00:00.000000000 +0000 +++ synthv1-0.9.10+git20190929/.git/hooks/pre-applypatch.sample 2019-09-28 23:00:02.000000000 +0000 @@ -0,0 +1,14 @@ +#!/bin/sh +# +# An example hook script to verify what is about to be committed +# by applypatch from an e-mail message. +# +# The hook should exit with non-zero status after issuing an +# appropriate message if it wants to stop the commit. +# +# To enable this hook, rename this file to "pre-applypatch". + +. git-sh-setup +precommit="$(git rev-parse --git-path hooks/pre-commit)" +test -x "$precommit" && exec "$precommit" ${1+"$@"} +: diff -Nru synthv1-0.8.6/.git/hooks/pre-commit.sample synthv1-0.9.10+git20190929/.git/hooks/pre-commit.sample --- synthv1-0.8.6/.git/hooks/pre-commit.sample 1970-01-01 00:00:00.000000000 +0000 +++ synthv1-0.9.10+git20190929/.git/hooks/pre-commit.sample 2019-09-28 23:00:02.000000000 +0000 @@ -0,0 +1,49 @@ +#!/bin/sh +# +# An example hook script to verify what is about to be committed. +# Called by "git commit" with no arguments. The hook should +# exit with non-zero status after issuing an appropriate message if +# it wants to stop the commit. +# +# To enable this hook, rename this file to "pre-commit". + +if git rev-parse --verify HEAD >/dev/null 2>&1 +then + against=HEAD +else + # Initial commit: diff against an empty tree object + against=4b825dc642cb6eb9a060e54bf8d69288fbee4904 +fi + +# If you want to allow non-ASCII filenames set this variable to true. +allownonascii=$(git config --bool hooks.allownonascii) + +# Redirect output to stderr. +exec 1>&2 + +# Cross platform projects tend to avoid non-ASCII filenames; prevent +# them from being added to the repository. We exploit the fact that the +# printable range starts at the space character and ends with tilde. +if [ "$allownonascii" != "true" ] && + # Note that the use of brackets around a tr range is ok here, (it's + # even required, for portability to Solaris 10's /usr/bin/tr), since + # the square bracket bytes happen to fall in the designated range. + test $(git diff --cached --name-only --diff-filter=A -z $against | + LC_ALL=C tr -d '[ -~]\0' | wc -c) != 0 +then + cat <<\EOF +Error: Attempt to add a non-ASCII file name. + +This can cause problems if you want to work with people on other platforms. + +To be portable it is advisable to rename the file. + +If you know what you are doing you can disable this check using: + + git config hooks.allownonascii true +EOF + exit 1 +fi + +# If there are whitespace errors, print the offending file names and fail. +exec git diff-index --check --cached $against -- diff -Nru synthv1-0.8.6/.git/hooks/prepare-commit-msg.sample synthv1-0.9.10+git20190929/.git/hooks/prepare-commit-msg.sample --- synthv1-0.8.6/.git/hooks/prepare-commit-msg.sample 1970-01-01 00:00:00.000000000 +0000 +++ synthv1-0.9.10+git20190929/.git/hooks/prepare-commit-msg.sample 2019-09-28 23:00:02.000000000 +0000 @@ -0,0 +1,42 @@ +#!/bin/sh +# +# An example hook script to prepare the commit log message. +# Called by "git commit" with the name of the file that has the +# commit message, followed by the description of the commit +# message's source. The hook's purpose is to edit the commit +# message file. If the hook fails with a non-zero status, +# the commit is aborted. +# +# To enable this hook, rename this file to "prepare-commit-msg". + +# This hook includes three examples. The first one removes the +# "# Please enter the commit message..." help message. +# +# The second includes the output of "git diff --name-status -r" +# into the message, just before the "git status" output. It is +# commented because it doesn't cope with --amend or with squashed +# commits. +# +# The third example adds a Signed-off-by line to the message, that can +# still be edited. This is rarely a good idea. + +COMMIT_MSG_FILE=$1 +COMMIT_SOURCE=$2 +SHA1=$3 + +/usr/bin/perl -i.bak -ne 'print unless(m/^. Please enter the commit message/..m/^#$/)' "$COMMIT_MSG_FILE" + +# case "$COMMIT_SOURCE,$SHA1" in +# ,|template,) +# /usr/bin/perl -i.bak -pe ' +# print "\n" . `git diff --cached --name-status -r` +# if /^#/ && $first++ == 0' "$COMMIT_MSG_FILE" ;; +# *) ;; +# esac + +# SOB=$(git var GIT_COMMITTER_IDENT | sed -n 's/^\(.*>\).*$/Signed-off-by: \1/p') +# git interpret-trailers --in-place --trailer "$SOB" "$COMMIT_MSG_FILE" +# if test -z "$COMMIT_SOURCE" +# then +# /usr/bin/perl -i.bak -pe 'print "\n" if !$first_line++' "$COMMIT_MSG_FILE" +# fi diff -Nru synthv1-0.8.6/.git/hooks/pre-push.sample synthv1-0.9.10+git20190929/.git/hooks/pre-push.sample --- synthv1-0.8.6/.git/hooks/pre-push.sample 1970-01-01 00:00:00.000000000 +0000 +++ synthv1-0.9.10+git20190929/.git/hooks/pre-push.sample 2019-09-28 23:00:02.000000000 +0000 @@ -0,0 +1,53 @@ +#!/bin/sh + +# An example hook script to verify what is about to be pushed. Called by "git +# push" after it has checked the remote status, but before anything has been +# pushed. If this script exits with a non-zero status nothing will be pushed. +# +# This hook is called with the following parameters: +# +# $1 -- Name of the remote to which the push is being done +# $2 -- URL to which the push is being done +# +# If pushing without using a named remote those arguments will be equal. +# +# Information about the commits which are being pushed is supplied as lines to +# the standard input in the form: +# +# +# +# This sample shows how to prevent push of commits where the log message starts +# with "WIP" (work in progress). + +remote="$1" +url="$2" + +z40=0000000000000000000000000000000000000000 + +while read local_ref local_sha remote_ref remote_sha +do + if [ "$local_sha" = $z40 ] + then + # Handle delete + : + else + if [ "$remote_sha" = $z40 ] + then + # New branch, examine all commits + range="$local_sha" + else + # Update to existing branch, examine new commits + range="$remote_sha..$local_sha" + fi + + # Check for WIP commit + commit=`git rev-list -n 1 --grep '^WIP' "$range"` + if [ -n "$commit" ] + then + echo >&2 "Found WIP commit in $local_ref, not pushing" + exit 1 + fi + fi +done + +exit 0 diff -Nru synthv1-0.8.6/.git/hooks/pre-rebase.sample synthv1-0.9.10+git20190929/.git/hooks/pre-rebase.sample --- synthv1-0.8.6/.git/hooks/pre-rebase.sample 1970-01-01 00:00:00.000000000 +0000 +++ synthv1-0.9.10+git20190929/.git/hooks/pre-rebase.sample 2019-09-28 23:00:02.000000000 +0000 @@ -0,0 +1,169 @@ +#!/bin/sh +# +# Copyright (c) 2006, 2008 Junio C Hamano +# +# The "pre-rebase" hook is run just before "git rebase" starts doing +# its job, and can prevent the command from running by exiting with +# non-zero status. +# +# The hook is called with the following parameters: +# +# $1 -- the upstream the series was forked from. +# $2 -- the branch being rebased (or empty when rebasing the current branch). +# +# This sample shows how to prevent topic branches that are already +# merged to 'next' branch from getting rebased, because allowing it +# would result in rebasing already published history. + +publish=next +basebranch="$1" +if test "$#" = 2 +then + topic="refs/heads/$2" +else + topic=`git symbolic-ref HEAD` || + exit 0 ;# we do not interrupt rebasing detached HEAD +fi + +case "$topic" in +refs/heads/??/*) + ;; +*) + exit 0 ;# we do not interrupt others. + ;; +esac + +# Now we are dealing with a topic branch being rebased +# on top of master. Is it OK to rebase it? + +# Does the topic really exist? +git show-ref -q "$topic" || { + echo >&2 "No such branch $topic" + exit 1 +} + +# Is topic fully merged to master? +not_in_master=`git rev-list --pretty=oneline ^master "$topic"` +if test -z "$not_in_master" +then + echo >&2 "$topic is fully merged to master; better remove it." + exit 1 ;# we could allow it, but there is no point. +fi + +# Is topic ever merged to next? If so you should not be rebasing it. +only_next_1=`git rev-list ^master "^$topic" ${publish} | sort` +only_next_2=`git rev-list ^master ${publish} | sort` +if test "$only_next_1" = "$only_next_2" +then + not_in_topic=`git rev-list "^$topic" master` + if test -z "$not_in_topic" + then + echo >&2 "$topic is already up to date with master" + exit 1 ;# we could allow it, but there is no point. + else + exit 0 + fi +else + not_in_next=`git rev-list --pretty=oneline ^${publish} "$topic"` + /usr/bin/perl -e ' + my $topic = $ARGV[0]; + my $msg = "* $topic has commits already merged to public branch:\n"; + my (%not_in_next) = map { + /^([0-9a-f]+) /; + ($1 => 1); + } split(/\n/, $ARGV[1]); + for my $elem (map { + /^([0-9a-f]+) (.*)$/; + [$1 => $2]; + } split(/\n/, $ARGV[2])) { + if (!exists $not_in_next{$elem->[0]}) { + if ($msg) { + print STDERR $msg; + undef $msg; + } + print STDERR " $elem->[1]\n"; + } + } + ' "$topic" "$not_in_next" "$not_in_master" + exit 1 +fi + +<<\DOC_END + +This sample hook safeguards topic branches that have been +published from being rewound. + +The workflow assumed here is: + + * Once a topic branch forks from "master", "master" is never + merged into it again (either directly or indirectly). + + * Once a topic branch is fully cooked and merged into "master", + it is deleted. If you need to build on top of it to correct + earlier mistakes, a new topic branch is created by forking at + the tip of the "master". This is not strictly necessary, but + it makes it easier to keep your history simple. + + * Whenever you need to test or publish your changes to topic + branches, merge them into "next" branch. + +The script, being an example, hardcodes the publish branch name +to be "next", but it is trivial to make it configurable via +$GIT_DIR/config mechanism. + +With this workflow, you would want to know: + +(1) ... if a topic branch has ever been merged to "next". Young + topic branches can have stupid mistakes you would rather + clean up before publishing, and things that have not been + merged into other branches can be easily rebased without + affecting other people. But once it is published, you would + not want to rewind it. + +(2) ... if a topic branch has been fully merged to "master". + Then you can delete it. More importantly, you should not + build on top of it -- other people may already want to + change things related to the topic as patches against your + "master", so if you need further changes, it is better to + fork the topic (perhaps with the same name) afresh from the + tip of "master". + +Let's look at this example: + + o---o---o---o---o---o---o---o---o---o "next" + / / / / + / a---a---b A / / + / / / / + / / c---c---c---c B / + / / / \ / + / / / b---b C \ / + / / / / \ / + ---o---o---o---o---o---o---o---o---o---o---o "master" + + +A, B and C are topic branches. + + * A has one fix since it was merged up to "next". + + * B has finished. It has been fully merged up to "master" and "next", + and is ready to be deleted. + + * C has not merged to "next" at all. + +We would want to allow C to be rebased, refuse A, and encourage +B to be deleted. + +To compute (1): + + git rev-list ^master ^topic next + git rev-list ^master next + + if these match, topic has not merged in next at all. + +To compute (2): + + git rev-list master..topic + + if this is empty, it is fully merged to "master". + +DOC_END diff -Nru synthv1-0.8.6/.git/hooks/pre-receive.sample synthv1-0.9.10+git20190929/.git/hooks/pre-receive.sample --- synthv1-0.8.6/.git/hooks/pre-receive.sample 1970-01-01 00:00:00.000000000 +0000 +++ synthv1-0.9.10+git20190929/.git/hooks/pre-receive.sample 2019-09-28 23:00:02.000000000 +0000 @@ -0,0 +1,24 @@ +#!/bin/sh +# +# An example hook script to make use of push options. +# The example simply echoes all push options that start with 'echoback=' +# and rejects all pushes when the "reject" push option is used. +# +# To enable this hook, rename this file to "pre-receive". + +if test -n "$GIT_PUSH_OPTION_COUNT" +then + i=0 + while test "$i" -lt "$GIT_PUSH_OPTION_COUNT" + do + eval "value=\$GIT_PUSH_OPTION_$i" + case "$value" in + echoback=*) + echo "echo from the pre-receive-hook: ${value#*=}" >&2 + ;; + reject) + exit 1 + esac + i=$((i + 1)) + done +fi diff -Nru synthv1-0.8.6/.git/hooks/update.sample synthv1-0.9.10+git20190929/.git/hooks/update.sample --- synthv1-0.8.6/.git/hooks/update.sample 1970-01-01 00:00:00.000000000 +0000 +++ synthv1-0.9.10+git20190929/.git/hooks/update.sample 2019-09-28 23:00:02.000000000 +0000 @@ -0,0 +1,128 @@ +#!/bin/sh +# +# An example hook script to block unannotated tags from entering. +# Called by "git receive-pack" with arguments: refname sha1-old sha1-new +# +# To enable this hook, rename this file to "update". +# +# Config +# ------ +# hooks.allowunannotated +# This boolean sets whether unannotated tags will be allowed into the +# repository. By default they won't be. +# hooks.allowdeletetag +# This boolean sets whether deleting tags will be allowed in the +# repository. By default they won't be. +# hooks.allowmodifytag +# This boolean sets whether a tag may be modified after creation. By default +# it won't be. +# hooks.allowdeletebranch +# This boolean sets whether deleting branches will be allowed in the +# repository. By default they won't be. +# hooks.denycreatebranch +# This boolean sets whether remotely creating branches will be denied +# in the repository. By default this is allowed. +# + +# --- Command line +refname="$1" +oldrev="$2" +newrev="$3" + +# --- Safety check +if [ -z "$GIT_DIR" ]; then + echo "Don't run this script from the command line." >&2 + echo " (if you want, you could supply GIT_DIR then run" >&2 + echo " $0 )" >&2 + exit 1 +fi + +if [ -z "$refname" -o -z "$oldrev" -o -z "$newrev" ]; then + echo "usage: $0 " >&2 + exit 1 +fi + +# --- Config +allowunannotated=$(git config --bool hooks.allowunannotated) +allowdeletebranch=$(git config --bool hooks.allowdeletebranch) +denycreatebranch=$(git config --bool hooks.denycreatebranch) +allowdeletetag=$(git config --bool hooks.allowdeletetag) +allowmodifytag=$(git config --bool hooks.allowmodifytag) + +# check for no description +projectdesc=$(sed -e '1q' "$GIT_DIR/description") +case "$projectdesc" in +"Unnamed repository"* | "") + echo "*** Project description file hasn't been set" >&2 + exit 1 + ;; +esac + +# --- Check types +# if $newrev is 0000...0000, it's a commit to delete a ref. +zero="0000000000000000000000000000000000000000" +if [ "$newrev" = "$zero" ]; then + newrev_type=delete +else + newrev_type=$(git cat-file -t $newrev) +fi + +case "$refname","$newrev_type" in + refs/tags/*,commit) + # un-annotated tag + short_refname=${refname##refs/tags/} + if [ "$allowunannotated" != "true" ]; then + echo "*** The un-annotated tag, $short_refname, is not allowed in this repository" >&2 + echo "*** Use 'git tag [ -a | -s ]' for tags you want to propagate." >&2 + exit 1 + fi + ;; + refs/tags/*,delete) + # delete tag + if [ "$allowdeletetag" != "true" ]; then + echo "*** Deleting a tag is not allowed in this repository" >&2 + exit 1 + fi + ;; + refs/tags/*,tag) + # annotated tag + if [ "$allowmodifytag" != "true" ] && git rev-parse $refname > /dev/null 2>&1 + then + echo "*** Tag '$refname' already exists." >&2 + echo "*** Modifying a tag is not allowed in this repository." >&2 + exit 1 + fi + ;; + refs/heads/*,commit) + # branch + if [ "$oldrev" = "$zero" -a "$denycreatebranch" = "true" ]; then + echo "*** Creating a branch is not allowed in this repository" >&2 + exit 1 + fi + ;; + refs/heads/*,delete) + # delete branch + if [ "$allowdeletebranch" != "true" ]; then + echo "*** Deleting a branch is not allowed in this repository" >&2 + exit 1 + fi + ;; + refs/remotes/*,commit) + # tracking branch + ;; + refs/remotes/*,delete) + # delete tracking branch + if [ "$allowdeletebranch" != "true" ]; then + echo "*** Deleting a tracking branch is not allowed in this repository" >&2 + exit 1 + fi + ;; + *) + # Anything else (is there anything else?) + echo "*** Update hook: unknown type of update to ref $refname of type $newrev_type" >&2 + exit 1 + ;; +esac + +# --- Finished +exit 0 Binary files /tmp/tmpgGvAob/JVd7Fr9e4v/synthv1-0.8.6/.git/index and /tmp/tmpgGvAob/CoIHCznz69/synthv1-0.9.10+git20190929/.git/index differ diff -Nru synthv1-0.8.6/.git/info/exclude synthv1-0.9.10+git20190929/.git/info/exclude --- synthv1-0.8.6/.git/info/exclude 1970-01-01 00:00:00.000000000 +0000 +++ synthv1-0.9.10+git20190929/.git/info/exclude 2019-09-28 23:00:02.000000000 +0000 @@ -0,0 +1,6 @@ +# git ls-files --others --exclude-from=.git/info/exclude +# Lines that start with '#' are comments. +# For a project mostly in C, the following would be a good set of +# exclude patterns (uncomment them if you want to use them): +# *.[oa] +# *~ diff -Nru synthv1-0.8.6/.git/logs/HEAD synthv1-0.9.10+git20190929/.git/logs/HEAD --- synthv1-0.8.6/.git/logs/HEAD 1970-01-01 00:00:00.000000000 +0000 +++ synthv1-0.9.10+git20190929/.git/logs/HEAD 2019-09-28 23:05:55.000000000 +0000 @@ -0,0 +1,2 @@ +0000000000000000000000000000000000000000 ae181a73118275c8daa19aa3ca608dd1c0523901 falkTX 1569711643 +0100 clone: from https://git.code.sf.net/p/synthv1/code +ae181a73118275c8daa19aa3ca608dd1c0523901 ae64b77d7af7401fa74ef5d794c157c647fcb6ed falkTX 1569711955 +0100 checkout: moving from master to xstatic diff -Nru synthv1-0.8.6/.git/logs/refs/heads/master synthv1-0.9.10+git20190929/.git/logs/refs/heads/master --- synthv1-0.8.6/.git/logs/refs/heads/master 1970-01-01 00:00:00.000000000 +0000 +++ synthv1-0.9.10+git20190929/.git/logs/refs/heads/master 2019-09-28 23:00:43.000000000 +0000 @@ -0,0 +1 @@ +0000000000000000000000000000000000000000 ae181a73118275c8daa19aa3ca608dd1c0523901 falkTX 1569711643 +0100 clone: from https://git.code.sf.net/p/synthv1/code diff -Nru synthv1-0.8.6/.git/logs/refs/heads/xstatic synthv1-0.9.10+git20190929/.git/logs/refs/heads/xstatic --- synthv1-0.8.6/.git/logs/refs/heads/xstatic 1970-01-01 00:00:00.000000000 +0000 +++ synthv1-0.9.10+git20190929/.git/logs/refs/heads/xstatic 2019-09-28 23:05:55.000000000 +0000 @@ -0,0 +1 @@ +0000000000000000000000000000000000000000 ae64b77d7af7401fa74ef5d794c157c647fcb6ed falkTX 1569711955 +0100 branch: Created from refs/remotes/origin/xstatic diff -Nru synthv1-0.8.6/.git/logs/refs/remotes/origin/HEAD synthv1-0.9.10+git20190929/.git/logs/refs/remotes/origin/HEAD --- synthv1-0.8.6/.git/logs/refs/remotes/origin/HEAD 1970-01-01 00:00:00.000000000 +0000 +++ synthv1-0.9.10+git20190929/.git/logs/refs/remotes/origin/HEAD 2019-09-28 23:00:43.000000000 +0000 @@ -0,0 +1 @@ +0000000000000000000000000000000000000000 ae181a73118275c8daa19aa3ca608dd1c0523901 falkTX 1569711643 +0100 clone: from https://git.code.sf.net/p/synthv1/code Binary files /tmp/tmpgGvAob/JVd7Fr9e4v/synthv1-0.8.6/.git/objects/pack/pack-d0e1486dae495d11006e9d9f0a3e7537a47fd013.idx and /tmp/tmpgGvAob/CoIHCznz69/synthv1-0.9.10+git20190929/.git/objects/pack/pack-d0e1486dae495d11006e9d9f0a3e7537a47fd013.idx differ Binary files /tmp/tmpgGvAob/JVd7Fr9e4v/synthv1-0.8.6/.git/objects/pack/pack-d0e1486dae495d11006e9d9f0a3e7537a47fd013.pack and /tmp/tmpgGvAob/CoIHCznz69/synthv1-0.9.10+git20190929/.git/objects/pack/pack-d0e1486dae495d11006e9d9f0a3e7537a47fd013.pack differ diff -Nru synthv1-0.8.6/.git/packed-refs synthv1-0.9.10+git20190929/.git/packed-refs --- synthv1-0.8.6/.git/packed-refs 1970-01-01 00:00:00.000000000 +0000 +++ synthv1-0.9.10+git20190929/.git/packed-refs 2019-09-28 23:00:43.000000000 +0000 @@ -0,0 +1,76 @@ +# pack-refs with: peeled fully-peeled sorted +ae181a73118275c8daa19aa3ca608dd1c0523901 refs/remotes/origin/master +ae64b77d7af7401fa74ef5d794c157c647fcb6ed refs/remotes/origin/xstatic +fa8c52323ae4dfbf43a901087629040a8e4205f1 refs/tags/synthv1_0_1_0 +ff9e4d51ccadf8415fe70e9553458bbc13a9b201 refs/tags/synthv1_0_1_1 +83e77f86dbbfd3949171a09320e1c269f1b86666 refs/tags/synthv1_0_2_0 +fa949d7d15ad0dadcf8bd9212e11fad2ff03eb46 refs/tags/synthv1_0_3_0 +d84837e4f167e3c50c2f25b8f3534474377bdde4 refs/tags/synthv1_0_3_1 +5f1d695f0a85d3f9fecc780e517d233f23ca8bbb refs/tags/synthv1_0_3_2 +3b3273be7dffabd6ff50f752d2d5b10918c6d21c refs/tags/synthv1_0_3_3 +95826a692da5c4bf84cb82ac8f954d35834c2009 refs/tags/synthv1_0_3_4 +7cb27aa958398fb51f458f8df327066ae6bca43b refs/tags/synthv1_0_3_5 +205bad264f815e71481d5e6f456b9af819946c60 refs/tags/synthv1_0_3_6 +90627820c065af2d708f5fdebe8c17a46ec4980b refs/tags/synthv1_0_4_0 +27accd966bd48a9a2f490c4d72a8f5a80c47c431 refs/tags/synthv1_0_4_1 +fce2c91647875acd3eb41c3ff774dd8d1e58aed0 refs/tags/synthv1_0_4_2 +6a71202210e210cbb92475fa268d3b411b86450f refs/tags/synthv1_0_5_0 +6ddc63e7c39f8675816567d39f33178cb30fe78e refs/tags/synthv1_0_5_1 +6681770760671d2dd7361def5d01ee28f115672e refs/tags/synthv1_0_6_0 +^7294eb3c916c1a4cb10615ef4ab313dd1c4b55a7 +353fc4fa151f1da8f32bce81c6831de073e39457 refs/tags/synthv1_0_6_1 +^c0f01aa941b21d056b166700ff3c52e8cee37f5a +b13aec25d937dcccb827fefeb11f93ccc4260d71 refs/tags/synthv1_0_6_2 +^83e86a4edd5b888230ea729d956633e3f88cd663 +a53150a8b2cf4c64a249bf57befb421d97e8d928 refs/tags/synthv1_0_6_3 +^2c7249bc2a01b0986c47208fcc48f2e7a14b0337 +7bec15840983e1516a939a293cccecbe29abef97 refs/tags/synthv1_0_7_0 +^22fff36e62dff7d0dfb211dd3c332471d9972eff +d46f8d59a187e55b08d9a5fbf9d8d580ec0de2ee refs/tags/synthv1_0_7_1 +^9d2f3e344189e33d8b802fc3cb70ef778e945bca +ff77dc9d8619affb4e52f15dfdc2ba7d425dc004 refs/tags/synthv1_0_7_2 +^f70b7aa68529e4a548c46adce7f92158675ffcde +3fcdd850e266eeccde7fb3d4fe488145abf7b2fd refs/tags/synthv1_0_7_3 +^cc1792806b364ab2c06a4b7b25ccff29bc2df551 +2a91be91397a41615af280361a056d41ce64e138 refs/tags/synthv1_0_7_4 +^f1031518db03f02b613790d5db9bcbc9341c4ec8 +12909558efac11b7b493ce854a6f6d64f3d5dff8 refs/tags/synthv1_0_7_5 +^5eb7fdc766b781d5210c3fa503fad465733b47d1 +ddd74b60f88ec774de812e1ca55e5f26be96dcfd refs/tags/synthv1_0_7_6 +^c8ddcf3486f8ab92a07979f4aaa47bb81ae5bf32 +557d3205baf4e0f716922f8a6269846eed5fb000 refs/tags/synthv1_0_8_0 +^192e94633fbf843011cfe3000a6e2d32d8aa4ff8 +86bcab795d0e6546da09defbbfff7422c126f743 refs/tags/synthv1_0_8_1 +^dfc154bb31cbc7912ff449434d7d40dff2a3a0dd +4334ba3d755c7942c99f79ee6de1889024ff2503 refs/tags/synthv1_0_8_2 +^ef9559fa09a8ac2977e00581fb52b87abc9c4896 +3c3c83ca1e64c94b4384782f8edbe445dab3fc92 refs/tags/synthv1_0_8_3 +^3b032402053f64761c16d6a1e9145a0cb2503e1e +fafe8590585618277693ffd645fe2bf1d29b5119 refs/tags/synthv1_0_8_4 +^636a79085f39d5a1db149a6d7ce9a3c5486e126b +c916b4f61750da9e41e507e494f78d373ec3ea60 refs/tags/synthv1_0_8_5 +^4e8c077715108771afa45eebf98e6ad7fb7da2f3 +0441f12447ea6b3ff04e55053f5962d9bdea97f2 refs/tags/synthv1_0_8_6 +^fd44cfede897951f4be062fc1a5830a930a366e4 +4aed6e70a85b30ba33db4aecdbfe90f34ce5e324 refs/tags/synthv1_0_9_0 +^b1cab34df1b7b1aac83baac59f2e411bece4bf7c +4542d9d54df26feee12197df0fa97cf33e4e5bde refs/tags/synthv1_0_9_1 +^e0e2bd88dabfe2e935306c61c5c2c8f8d1457eb4 +bb82b53135230e7247adf1d26f6eaa1559b27b2c refs/tags/synthv1_0_9_10 +^ae181a73118275c8daa19aa3ca608dd1c0523901 +c0cc5c9f8605629cb9b27c28d5d13fc883060a83 refs/tags/synthv1_0_9_2 +^ec419d9469ad3a5245dd1e76f07eb0805d7efe6e +3a9461cf97cd9ba19b8d0b9c105f7ed074cd9f62 refs/tags/synthv1_0_9_3 +^eb28c679e0f77337229ae88225310fae6657bf0a +067cfcf21c0e0bb1f6cfe7d21a584db18dda8756 refs/tags/synthv1_0_9_4 +^1aa5b47c51cc90228d2b6b1286e80a688a84270f +f6540c00756989e2e671bfdc9bebc21c995affba refs/tags/synthv1_0_9_5 +^2847e4fde9bd524b6bd31590b7a7167b1c7f8088 +822a74a69493e929a60b5af65c60e60b84fc0941 refs/tags/synthv1_0_9_6 +^88952e0c0b9f182de9ba1a66787b1325b1618770 +4c58827014c6dd2dd80c8413f325320d0379cd82 refs/tags/synthv1_0_9_7 +^4c8cd2fa150ae26043f234e941df9f735f8ba802 +0c9beab7b34e2e47269d6d1df1874eca621269eb refs/tags/synthv1_0_9_8 +^d5f318980b5676f3a348b138ad71bacdfef3bf83 +8694c9983947a0a1e76d261fe4172cdd3496f0f4 refs/tags/synthv1_0_9_9 +^dfb71ad9f5d591a9c5048a52d1764f849859c2e7 diff -Nru synthv1-0.8.6/.git/refs/heads/master synthv1-0.9.10+git20190929/.git/refs/heads/master --- synthv1-0.8.6/.git/refs/heads/master 1970-01-01 00:00:00.000000000 +0000 +++ synthv1-0.9.10+git20190929/.git/refs/heads/master 2019-09-28 23:00:43.000000000 +0000 @@ -0,0 +1 @@ +ae181a73118275c8daa19aa3ca608dd1c0523901 diff -Nru synthv1-0.8.6/.git/refs/heads/xstatic synthv1-0.9.10+git20190929/.git/refs/heads/xstatic --- synthv1-0.8.6/.git/refs/heads/xstatic 1970-01-01 00:00:00.000000000 +0000 +++ synthv1-0.9.10+git20190929/.git/refs/heads/xstatic 2019-09-28 23:05:55.000000000 +0000 @@ -0,0 +1 @@ +ae64b77d7af7401fa74ef5d794c157c647fcb6ed diff -Nru synthv1-0.8.6/.git/refs/remotes/origin/HEAD synthv1-0.9.10+git20190929/.git/refs/remotes/origin/HEAD --- synthv1-0.8.6/.git/refs/remotes/origin/HEAD 1970-01-01 00:00:00.000000000 +0000 +++ synthv1-0.9.10+git20190929/.git/refs/remotes/origin/HEAD 2019-09-28 23:00:43.000000000 +0000 @@ -0,0 +1 @@ +ref: refs/remotes/origin/master diff -Nru synthv1-0.8.6/.gitignore synthv1-0.9.10+git20190929/.gitignore --- synthv1-0.8.6/.gitignore 1970-01-01 00:00:00.000000000 +0000 +++ synthv1-0.9.10+git20190929/.gitignore 2019-09-28 23:00:43.000000000 +0000 @@ -0,0 +1,20 @@ +Makefile +Makefile.src_* +config.* +configure +*.m4 +*.mak +*.spec +*.desktop +*.pri +*.qm +*.o +*.so +*.pro.user +*.qmake.stash +qrc_*.cpp +.moc_* +.obj_* +.ui_* +synthv1_ui.ttl +synthv1_jack diff -Nru synthv1-0.8.6/Makefile.git synthv1-0.9.10+git20190929/Makefile.git --- synthv1-0.8.6/Makefile.git 2017-12-20 07:56:50.302842973 +0000 +++ synthv1-0.9.10+git20190929/Makefile.git 2019-09-28 23:05:55.000000000 +0000 @@ -7,10 +7,11 @@ @rm -rf *.cache clean: - @if [ -f Makefile ]; then make clean; fi + @if [ -f Makefile ]; then make clean; fi || true @rm -rvf Makefile configure config.* @rm -rvf src/.ui_* src/.obj_* src/.moc_* @rm -rvf src/config.* src/*.pri src/lib*.so* + @rm -rvf src/lib*.a src/*_plugin_import.cpp @rm -rvf src/Makefile src/Makefile.src_* src/*.mak src/*.mak.* @rm -rvf *.cache *.log *.status *.spec *.mak *.m4 .m4 @rm -rvf .qmake.stash src/.qmake.stash diff -Nru synthv1-0.8.6/Makefile.in synthv1-0.9.10+git20190929/Makefile.in --- synthv1-0.8.6/Makefile.in 2017-12-20 07:56:50.302842973 +0000 +++ synthv1-0.9.10+git20190929/Makefile.in 2019-09-28 23:00:43.000000000 +0000 @@ -20,6 +20,7 @@ src/$(name)_config.h \ src/$(name)_param.h \ src/$(name)_sched.h \ + src/$(name)_tuning.h \ src/$(name)_programs.h \ src/$(name)_controls.h @@ -30,32 +31,37 @@ src/$(name)_wave.cpp \ src/$(name)_param.cpp \ src/$(name)_sched.cpp \ + src/$(name)_tuning.cpp \ src/$(name)_programs.cpp \ src/$(name)_controls.cpp headers_ui = \ + src/$(name_ui).h \ src/$(name)widget.h \ src/$(name)widget_env.h \ src/$(name)widget_filt.h \ + src/$(name)widget_wave.h \ src/$(name)widget_param.h \ src/$(name)widget_preset.h \ src/$(name)widget_status.h \ - src/$(name)widget_config.h \ src/$(name)widget_programs.h \ src/$(name)widget_controls.h \ - src/$(name)widget_control.h + src/$(name)widget_control.h \ + src/$(name)widget_config.h sources_ui = \ + src/$(name_ui).cpp \ src/$(name)widget.cpp \ src/$(name)widget_env.cpp \ src/$(name)widget_filt.cpp \ + src/$(name)widget_wave.cpp \ src/$(name)widget_param.cpp \ src/$(name)widget_preset.cpp \ src/$(name)widget_status.cpp \ - src/$(name)widget_config.cpp \ src/$(name)widget_programs.cpp \ src/$(name)widget_controls.cpp \ - src/$(name)widget_control.cpp + src/$(name)widget_control.cpp \ + src/$(name)widget_config.cpp forms = \ src/$(name)widget.ui \ @@ -164,19 +170,19 @@ clean_core: $(name).mak - @$(MAKE) -f $(name).mak distclean + @$(MAKE) -f $(name).mak distclean || true @rm -f $(name).mak clean_ui: $(name_ui).mak - @$(MAKE) -f $(name_ui).mak distclean + @$(MAKE) -f $(name_ui).mak distclean || true @rm -f $(name_ui).mak clean_lv2: $(name_lv2).mak - @$(MAKE) -f $(name_lv2).mak distclean + @$(MAKE) -f $(name_lv2).mak distclean || true @rm -f $(name_lv2).mak clean_jack: $(name_jack).mak - @$(MAKE) -f $(name_jack).mak distclean + @$(MAKE) -f $(name_jack).mak distclean || true @rm -f $(name_jack).mak diff -Nru synthv1-0.8.6/README synthv1-0.9.10+git20190929/README --- synthv1-0.8.6/README 2017-12-20 07:56:50.302842973 +0000 +++ synthv1-0.9.10+git20190929/README 2019-09-28 23:00:43.000000000 +0000 @@ -90,3 +90,4 @@ -- rncbc aka. Rui Nuno Capela rncbc@rncbc.org +http://www.rncbc.org diff -Nru synthv1-0.8.6/README.cmake synthv1-0.9.10+git20190929/README.cmake --- synthv1-0.8.6/README.cmake 1970-01-01 00:00:00.000000000 +0000 +++ synthv1-0.9.10+git20190929/README.cmake 2019-09-28 23:00:43.000000000 +0000 @@ -0,0 +1,77 @@ +What is CMake? +============== + +CMake is a cross platform build system, that can be used to replace the old +auto-tools, providing a nice building environment and advanced features. + +Some of these features are: +* Out of sources build: CMake allows you to build your software into a directory + different to the source tree. You can safely delete the build directory and + all its contents once you are done. +* Multiple generators: classic makefiles can be generated for Unix and MinGW, + but also Visual Studio, XCode and Eclipse CDT projects among other types. +* Graphic front-ends for configuration and build options. + +More information and documentation is available at the CMake project site: + http://www.cmake.org + +CMake is free software. You can get the sources and pre-compiled packages for +Linux and other systems at: + http://www.cmake.org/cmake/resources/software.html + +How to use it? +============== + +1. You need CMake 3.1 or newer to build synthv1 + +2. Unpack the synthv1 sources somewhere, or checkout the repository, + and create a build directory. For instance, using a command line shell: + +$ tar -xvzf Downloads/synthv1-x.y.z.tar.gz +$ cd synthv1-x.y.z +$ mkdir build + +2. Execute CMake from the build directory, providing the source directory + location and optionally, the build options. There are several ways. + +* From a command line shell: + +$ pwd +synthv1-x.y.z +$ cd build +$ cmake -DCMAKE_BUILD_TYPE=debug .. + +3. Execute the build command. If you used the Makefiles generator (the default + in Linux and other Unix systems) then execute make, gmake, or mingw32-make. + If you generated a project file, use your IDE to build it. + +Compiling with make +=================== + +There are many targets available. To see a complete list of them, type: + +$ make help + +The build process usually hides the compiler command lines, to show them: + +$ make VERBOSE=1 + +There is a "clean" target, but not a "distclean" one. You should use a build +directory different to the source tree. In this case, the "distclean" target +would be equivalent to simply removing the build directory. + +If something fails +================== + +If there is an error message while executing CMake, this probably means that a +required package is missing in your system. You should install the missing +component and run CMake again. + +If there is an error executing the build process, after running a flawless CMake +configuration process, this means that there may be an error in the source code, +or in the build system, or something incompatible in 3rd party libraries. + +The CMake build system for synthv1 is experimental. It will take a while +until it becomes stable and fully tested. You can help providing feedback, +please send a report containing your problems to the synthv1 development +mailing list, https://lists.sourceforge.net/mailman/listinfo/synthv1-devel diff -Nru synthv1-0.8.6/src/appdata/synthv1.appdata.xml synthv1-0.9.10+git20190929/src/appdata/synthv1.appdata.xml --- synthv1-0.8.6/src/appdata/synthv1.appdata.xml 2017-12-20 07:56:50.303842973 +0000 +++ synthv1-0.9.10+git20190929/src/appdata/synthv1.appdata.xml 2019-09-28 23:00:43.000000000 +0000 @@ -1,8 +1,8 @@ - + - synthv1.desktop - GPL-2.0+ + org.rncbc.synthv1 + FSFAP GPL-2.0+ synthv1 an old-school polyphonic synthesizer @@ -13,12 +13,16 @@
  • pure stand-alone JACK client with JACK-session, NSM and both JACK MIDI and ALSA MIDI input support;
  • LV2 instrument plugin. - URI: http://synthv1.sourceforge.net/lv2
  • + URI: http\://synthv1.sourceforge.net/lv2

    + synthv1.desktop + +​ synthv1_jack +​ - http://synthv1.sourceforge.net/image/synthv1-screenshot4.png + http://synthv1.sourceforge.net/image/synthv1-screenshot8.png The main window showing the application in action @@ -31,11 +35,8 @@ LV2 Qt - http://synthv1.sourceforge.net - rncbc@rncbc.org + https://synthv1.sourceforge.io rncbc.org - - HiDpiIcon - ModernToolkit - + rncbc aka. Rui Nuno Capela + rncbc@rncbc.org
    diff -Nru synthv1-0.8.6/src/cmake_config.h.in synthv1-0.9.10+git20190929/src/cmake_config.h.in --- synthv1-0.8.6/src/cmake_config.h.in 1970-01-01 00:00:00.000000000 +0000 +++ synthv1-0.9.10+git20190929/src/cmake_config.h.in 2019-09-28 23:00:43.000000000 +0000 @@ -0,0 +1,90 @@ +#ifndef CONFIG_H +#define CONFIG_H + +/* Define to the full name of this package. */ +#cmakedefine PACKAGE_NAME "@PACKAGE_NAME@" + +/* Define to the full name and version of this package. */ +#cmakedefine PACKAGE_STRING "@PACKAGE_STRING@" + +/* Define to the version of this package. */ +#cmakedefine PACKAGE_VERSION "@PACKAGE_VERSION@" + +/* Define to the address where bug reports for this package should be sent. */ +#cmakedefine PACKAGE_BUGREPORT "@PACKAGE_BUGREPORT@" + +/* Define to the one symbol short name of this package. */ +#cmakedefine PACKAGE_TARNAME "@PACKAGE_TARNAME@" + +/* Define to the version of this package. */ +#cmakedefine CONFIG_VERSION "@CONFIG_VERSION@" + +/* Define to the build version of this package. */ +#cmakedefine CONFIG_BUILD_VERSION "@CONFIG_BUILD_VERSION@" + +/* Default installation prefix. */ +#cmakedefine CONFIG_PREFIX "@CONFIG_PREFIX@" + +/* Define to target installation dirs. */ +#cmakedefine CONFIG_BINDIR "@CONFIG_BINDIR@" +#cmakedefine CONFIG_LIBDIR "@CONFIG_LIBDIR@" +#cmakedefine CONFIG_DATADIR "@CONFIG_DATADIR@" +#cmakedefine CONFIG_MANDIR "@CONFIG_MANDIR@" + +/* Define if debugging is enabled. */ +#cmakedefine CONFIG_DEBUG @CONFIG_DEBUG@ + +/* Define to 1 if you have the header file. */ +#cmakedefine HAVE_SIGNAL_H @HAVE_SIGNAL_H@ + +/* Define if JACK library is available. */ +#cmakedefine CONFIG_JACK @CONFIG_JACK@ + +/* Define if ALSA MIDI support is enabled. */ +#cmakedefine CONFIG_ALSA_MIDI @CONFIG_ALSA_MIDI@ + +/* Define if LIBLO library is available. */ +#cmakedefine CONFIG_LIBLO @CONFIG_LIBLO@ + +/* Define if JACK session support is available. */ +#cmakedefine CONFIG_JACK_SESSION @CONFIG_JACK_SESSION@ + +/* Define if JACK MIDI support is enabled. */ +#cmakedefine CONFIG_JACK_MIDI @CONFIG_JACK_MIDI@ + +/* Define if LV2 plug-in build is enabled. */ +#cmakedefine CONFIG_LV2 @CONFIG_LV2@ + +/* Define if lv2_atom_forge_object is available. */ +#cmakedefine CONFIG_LV2_ATOM_FORGE_OBJECT @CONFIG_LV2_ATOM_FORGE_OBJECT@ + +/* Define if lv2_atom_forge_key is available. */ +#cmakedefine CONFIG_LV2_ATOM_FORGE_KEY @CONFIG_LV2_ATOM_FORGE_KEY@ + +/* Define if LV2 X11 UI support is available. */ +#cmakedefine CONFIG_LV2_UI_X11 @CONFIG_LV2_UI_X11@ + +/* Define if LV2 External UI extension is available. */ +#cmakedefine CONFIG_LV2_UI_EXTERNAL @CONFIG_LV2_UI_EXTERNAL@ + +/* Define if LV2 UI Idle interface support is available. */ +#cmakedefine CONFIG_LV2_UI_IDLE @CONFIG_LV2_UI_IDLE@ + +/* Define if LV2 UI Show interface support is available. */ +#cmakedefine CONFIG_LV2_UI_SHOW @CONFIG_LV2_UI_SHOW@ + +/* Define if LV2 UI Resize interface support is available. */ +#cmakedefine CONFIG_LV2_UI_RESIZE @CONFIG_LV2_UI_RESIZE@ + +/* Define if LV2 Programs extension is available. */ +#cmakedefine CONFIG_LV2_PROGRAMS @CONFIG_LV2_PROGRAMS@ + +/* Define if LV2 Patch is supported. */ +#cmakedefine CONFIG_LV2_PATCH @CONFIG_LV2_PATCH@ + +/* Define if NSM support is available. */ +#cmakedefine CONFIG_NSM @CONFIG_NSM@ + + + +#endif /* CONFIG_H */ diff -Nru synthv1-0.8.6/src/CMakeLists.txt synthv1-0.9.10+git20190929/src/CMakeLists.txt --- synthv1-0.8.6/src/CMakeLists.txt 1970-01-01 00:00:00.000000000 +0000 +++ synthv1-0.9.10+git20190929/src/CMakeLists.txt 2019-09-28 23:05:55.000000000 +0000 @@ -0,0 +1,194 @@ +set(NAME synthv1) + +include_directories ( + ${CMAKE_CURRENT_SOURCE_DIR} + ${CMAKE_CURRENT_BINARY_DIR} +) + +configure_file (cmake_config.h.in ${CMAKE_CURRENT_BINARY_DIR}/config.h) + +set (HEADERS + synthv1.h + synthv1_config.h + synthv1_filter.h + synthv1_formant.h + synthv1_wave.h + synthv1_ramp.h + synthv1_list.h + synthv1_fx.h + synthv1_reverb.h + synthv1_param.h + synthv1_sched.h + synthv1_tuning.h + synthv1_programs.h + synthv1_controls.h +) + +set (SOURCES + synthv1.cpp + synthv1_config.cpp + synthv1_formant.cpp + synthv1_wave.cpp + synthv1_param.cpp + synthv1_sched.cpp + synthv1_tuning.cpp + synthv1_programs.cpp + synthv1_controls.cpp +) + +qt5_wrap_cpp (MOC_SOURCES ${HEADERS}) + + +set (HEADERS_UI + synthv1_ui.h + synthv1widget.h + synthv1widget_env.h + synthv1widget_filt.h + synthv1widget_wave.h + synthv1widget_param.h + synthv1widget_keybd.h + synthv1widget_preset.h + synthv1widget_status.h + synthv1widget_programs.h + synthv1widget_controls.h + synthv1widget_control.h + synthv1widget_config.h +) + +set (SOURCES_UI + synthv1_ui.cpp + synthv1widget.cpp + synthv1widget_env.cpp + synthv1widget_filt.cpp + synthv1widget_wave.cpp + synthv1widget_param.cpp + synthv1widget_keybd.cpp + synthv1widget_preset.cpp + synthv1widget_status.cpp + synthv1widget_programs.cpp + synthv1widget_controls.cpp + synthv1widget_control.cpp + synthv1widget_config.cpp +) + +set (FORMS_UI + synthv1widget.ui + synthv1widget_control.ui + synthv1widget_config.ui +) + +set (RESOURCES_UI + synthv1.qrc +) + +qt5_wrap_ui (UI_SOURCES_UI ${FORMS_UI}) +qt5_wrap_cpp (MOC_SOURCES_UI ${HEADERS_UI}) +qt5_add_resources (QRC_SOURCES_UI ${RESOURCES_UI}) + + +set (HEADERS_LV2 + synthv1_lv2.h + synthv1_lv2ui.h + synthv1widget_lv2.h +) + +set (SOURCES_LV2 + synthv1_lv2.cpp + synthv1_lv2ui.cpp + synthv1widget_lv2.cpp +) + +qt5_wrap_cpp (MOC_SOURCES_LV2 ${HEADERS_LV2}) + + +set (HEADERS_JACK + synthv1_nsm.h + synthv1_jack.h + synthv1widget_jack.h +) + +set (SOURCES_JACK + synthv1_nsm.cpp + synthv1_jack.cpp + synthv1widget_jack.cpp +) + +qt5_wrap_cpp (MOC_SOURCES_JACK ${HEADERS_JACK}) + + +add_library (${NAME} STATIC + ${MOC_SOURCES} + ${SOURCES} +) + +add_library (${NAME}_ui STATIC + ${UI_SOURCES_UI} + ${MOC_SOURCES_UI} + ${QRC_SOURCES_UI} + ${SOURCES_UI} +) + +add_library (${NAME}_lv2 MODULE + ${MOC_SOURCES_LV2} + ${SOURCES_LV2} +) + +add_executable (${NAME}_jack + ${MOC_SOURCES_JACK} + ${SOURCES_JACK} +) + + +set_target_properties (${NAME} PROPERTIES CXX_STANDARD 11) +set_target_properties (${NAME}_ui PROPERTIES CXX_STANDARD 11) +set_target_properties (${NAME}_lv2 PROPERTIES CXX_STANDARD 11) +set_target_properties (${NAME}_jack PROPERTIES CXX_STANDARD 11) + +target_link_libraries (${NAME} PRIVATE Qt5::Core Qt5::Xml) +target_link_libraries (${NAME}_ui PRIVATE Qt5::Widgets ${NAME}) +target_link_libraries (${NAME}_lv2 PRIVATE Qt5::Core Qt5::Xml ${NAME}) +target_link_libraries (${NAME}_jack PRIVATE Qt5::Widgets ${NAME} ${NAME}_ui) + +if (CONFIG_JACK) + target_link_libraries (${NAME}_jack PRIVATE ${JACK_LIBRARIES}) +endif () + +if (CONFIG_ALSA_MIDI) + target_link_libraries (${NAME}_jack PRIVATE ${ALSA_LIBRARIES}) +endif () + +if (CONFIG_LIBLO) + target_link_libraries (${NAME}_jack PRIVATE ${LIBLO_LIBRARIES}) +endif () + + +if (UNIX AND NOT APPLE) + if (CONFIG_PREFIX MATCHES $ENV{HOME}) + set (CONFIG_LV2DIR ${CONFIG_PREFIX}/.lv2) + else () + set (CONFIG_LV2DIR ${CONFIG_LIBDIR}/lv2) + endif () + install (FILES ${CMAKE_CURRENT_BINARY_DIR}/lib${NAME}_lv2.so + RENAME ${NAME}.so + DESTINATION ${CONFIG_LV2DIR}/${NAME}.lv2) + install (FILES ${NAME}.lv2/manifest.ttl + ${NAME}.lv2/${NAME}.ttl + ${NAME}.lv2/${NAME}_ui.ttl + DESTINATION ${CONFIG_LV2DIR}/${NAME}.lv2) + install (TARGETS ${NAME}_jack RUNTIME + DESTINATION ${CMAKE_INSTALL_BINDIR}) + install (FILES ${NAME}.desktop + DESTINATION ${CMAKE_INSTALL_DATADIR}/applications) + install (FILES images/${NAME}.png + DESTINATION ${CMAKE_INSTALL_DATADIR}/icons/hicolor/32x32/apps) + install (FILES images/${NAME}.svg + DESTINATION ${CMAKE_INSTALL_DATADIR}/icons/hicolor/scalable/apps) + install (FILES appdata/${NAME}.appdata.xml + DESTINATION ${CMAKE_INSTALL_DATADIR}/metainfo) + install (FILES mimetypes/${NAME}.xml + DESTINATION ${CMAKE_INSTALL_DATADIR}/mime/packages) + install (FILES mimetypes/application-x-${NAME}-preset.png + DESTINATION ${CMAKE_INSTALL_DATADIR}/icons/hicolor/32x32/mimetypes) + install (FILES mimetypes/application-x-${NAME}-preset.svg + DESTINATION ${CMAKE_INSTALL_DATADIR}/icons/hicolor/scalable/mimetypes) +endif () diff -Nru synthv1-0.8.6/src/config.h.in synthv1-0.9.10+git20190929/src/config.h.in --- synthv1-0.8.6/src/config.h.in 2017-12-20 07:57:10.000000000 +0000 +++ synthv1-0.9.10+git20190929/src/config.h.in 1970-01-01 00:00:00.000000000 +0000 @@ -1,148 +0,0 @@ -/* src/config.h.in. Generated from configure.ac by autoheader. */ - -/* Define if ALSA MIDI support is enabled. */ -#undef CONFIG_ALSA_MIDI - -/* Default executable binary path. */ -#undef CONFIG_BINDIR - -/* Build version string. */ -#undef CONFIG_BUILD_VERSION - -/* Default arch-idependent data path. */ -#undef CONFIG_DATADIR - -/* Define if debugging is enabled. */ -#undef CONFIG_DEBUG - -/* Define if JACK library is available. */ -#undef CONFIG_JACK - -/* Define if JACK MIDI support is enabled. */ -#undef CONFIG_JACK_MIDI - -/* Define if JACK session support is available. */ -#undef CONFIG_JACK_SESSION - -/* Default object library path. */ -#undef CONFIG_LIBDIR - -/* Define if LIBLO library is available. */ -#undef CONFIG_LIBLO - -/* Define if LV2 plug-in build is enabled. */ -#undef CONFIG_LV2 - -/* Define if lv2_atom_forge_key is available. */ -#undef CONFIG_LV2_ATOM_FORGE_KEY - -/* Define if lv2_atom_forge_object is available. */ -#undef CONFIG_LV2_ATOM_FORGE_OBJECT - -/* Define if LV2 External UI extension is available. */ -#undef CONFIG_LV2_EXTERNAL_UI - -/* Define if LV2 Programs extension is available. */ -#undef CONFIG_LV2_PROGRAMS - -/* Define if LV2 UI Idle interface support is available. */ -#undef CONFIG_LV2_UI_IDLE - -/* Define if LV2 UI Show interface support is available. */ -#undef CONFIG_LV2_UI_SHOW - -/* Default man page path. */ -#undef CONFIG_MANDIR - -/* Define if NSM support is available. */ -#undef CONFIG_NSM - -/* Default installation prefix. */ -#undef CONFIG_PREFIX - -/* Version string. */ -#undef CONFIG_VERSION - -/* Define to 1 if you have the header file. */ -#undef HAVE_FCNTL_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_INTTYPES_H - -/* Define to 1 if you have the `m' library (-lm). */ -#undef HAVE_LIBM - -/* Define to 1 if you have the `X11' library (-lX11). */ -#undef HAVE_LIBX11 - -/* Define to 1 if you have the `Xext' library (-lXext). */ -#undef HAVE_LIBXEXT - -/* Define to 1 if you have the header file. */ -#undef HAVE_LV2_H - -/* Define to 1 if you have the header - file. */ -#undef HAVE_LV2_LV2PLUG_IN_NS_EXT_ATOM_ATOM_H - -/* Define to 1 if you have the header - file. */ -#undef HAVE_LV2_LV2PLUG_IN_NS_EXT_ATOM_FORGE_H - -/* Define to 1 if you have the header - file. */ -#undef HAVE_LV2_LV2PLUG_IN_NS_EXT_ATOM_UTIL_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_MEMORY_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_SIGNAL_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_STDINT_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_STDLIB_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_STRINGS_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_STRING_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_SYS_IOCTL_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_SYS_STAT_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_SYS_TYPES_H - -/* Define to 1 if you have that is POSIX.1 compatible. */ -#undef HAVE_SYS_WAIT_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_UNISTD_H - -/* Define to the address where bug reports for this package should be sent. */ -#undef PACKAGE_BUGREPORT - -/* Define to the full name of this package. */ -#undef PACKAGE_NAME - -/* Define to the full name and version of this package. */ -#undef PACKAGE_STRING - -/* Define to the one symbol short name of this package. */ -#undef PACKAGE_TARNAME - -/* Define to the home page for this package. */ -#undef PACKAGE_URL - -/* Define to the version of this package. */ -#undef PACKAGE_VERSION - -/* Define to 1 if you have the ANSI C header files. */ -#undef STDC_HEADERS Binary files /tmp/tmpgGvAob/JVd7Fr9e4v/synthv1-0.8.6/src/images/fileOpen.png and /tmp/tmpgGvAob/CoIHCznz69/synthv1-0.9.10+git20190929/src/images/fileOpen.png differ diff -Nru synthv1-0.8.6/src/src_core.pro synthv1-0.9.10+git20190929/src/src_core.pro --- synthv1-0.8.6/src/src_core.pro 2017-12-20 07:56:50.307842973 +0000 +++ synthv1-0.9.10+git20190929/src/src_core.pro 2019-09-28 23:05:55.000000000 +0000 @@ -4,7 +4,7 @@ TARGET = $${NAME} TEMPLATE = lib -CONFIG += shared +CONFIG += static include(src_core.pri) @@ -21,6 +21,7 @@ synthv1_reverb.h \ synthv1_param.h \ synthv1_sched.h \ + synthv1_tuning.h \ synthv1_programs.h \ synthv1_controls.h @@ -31,6 +32,7 @@ synthv1_wave.cpp \ synthv1_param.cpp \ synthv1_sched.cpp \ + synthv1_tuning.cpp \ synthv1_programs.cpp \ synthv1_controls.cpp diff -Nru synthv1-0.8.6/src/src_jack.pro synthv1-0.9.10+git20190929/src/src_jack.pro --- synthv1-0.8.6/src/src_jack.pro 2017-12-20 07:56:50.307842973 +0000 +++ synthv1-0.9.10+git20190929/src/src_jack.pro 2019-09-28 23:44:23.000000000 +0000 @@ -5,6 +5,7 @@ TARGET = $${NAME}_jack TEMPLATE = app LIBS += -L. +LIBS += -l$${NAME} -l$${NAME}_ui include(src_jack.pri) @@ -74,13 +75,6 @@ mimetypes_scalable.path = $${DATADIR}/icons/hicolor/scalable/mimetypes mimetypes_scalable.files += mimetypes/application-x-$${NAME}-preset.svg - - LIBS += -l$${NAME} -l$${NAME}_ui -Wl,-rpath,$${LIBDIR} } -QT += xml - -# QT5 support -!lessThan(QT_MAJOR_VERSION, 5) { - QT += widgets -} +QT += widgets xml diff -Nru synthv1-0.8.6/src/src_lv2.pro synthv1-0.9.10+git20190929/src/src_lv2.pro --- synthv1-0.8.6/src/src_lv2.pro 2017-12-20 07:56:50.307842973 +0000 +++ synthv1-0.9.10+git20190929/src/src_lv2.pro 2019-09-28 23:44:15.000000000 +0000 @@ -6,15 +6,20 @@ TEMPLATE = lib CONFIG += shared plugin LIBS += -L. +LIBS += -l$${NAME} -l$${NAME}_ui include(src_lv2.pri) HEADERS = \ config.h \ - synthv1_lv2.h + synthv1_lv2.h \ + synthv1_lv2ui.h \ + synthv1widget_lv2.h SOURCES = \ - synthv1_lv2.cpp + synthv1_lv2.cpp \ + synthv1_lv2ui.cpp \ + synthv1widget_lv2.cpp unix { @@ -48,19 +53,19 @@ system(touch $${TARGET_LV2}.so) } + TARGET_LV2UI = $${NAME}.lv2/$${NAME}_ui + INSTALLS += target target.path = $${LV2DIR}/$${NAME}.lv2 target.files = $${TARGET_LV2}.so \ $${TARGET_LV2}.ttl \ + $${TARGET_LV2UI}.ttl \ $${NAME}.lv2/manifest.ttl QMAKE_POST_LINK += $${QMAKE_COPY} -vp $(TARGET) $${TARGET_LV2}.so QMAKE_CLEAN += $${TARGET_LV2}.so - - LIBS += -l$${NAME} -Wl,-rpath,$${LIBDIR} } -QT -= gui -QT += xml +QT += widgets xml diff -Nru synthv1-0.8.6/src/src_lv2ui.pro synthv1-0.9.10+git20190929/src/src_lv2ui.pro --- synthv1-0.8.6/src/src_lv2ui.pro 2017-12-20 07:56:50.307842973 +0000 +++ synthv1-0.9.10+git20190929/src/src_lv2ui.pro 1970-01-01 00:00:00.000000000 +0000 @@ -1,82 +0,0 @@ -# synthv1_lv2ui.pro -# -NAME = synthv1 - -TARGET = $${NAME}_lv2ui -TEMPLATE = lib -CONFIG += shared plugin -LIBS += -L. - -include(src_lv2.pri) - -HEADERS = \ - config.h \ - synthv1_lv2ui.h \ - synthv1widget_lv2.h - -SOURCES = \ - synthv1_lv2ui.cpp \ - synthv1widget_lv2.cpp - - -unix { - - OBJECTS_DIR = .obj_lv2ui - MOC_DIR = .moc_lv2ui - UI_DIR = .ui_lv2ui - - isEmpty(PREFIX) { - PREFIX = /usr/local - } - - isEmpty(LIBDIR) { - TARGET_ARCH = $$system(uname -m) - contains(TARGET_ARCH, x86_64) { - LIBDIR = $${PREFIX}/lib64 - } else { - LIBDIR = $${PREFIX}/lib - } - } - - contains(PREFIX, $$system(echo $HOME)) { - LV2DIR = $${PREFIX}/.lv2 - } else { - LV2DIR = $${LIBDIR}/lv2 - } - - TARGET_LV2UI = $${NAME}.lv2/$${NAME}_ui - - !exists($${TARGET_LV2UI}.so) { - system(touch $${TARGET_LV2UI}.so) - } - - !exists($${TARGET_LV2UI}.ttl) { - system(touch $${TARGET_LV2UI}.ttl) - } - - INSTALLS += target - - target.path = $${LV2DIR}/$${NAME}.lv2 - target.files = $${TARGET_LV2UI}.so $${TARGET_LV2UI}.ttl - - QMAKE_POST_LINK += $${QMAKE_COPY} -vp $(TARGET) $${TARGET_LV2UI}.so - - greaterThan(QT_MAJOR_VERSION, 4) { - QMAKE_POST_LINK += ;\ - $${QMAKE_COPY} -vp $${TARGET_LV2UI}-qt5.ttl $${TARGET_LV2UI}.ttl - } else { - QMAKE_POST_LINK += ;\ - $${QMAKE_COPY} -vp $${TARGET_LV2UI}-qt4.ttl $${TARGET_LV2UI}.ttl - } - - QMAKE_CLEAN += $${TARGET_LV2UI}.so $${TARGET_LV2UI}.ttl - - LIBS += -l$${NAME} -l$${NAME}_ui -L$${NAME}.lv2 -Wl,-rpath,$${LIBDIR}:$${LV2DIR}/$${NAME}.lv2 -} - -QT += xml - -# QT5 support -greaterThan(QT_MAJOR_VERSION, 4) { - QT += widgets -} diff -Nru synthv1-0.8.6/src/src_ui.pro synthv1-0.9.10+git20190929/src/src_ui.pro --- synthv1-0.8.6/src/src_ui.pro 2017-12-20 07:56:50.307842973 +0000 +++ synthv1-0.9.10+git20190929/src/src_ui.pro 2019-09-28 23:05:55.000000000 +0000 @@ -4,7 +4,7 @@ TARGET = $${NAME}_ui TEMPLATE = lib -CONFIG += shared +CONFIG += static LIBS += -L. include(src_ui.pri) @@ -17,6 +17,7 @@ synthv1widget_filt.h \ synthv1widget_wave.h \ synthv1widget_param.h \ + synthv1widget_keybd.h \ synthv1widget_preset.h \ synthv1widget_status.h \ synthv1widget_programs.h \ @@ -31,6 +32,7 @@ synthv1widget_filt.cpp \ synthv1widget_wave.cpp \ synthv1widget_param.cpp \ + synthv1widget_keybd.cpp \ synthv1widget_preset.cpp \ synthv1widget_status.cpp \ synthv1widget_programs.cpp \ @@ -69,12 +71,7 @@ target.path = $${LIBDIR} - LIBS += -l$${NAME} -Wl,-rpath,$${LIBDIR} + LIBS += -l$${NAME} } -QT += xml - -# QT5 support -greaterThan(QT_MAJOR_VERSION, 4) { - QT += widgets -} +QT += widgets xml diff -Nru synthv1-0.8.6/src/synthv1_config.cpp synthv1-0.9.10+git20190929/src/synthv1_config.cpp --- synthv1-0.8.6/src/synthv1_config.cpp 2017-12-20 07:56:50.308842973 +0000 +++ synthv1-0.9.10+git20190929/src/synthv1_config.cpp 2019-09-28 23:00:43.000000000 +0000 @@ -1,7 +1,7 @@ // synthv1_config.cpp // /**************************************************************************** - Copyright (C) 2012-2017, rncbc aka Rui Nuno Capela. All rights reserved. + Copyright (C) 2012-2019, rncbc aka Rui Nuno Capela. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License @@ -32,7 +32,7 @@ // // Singleton instance accessor (static). -synthv1_config *synthv1_config::g_pSettings = NULL; +synthv1_config *synthv1_config::g_pSettings = nullptr; synthv1_config *synthv1_config::getInstance (void) { @@ -55,7 +55,7 @@ { save(); - g_pSettings = NULL; + g_pSettings = nullptr; } @@ -311,6 +311,7 @@ sPresetDir = QSettings::value("/PresetDir").toString(); iKnobDialMode = QSettings::value("/KnobDialMode", 0).toInt(); iKnobEditMode = QSettings::value("/KnobEditMode", 0).toInt(); + fRandomizePercent = QSettings::value("/RandomizePercent", 20.0f).toFloat(); bControlsEnabled = QSettings::value("/ControlsEnabled", false).toBool(); bProgramsEnabled = QSettings::value("/ProgramsEnabled", false).toBool(); QSettings::endGroup(); @@ -325,6 +326,17 @@ QSettings::beginGroup("/Custom"); sCustomStyleTheme = QSettings::value("/StyleTheme").toString(); QSettings::endGroup(); + + // Micro-tuning options. + QSettings::beginGroup("/Tuning"); + bTuningEnabled = QSettings::value("/Enabled", false).toBool(); + fTuningRefPitch = float(QSettings::value("/RefPitch", 440.0).toDouble()); + iTuningRefNote = QSettings::value("/RefNote", 69).toInt(); + sTuningScaleDir = QSettings::value("/ScaleDir").toString(); + sTuningScaleFile = QSettings::value("/ScaleFile").toString(); + sTuningKeyMapDir = QSettings::value("/KeyMapDir").toString(); + sTuningKeyMapFile = QSettings::value("/KeyMapFile").toString(); + QSettings::endGroup(); } @@ -339,6 +351,7 @@ QSettings::setValue("/PresetDir", sPresetDir); QSettings::setValue("/KnobDialMode", iKnobDialMode); QSettings::setValue("/KnobEditMode", iKnobEditMode); + QSettings::setValue("/RandomizePercent", fRandomizePercent); QSettings::setValue("/ControlsEnabled", bControlsEnabled); QSettings::setValue("/ProgramsEnabled", bProgramsEnabled); QSettings::endGroup(); @@ -352,6 +365,17 @@ QSettings::setValue("/StyleTheme", sCustomStyleTheme); QSettings::endGroup(); + // Micro-tuning options. + QSettings::beginGroup("/Tuning"); + QSettings::setValue("/Enabled", bTuningEnabled); + QSettings::setValue("/RefPitch", double(fTuningRefPitch)); + QSettings::setValue("/RefNote", iTuningRefNote); + QSettings::setValue("/ScaleDir", sTuningScaleDir); + QSettings::setValue("/ScaleFile", sTuningScaleFile); + QSettings::setValue("/KeyMapDir", sTuningKeyMapDir); + QSettings::setValue("/KeyMapFile", sTuningKeyMapFile); + QSettings::endGroup(); + QSettings::sync(); } diff -Nru synthv1-0.8.6/src/synthv1_config.h synthv1-0.9.10+git20190929/src/synthv1_config.h --- synthv1-0.8.6/src/synthv1_config.h 2017-12-20 07:56:50.308842973 +0000 +++ synthv1-0.9.10+git20190929/src/synthv1_config.h 2019-09-28 23:00:43.000000000 +0000 @@ -1,7 +1,7 @@ // synthv1_config.h // /**************************************************************************** - Copyright (C) 2012-2017, rncbc aka Rui Nuno Capela. All rights reserved. + Copyright (C) 2012-2019, rncbc aka Rui Nuno Capela. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License @@ -27,8 +27,8 @@ #define SYNTHV1_TITLE PACKAGE_NAME #define SYNTHV1_SUBTITLE "an old-school polyphonic synthesizer." -#define SYNTHV1_WEBSITE "http://synthv1.sourceforge.net" -#define SYNTHV1_COPYRIGHT "Copyright (C) 2012-2017, rncbc aka Rui Nuno Capela. All rights reserved." +#define SYNTHV1_WEBSITE "https://synthv1.sourceforge.io" +#define SYNTHV1_COPYRIGHT "Copyright (C) 2012-2019, rncbc aka Rui Nuno Capela. All rights reserved." #define SYNTHV1_DOMAIN "rncbc.org" @@ -63,6 +63,9 @@ int iKnobDialMode; int iKnobEditMode; + // Default randomize factor (percent). + float fRandomizePercent; + // Special persistent options. bool bControlsEnabled; bool bProgramsEnabled; @@ -74,6 +77,15 @@ // Custom widget style theme. QString sCustomStyleTheme; + // Micro-tuning options. + bool bTuningEnabled; + float fTuningRefPitch; + int iTuningRefNote; + QString sTuningScaleDir; + QString sTuningScaleFile; + QString sTuningKeyMapDir; + QString sTuningKeyMapFile; + // Singleton instance accessor. static synthv1_config *getInstance(); diff -Nru synthv1-0.8.6/src/synthv1_controls.cpp synthv1-0.9.10+git20190929/src/synthv1_controls.cpp --- synthv1-0.8.6/src/synthv1_controls.cpp 2017-12-20 07:56:50.309842973 +0000 +++ synthv1-0.9.10+git20190929/src/synthv1_controls.cpp 2019-09-28 23:00:43.000000000 +0000 @@ -1,7 +1,7 @@ // synthv1_controls.cpp // /**************************************************************************** - Copyright (C) 2012-2017, rncbc aka Rui Nuno Capela. All rights reserved. + Copyright (C) 2012-2019, rncbc aka Rui Nuno Capela. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License @@ -23,6 +23,8 @@ #include +#include + #define RPN_MSB 0x65 #define RPN_LSB 0x64 @@ -216,15 +218,21 @@ synthv1_controls::Event *old_events = m_events; if (old_events) { if (m_write > m_read) { - ::memcpy(new_events + m_read, old_events + m_read, + ::memcpy( + (void *) (new_events + m_read), + (void *) (old_events + m_read), (m_write - m_read) * sizeof(synthv1_controls::Event)); } else if (m_write < m_read) { - ::memcpy(new_events + m_read, old_events + m_read, + ::memcpy( + (void *) (new_events + m_read), + (void *) (old_events + m_read), (old_size - m_read) * sizeof(synthv1_controls::Event)); if (m_write > 0) { - ::memcpy(new_events + old_size, old_events, + ::memcpy( + (void *) (new_events + old_size), + (void *) (old_events), m_write * sizeof(synthv1_controls::Event)); } m_write += old_size; @@ -334,7 +342,7 @@ xrpn_item& item = get_item(channel); if (item.is_any() && item.type() != synthv1_controls::RPN) enqueue(item); - if (item.is_status() // RPN NULL [MSB] + if (item.is_status() // RPN nullptr [MSB] && item.type() == synthv1_controls::RPN && item.is_param_lsb() && item.param_lsb() == 0x7f && event.value == 0x7f) { item.clear(); @@ -358,7 +366,7 @@ xrpn_item& item = get_item(channel); if (item.is_any() && item.type() != synthv1_controls::RPN) enqueue(item); - if (item.is_status() // RPN NULL [LSB] + if (item.is_status() // RPN nullptr [LSB] && item.type() == synthv1_controls::RPN && item.is_param_msb() && item.param_msb() == 0x7f && event.value == 0x7f) { item.clear(); @@ -450,14 +458,15 @@ --m_count; } else - if (item.is_param_msb() || item.is_value_msb() - || (item.type() == synthv1_controls::CC14 + if ((item.is_param_msb() && item.is_value_msb()) + || (item.type() == synthv1_controls::CC14 && item.is_param_lsb() && item.param_lsb() != event.key.param + CC14_LSB_MIN)) enqueue(item); if (!item.is_status()) { item.set_status(synthv1_controls::CC14 | channel); ++m_count; } + item.set_param_lsb(event.key.param + CC14_LSB_MIN); item.set_param_msb(event.key.param); item.set_value_msb(event.value); if (item.is_14bit()) @@ -473,14 +482,15 @@ --m_count; } else - if (item.is_param_lsb() || item.is_value_lsb() - || (item.type() == synthv1_controls::CC14 + if ((item.is_param_lsb() && item.is_value_lsb()) + || (item.type() == synthv1_controls::CC14 && item.is_param_msb() && item.param_msb() != event.key.param - CC14_LSB_MIN)) enqueue(item); if (!item.is_status()) { item.set_status(synthv1_controls::CC14 | channel); ++m_count; } + item.set_param_msb(event.key.param - CC14_LSB_MIN); item.set_param_lsb(event.key.param); item.set_value_lsb(event.value); if (item.is_14bit()) @@ -504,16 +514,20 @@ if (item.type() == synthv1_controls::CC14) { if (item.is_14bit()) { m_queue.push(item.status(), item.param_msb(), item.value()); + const unsigned char value_msb = item.value_msb(); + item.clear_value(); + item.set_value_msb(value_msb); + // --m_count; } else { const unsigned short status = synthv1_controls::CC | item.channel(); - if (item.is_value_msb()) + if (item.is_param_msb() && item.is_value_msb()) m_queue.push(status, item.param_msb(), item.value_msb()); - if (item.is_value_lsb()) + if (item.is_param_lsb() && item.is_value_lsb()) m_queue.push(status, item.param_lsb(), item.value_lsb()); + item.clear(); + --m_count; } - item.clear(); - --m_count; } else if (item.is_ready()) { @@ -653,8 +667,8 @@ const float v0 = data.val; const float v1 = synthv1_param::paramScale(index, m_sched_in.instance()->paramValue(index)); - const float d1 = (v1 - fScale); - const float d2 = (v1 - v0) * d1; + const float d1 = ::fabsf(v1 - fScale); + const float d2 = ::fabsf(v1 - v0) * d1; bSync = (d2 < 0.001f); if (bSync) { data.val = fScale; diff -Nru synthv1-0.8.6/src/synthv1_controls.h synthv1-0.9.10+git20190929/src/synthv1_controls.h --- synthv1-0.8.6/src/synthv1_controls.h 2017-12-20 07:56:50.309842973 +0000 +++ synthv1-0.9.10+git20190929/src/synthv1_controls.h 2019-09-28 23:00:43.000000000 +0000 @@ -1,7 +1,7 @@ // synthv1_controls.h // /**************************************************************************** - Copyright (C) 2012-2017, rncbc aka Rui Nuno Capela. All rights reserved. + Copyright (C) 2012-2019, rncbc aka Rui Nuno Capela. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License @@ -72,6 +72,16 @@ return (param < key.param); } + // copy assignment operator. + Key& operator= (const Key& key) + { + if (this != &key) { + status = key.status; + param = key.param; + } + return *this; + } + unsigned short status; unsigned short param; }; @@ -83,9 +93,6 @@ struct Data { Data () : index(-1), flags(0), val(0.0f), sync(false) {} - Data (const Data& data) - : index(data.index), flags(data.flags), - val(data.val), sync(data.sync) {} int index; int flags; @@ -97,7 +104,6 @@ // controller events. struct Event - { Key key; unsigned short value; diff -Nru synthv1-0.8.6/src/synthv1.cpp synthv1-0.9.10+git20190929/src/synthv1.cpp --- synthv1-0.8.6/src/synthv1.cpp 2017-12-20 07:56:50.308842973 +0000 +++ synthv1-0.9.10+git20190929/src/synthv1.cpp 2019-09-28 23:00:43.000000000 +0000 @@ -1,7 +1,7 @@ // synthv1.cpp // /**************************************************************************** - Copyright (C) 2012-2017, rncbc aka Rui Nuno Capela. All rights reserved. + Copyright (C) 2012-2019, rncbc aka Rui Nuno Capela. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License @@ -35,6 +35,7 @@ #include "synthv1_config.h" #include "synthv1_controls.h" #include "synthv1_programs.h" +#include "synthv1_tuning.h" #include "synthv1_sched.h" @@ -53,8 +54,8 @@ // Copyright (C) 2007 jorgen, linux-vst.com // -const uint16_t MAX_VOICES = 32; // polyphony -const uint8_t MAX_NOTES = 128; +const uint8_t MAX_VOICES = 64; // max polyphony +const uint8_t MAX_NOTES = 128; const float MIN_ENV_MSECS = 0.5f; // min 500 usec per stage const float MAX_ENV_MSECS = 5000.0f; // max 5 sec per stage (default) @@ -66,6 +67,8 @@ const float SWEEP_SCALE = 0.5f; const float PITCH_SCALE = 0.5f; +const uint8_t MAX_DIRECT_NOTES = (MAX_VOICES >> 2); + // maximum helper @@ -135,9 +138,14 @@ // convert note to frequency (hertz) -inline float synthv1_freq ( float note ) +inline float synthv1_freq2 ( float delta ) +{ + return ::powf(2.0f, delta / 12.0f); +} + +inline float synthv1_freq ( int note ) { - return (440.0f / 32.0f) * ::powf(2.0f, (note - 9.0f) / 12.0f); + return (440.0f / 32.0f) * synthv1_freq2(float(note - 9)); } @@ -147,7 +155,7 @@ { public: - synthv1_port() : m_port(NULL), m_value(0.0f), m_vport(0.0f) {} + synthv1_port() : m_port(nullptr), m_value(0.0f), m_vport(0.0f) {} virtual ~synthv1_port() {} @@ -191,6 +199,8 @@ synthv1_port2() : m_vtick(0.0f), m_vstep(0.0f), m_nstep(0) {} + static const uint32_t NSTEP = 32; + void set_value(float value) { m_vtick = synthv1_port::value(); @@ -219,8 +229,6 @@ private: - static const uint32_t NSTEP = 32; - float m_vtick; float m_vstep; uint32_t m_nstep; @@ -396,23 +404,6 @@ }; -// internal control - -struct synthv1_aux -{ - synthv1_aux() { reset(); } - - void reset() - { - panning = 0.0f; - volume = 1.0f; - } - - float panning; - float volume; -}; - - // dco struct synthv1_dco @@ -442,6 +433,7 @@ struct synthv1_dcf { + synthv1_port enabled; synthv1_port2 cutoff; synthv1_port2 reso; synthv1_port type; @@ -453,9 +445,11 @@ // lfo +struct synthv1_voice; struct synthv1_lfo { + synthv1_port enabled; synthv1_port shape; synthv1_port width; synthv1_port2 bpm; @@ -471,6 +465,8 @@ synthv1_port2 volume; synthv1_env env; + + synthv1_voice *psync; }; @@ -478,9 +474,9 @@ struct synthv1_dca { - synthv1_port2 volume; + synthv1_port volume; - synthv1_env env; + synthv1_env env; }; @@ -502,10 +498,10 @@ struct synthv1_out { - synthv1_port2 width; - synthv1_port2 panning; - synthv1_port2 fxsend; - synthv1_port2 volume; + synthv1_port width; + synthv1_port panning; + synthv1_port fxsend; + synthv1_port volume; }; @@ -513,11 +509,11 @@ struct synthv1_cho { - synthv1_port2 wet; - synthv1_port2 delay; - synthv1_port2 feedb; - synthv1_port2 rate; - synthv1_port2 mod; + synthv1_port wet; + synthv1_port delay; + synthv1_port feedb; + synthv1_port rate; + synthv1_port mod; }; @@ -525,10 +521,10 @@ struct synthv1_fla { - synthv1_port2 wet; - synthv1_port2 delay; - synthv1_port2 feedb; - synthv1_port2 daft; + synthv1_port wet; + synthv1_port delay; + synthv1_port feedb; + synthv1_port daft; }; @@ -536,11 +532,11 @@ struct synthv1_pha { - synthv1_port2 wet; - synthv1_port2 rate; - synthv1_port2 feedb; - synthv1_port2 depth; - synthv1_port2 daft; + synthv1_port wet; + synthv1_port rate; + synthv1_port feedb; + synthv1_port depth; + synthv1_port daft; }; @@ -548,10 +544,10 @@ struct synthv1_del { - synthv1_port2 wet; - synthv1_port2 delay; - synthv1_port2 feedb; - synthv1_port2 bpm; + synthv1_port wet; + synthv1_port delay; + synthv1_port feedb; + synthv1_port bpm; }; @@ -559,13 +555,14 @@ struct synthv1_rev { - synthv1_port2 wet; - synthv1_port2 room; - synthv1_port2 damp; - synthv1_port2 feedb; - synthv1_port2 width; + synthv1_port wet; + synthv1_port room; + synthv1_port damp; + synthv1_port feedb; + synthv1_port width; }; + // dynamic(compressor/limiter) struct synthv1_dyn @@ -575,6 +572,20 @@ }; +// keyboard/note range + +struct synthv1_key +{ + synthv1_port low; + synthv1_port high; + + bool is_note(int key) + { + return (key >= int(*low) && int(*high) >= key); + } +}; + + // glide (portamento) struct synthv1_glide @@ -618,47 +629,45 @@ // balancing smoother (1 parameter) -class synthv1_bal : public synthv1_ramp2 +class synthv1_bal1 : public synthv1_ramp1 { public: - synthv1_bal() : synthv1_ramp2(2) {} + synthv1_bal1() : synthv1_ramp1(2) {} protected: float evaluate(uint16_t i) { - synthv1_ramp2::update(); + synthv1_ramp1::update(); const float wbal = 0.25f * M_PI - * (1.0f + m_param1_v) - * (1.0f + m_param2_v); + * (1.0f + m_param1_v); - return M_SQRT2 * (i == 0 ? ::cosf(wbal) : ::sinf(wbal)); + return M_SQRT2 * (i & 1 ? ::sinf(wbal) : ::cosf(wbal)); } }; -// panning smoother (3 parameters) +// balancing smoother (2 parameters) -class synthv1_pan : public synthv1_ramp3 +class synthv1_bal2 : public synthv1_ramp2 { public: - synthv1_pan() : synthv1_ramp3(2) {} + synthv1_bal2() : synthv1_ramp2(2) {} protected: float evaluate(uint16_t i) { - synthv1_ramp3::update(); + synthv1_ramp2::update(); - const float wpan = 0.25f * M_PI + const float wbal = 0.25f * M_PI * (1.0f + m_param1_v) - * (1.0f + m_param2_v) - * (1.0f + m_param3_v); + * (1.0f + m_param2_v); - return M_SQRT2 * (i == 0 ? ::cosf(wpan) : ::sinf(wpan)); + return M_SQRT2 * (i & 1 ? ::sinf(wbal) : ::cosf(wbal)); } }; @@ -724,10 +733,10 @@ float vel1, vel2; // key velocity float pre1, pre2; // key pressure/after-touch - synthv1_oscillator dco1_osc1, dco1_osc2; // oscillators - synthv1_oscillator dco2_osc1, dco2_osc2; + synthv1_oscillator dco11, dco12; // oscillators + synthv1_oscillator dco21, dco22; - synthv1_oscillator lfo1_osc, lfo2_osc; // low frequency oscillators + synthv1_oscillator lfo1, lfo2; // low frequency oscillators float dco1_freq1, dco1_sample1; // frequency and phase float dco1_freq2, dco1_sample2; @@ -736,10 +745,10 @@ float lfo1_sample, lfo2_sample; - synthv1_bal dco1_bal, dco2_bal; // oscillators balance - float dco1_balance, dco2_balance; + synthv1_bal2 dco1_bal, dco2_bal; // oscillators balance + synthv1_filter1 dcf11, dcf12, dcf21, dcf22; // filters synthv1_filter2 dcf13, dcf14, dcf23, dcf24; synthv1_filter3 dcf15, dcf16, dcf25, dcf26; @@ -754,6 +763,12 @@ synthv1_pre dca1_pre, dca2_pre; + float out1_panning, out2_panning; + float out1_volume, out2_volume; + + synthv1_bal1 out1_pan, out2_pan; // output panning + synthv1_ramp1 out1_vol, out2_vol; // output volume + bool sustain1, sustain2; }; @@ -770,6 +785,8 @@ void schedule_event() { if (m_enabled && ++m_count < 2) schedule(-1); } + void schedule_note(int key, int vel) + { if (m_enabled) schedule((vel << 7) | key); } void process(int) {} @@ -790,6 +807,22 @@ }; +// micro-tuning/instance implementation + +class synthv1_tun +{ +public: + + synthv1_tun() : enabled(false), refPitch(440.0f), refNote(69) {} + + bool enabled; + float refPitch; + int refNote; + QString scaleFile; + QString keyMapFile; +}; + + // polyphonic synth implementation class synthv1_impl @@ -821,9 +854,27 @@ synthv1_controls *controls(); synthv1_programs *programs(); + void setTuningEnabled(bool enabled); + bool isTuningEnabled() const; + + void setTuningRefPitch(float refPitch); + float tuningRefPitch() const; + + void setTuningRefNote(int refNote); + int tuningRefNote() const; + + void setTuningScaleFile(const char *pszScaleFile); + const char *tuningScaleFile() const; + + void setTuningKeyMapFile(const char *pszKeyMapFile); + const char *tuningKeyMapFile() const; + + void resetTuning(); + void process_midi(uint8_t *data, uint32_t size); void process(float **ins, float **outs, uint32_t nframes); + void stabilize(); void reset(); void midiInEnabled(bool on); @@ -831,6 +882,8 @@ void directNoteOn(int note, int vel); + bool running(bool on); + synthv1_wave dco1_wave1, dco1_wave2; synthv1_wave dco2_wave1, dco2_wave2; @@ -869,14 +922,21 @@ if (pv) { m_free_list.remove(pv); m_play_list.append(pv); + ++m_nvoices; } return pv; } void free_voice ( synthv1_voice *pv ) { + if (m_lfo1.psync == pv) + m_lfo1.psync = nullptr; + if (m_lfo2.psync == pv) + m_lfo2.psync = nullptr; + m_play_list.remove(pv); m_free_list.append(pv); + --m_nvoices; } void alloc_sfxs(uint32_t nsize); @@ -887,11 +947,14 @@ synthv1_controls m_controls; synthv1_programs m_programs; synthv1_midi_in m_midi_in; + synthv1_tun m_tun; uint16_t m_nchannels; float m_srate; float m_bpm; + float m_freqs[MAX_NOTES]; + synthv1_ctl m_ctl1, m_ctl2; synthv1_dco m_dco1, m_dco2; @@ -909,6 +972,8 @@ synthv1_rev m_rev; synthv1_dyn m_dyn; + synthv1_key m_key; + synthv1_voice **m_voices; synthv1_voice *m_note1[MAX_NOTES]; synthv1_voice *m_note2[MAX_NOTES]; @@ -916,11 +981,9 @@ synthv1_list m_free_list; synthv1_list m_play_list; - synthv1_aux m_aux1, m_aux2; - synthv1_ramp1 m_wid1, m_wid2; - synthv1_pan m_pan1, m_pan2; - synthv1_ramp4 m_vol1, m_vol2; + synthv1_bal2 m_pan1, m_pan2; + synthv1_ramp3 m_vol1, m_vol2; float **m_sfxs; uint32_t m_nsize; @@ -932,11 +995,17 @@ synthv1_fx_comp *m_comp; synthv1_reverb m_reverb; - synthv1_phasor m_phasor; - volatile int m_direct_chan; - volatile int m_direct_note; - volatile int m_direct_vel; + // process direct note on/off... + volatile uint16_t m_direct_note; + + struct direct_note { + uint8_t status, note, vel; + } m_direct_notes[MAX_DIRECT_NOTES]; + + volatile int m_nvoices; + + volatile bool m_running; }; @@ -946,12 +1015,12 @@ note1(-1), note2(-1), vel1(0.0f), vel2(0.0f), pre1(0.0f), pre2(0.0f), - dco1_osc1(&pImpl->dco1_wave1), - dco1_osc2(&pImpl->dco1_wave2), - dco2_osc1(&pImpl->dco2_wave1), - dco2_osc2(&pImpl->dco2_wave2), - lfo1_osc(&pImpl->lfo1_wave), - lfo2_osc(&pImpl->lfo2_wave), + dco11(&pImpl->dco1_wave1), + dco12(&pImpl->dco1_wave2), + dco21(&pImpl->dco2_wave1), + dco22(&pImpl->dco2_wave2), + lfo1(&pImpl->lfo1_wave), + lfo2(&pImpl->lfo2_wave), dco1_freq1(0.0f), dco1_sample1(0.0f), dco1_freq2(0.0f), dco1_sample2(0.0f), dco2_freq1(0.0f), dco2_sample1(0.0f), @@ -974,7 +1043,8 @@ synthv1_impl::synthv1_impl ( synthv1 *pSynth, uint16_t nchannels, float srate ) - : m_controls(pSynth), m_programs(pSynth), m_midi_in(pSynth), m_bpm(180.0f) + : m_controls(pSynth), m_programs(pSynth), + m_midi_in(pSynth), m_bpm(180.0f), m_running(false) { // max env. stage length (default) m_dco1.envtime0 = m_dco2.envtime0 = 0.0001f * MAX_ENV_MSECS; @@ -994,23 +1064,26 @@ } for (int note = 0; note < MAX_NOTES; ++note) - m_note1[note] = m_note2[note] = NULL; + m_note1[note] = m_note2[note] = nullptr; // local buffers none yet - m_sfxs = NULL; + m_sfxs = nullptr; m_nsize = 0; // flangers none yet - m_flanger = NULL; + m_flanger = nullptr; // phasers none yet - m_phaser = NULL; + m_phaser = nullptr; // delays none yet - m_delay = NULL; + m_delay = nullptr; // compressors none yet - m_comp = NULL; + m_comp = nullptr; + + // Micro-tuning support, if any... + resetTuning(); // load controllers & programs database... m_config.loadControls(&m_controls); @@ -1025,6 +1098,8 @@ // reset all voices allControllersOff(); allNotesOff(); + + running(true); } @@ -1059,25 +1134,25 @@ // deallocate flangers if (m_flanger) { delete [] m_flanger; - m_flanger = NULL; + m_flanger = nullptr; } // deallocate phasers if (m_phaser) { delete [] m_phaser; - m_phaser = NULL; + m_phaser = nullptr; } // deallocate delays if (m_delay) { delete [] m_delay; - m_delay = NULL; + m_delay = nullptr; } // deallocate compressors if (m_comp) { delete [] m_comp; - m_comp = NULL; + m_comp = nullptr; } } @@ -1148,7 +1223,7 @@ for (uint16_t k = 0; k < m_nchannels; ++k) delete [] m_sfxs[k]; delete [] m_sfxs; - m_sfxs = NULL; + m_sfxs = nullptr; m_nsize = 0; } @@ -1226,7 +1301,7 @@ { static float s_fDummy = 0.0f; - if (pfParam == NULL) + if (pfParam == nullptr) pfParam = &s_fDummy; synthv1_port *pParamPort = paramPort(index); @@ -1244,8 +1319,7 @@ m_vol1.reset( m_out1.volume.value_ptr(), m_dca1.volume.value_ptr(), - &m_ctl1.volume, - &m_aux1.volume); + &m_ctl1.volume); break; case synthv1::OUT1_WIDTH: m_wid1.reset( @@ -1254,16 +1328,14 @@ case synthv1::OUT1_PANNING: m_pan1.reset( m_out1.panning.value_ptr(), - &m_ctl1.panning, - &m_aux1.panning); + &m_ctl1.panning); break; case synthv1::OUT2_VOLUME: case synthv1::DCA2_VOLUME: m_vol2.reset( m_out2.volume.value_ptr(), m_dca2.volume.value_ptr(), - &m_ctl2.volume, - &m_aux2.volume); + &m_ctl2.volume); break; case synthv1::OUT2_WIDTH: m_wid2.reset( @@ -1272,8 +1344,7 @@ case synthv1::OUT2_PANNING: m_pan2.reset( m_out2.panning.value_ptr(), - &m_ctl2.panning, - &m_aux2.panning); + &m_ctl2.panning); break; default: break; @@ -1283,7 +1354,7 @@ synthv1_port *synthv1_impl::paramPort ( synthv1::ParamIndex index ) { - synthv1_port *pParamPort = NULL; + synthv1_port *pParamPort = nullptr; switch (index) { case synthv1::DCO1_SHAPE1: pParamPort = &m_dco1.shape1; break; @@ -1302,6 +1373,7 @@ case synthv1::DCO1_TUNING: pParamPort = &m_dco1.tuning; break; case synthv1::DCO1_GLIDE: pParamPort = &m_dco1.glide; break; case synthv1::DCO1_ENVTIME: pParamPort = &m_dco1.envtime; break; + case synthv1::DCF1_ENABLED: pParamPort = &m_dcf1.enabled; break; case synthv1::DCF1_CUTOFF: pParamPort = &m_dcf1.cutoff; break; case synthv1::DCF1_RESO: pParamPort = &m_dcf1.reso; break; case synthv1::DCF1_TYPE: pParamPort = &m_dcf1.type; break; @@ -1311,6 +1383,7 @@ case synthv1::DCF1_DECAY: pParamPort = &m_dcf1.env.decay; break; case synthv1::DCF1_SUSTAIN: pParamPort = &m_dcf1.env.sustain; break; case synthv1::DCF1_RELEASE: pParamPort = &m_dcf1.env.release; break; + case synthv1::LFO1_ENABLED: pParamPort = &m_lfo1.enabled; break; case synthv1::LFO1_SHAPE: pParamPort = &m_lfo1.shape; break; case synthv1::LFO1_WIDTH: pParamPort = &m_lfo1.width; break; case synthv1::LFO1_BPM: pParamPort = &m_lfo1.bpm; break; @@ -1359,6 +1432,7 @@ case synthv1::DCO2_TUNING: pParamPort = &m_dco2.tuning; break; case synthv1::DCO2_GLIDE: pParamPort = &m_dco2.glide; break; case synthv1::DCO2_ENVTIME: pParamPort = &m_dco2.envtime; break; + case synthv1::DCF2_ENABLED: pParamPort = &m_dcf2.enabled; break; case synthv1::DCF2_CUTOFF: pParamPort = &m_dcf2.cutoff; break; case synthv1::DCF2_RESO: pParamPort = &m_dcf2.reso; break; case synthv1::DCF2_TYPE: pParamPort = &m_dcf2.type; break; @@ -1368,6 +1442,7 @@ case synthv1::DCF2_DECAY: pParamPort = &m_dcf2.env.decay; break; case synthv1::DCF2_SUSTAIN: pParamPort = &m_dcf2.env.sustain; break; case synthv1::DCF2_RELEASE: pParamPort = &m_dcf2.env.release; break; + case synthv1::LFO2_ENABLED: pParamPort = &m_lfo2.enabled; break; case synthv1::LFO2_SHAPE: pParamPort = &m_lfo2.shape; break; case synthv1::LFO2_WIDTH: pParamPort = &m_lfo2.width; break; case synthv1::LFO2_BPM: pParamPort = &m_lfo2.bpm; break; @@ -1425,6 +1500,8 @@ case synthv1::REV1_WIDTH: pParamPort = &m_rev.width; break; case synthv1::DYN1_COMPRESS: pParamPort = &m_dyn.compress; break; case synthv1::DYN1_LIMITER: pParamPort = &m_dyn.limiter; break; + case synthv1::KEY1_LOW: pParamPort = &m_key.low; break; + case synthv1::KEY1_HIGH: pParamPort = &m_key.high; break; default: break; } @@ -1491,14 +1568,20 @@ if (++i >= size) break; - // channel filter - if (!on1 && !on2) - continue; - + // channel value const int value = (data[i] & 0x7f); + // channel/controller filter + if (!on1 && !on2) { + if (status == 0xb0) + m_controls.process_enqueue(channel, key, value); + continue; + } + // note on if (status == 0x90 && value > 0) { + if (!m_key.is_note(key)) + continue; synthv1_voice *pv; // synth 1 if (on1) { @@ -1512,7 +1595,7 @@ m_lfo1.env.note_off_fast(&pv->lfo1_env); m_dca1.env.note_off_fast(&pv->dca1_env); if (++n1 > 1) { // there shall be only one - m_note1[pv->note1] = NULL; + m_note1[pv->note1] = nullptr; pv->note1 = -1; } } @@ -1525,7 +1608,7 @@ m_dcf1.env.note_off_fast(&pv->dcf1_env); m_lfo1.env.note_off_fast(&pv->lfo1_env); m_dca1.env.note_off_fast(&pv->dca1_env); - m_note1[pv->note1] = NULL; + m_note1[pv->note1] = nullptr; pv->note1 = -1; } } @@ -1541,7 +1624,7 @@ m_lfo2.env.note_off_fast(&pv->lfo2_env); m_dca2.env.note_off_fast(&pv->dca2_env); if (++n2 > 1) { // there shall be only one - m_note2[pv->note2] = NULL; + m_note2[pv->note2] = nullptr; pv->note2 = -1; } } @@ -1554,7 +1637,7 @@ m_dcf2.env.note_off_fast(&pv->dcf2_env); m_lfo2.env.note_off_fast(&pv->lfo2_env); m_dca2.env.note_off_fast(&pv->dca2_env); - m_note2[pv->note2] = NULL; + m_note2[pv->note2] = nullptr; pv->note2 = -1; } } @@ -1577,56 +1660,66 @@ m_def1.pressure.value_ptr(), &m_ctl1.pressure, &pv->pre1); // frequencies - const float note1 = float(key) - + *m_dco1.octave * OCTAVE_SCALE + const float dco1_tuning + = *m_dco1.octave * OCTAVE_SCALE + *m_dco1.tuning * TUNING_SCALE; - const float detune1 + const float dco1_detune = *m_dco1.detune * DETUNE_SCALE; + const float dco1_freq + = m_freqs[key] * synthv1_freq2(dco1_tuning); + pv->dco1_freq1 = dco1_freq; + pv->dco1_freq2 = dco1_freq; // syncs if (*m_dco1.sync1 > 0.5f) { - pv->dco1_freq2 = synthv1_freq(note1); - pv->dco1_osc2.sync(&pv->dco1_osc1); + pv->dco12.sync(&pv->dco11); } else { - pv->dco1_freq2 = synthv1_freq(note1 + detune1); - pv->dco1_osc2.sync(NULL); + pv->dco1_freq2 *= synthv1_freq2(+ dco1_detune); + pv->dco12.sync(nullptr); } if (*m_dco1.sync2 > 0.5f) { - pv->dco1_freq1 = synthv1_freq(note1); - pv->dco1_osc1.sync(&pv->dco1_osc2); + pv->dco11.sync(&pv->dco12); } else { - pv->dco1_freq1 = synthv1_freq(note1 - detune1); - pv->dco1_osc1.sync(NULL); + pv->dco1_freq1 *= synthv1_freq2(- dco1_detune); + pv->dco11.sync(nullptr); } // phases - const float phase1 = *m_dco1.phase * PHASE_SCALE; - pv->dco1_sample1 = pv->dco1_osc1.start( 0.0f, pv->dco1_freq1); - pv->dco1_sample2 = pv->dco1_osc2.start(phase1, pv->dco1_freq2); + const float dco1_phase = *m_dco1.phase * PHASE_SCALE; + pv->dco1_sample1 = pv->dco11.start( 0.0f, pv->dco1_freq1); + pv->dco1_sample2 = pv->dco12.start(dco1_phase, pv->dco1_freq2); // filters - const int type1 = int(*m_dcf1.type); - pv->dcf11.reset(synthv1_filter1::Type(type1)); - pv->dcf12.reset(synthv1_filter1::Type(type1)); - pv->dcf13.reset(synthv1_filter2::Type(type1)); - pv->dcf14.reset(synthv1_filter2::Type(type1)); - pv->dcf15.reset(synthv1_filter3::Type(type1)); - pv->dcf16.reset(synthv1_filter3::Type(type1)); + const int dcf1_type = int(*m_dcf1.type); + pv->dcf11.reset(synthv1_filter1::Type(dcf1_type)); + pv->dcf12.reset(synthv1_filter1::Type(dcf1_type)); + pv->dcf13.reset(synthv1_filter2::Type(dcf1_type)); + pv->dcf14.reset(synthv1_filter2::Type(dcf1_type)); + pv->dcf15.reset(synthv1_filter3::Type(dcf1_type)); + pv->dcf16.reset(synthv1_filter3::Type(dcf1_type)); // formant filters - const float cutoff1 = *m_dcf1.cutoff; - const float reso1 = *m_dcf1.reso; - pv->dcf17.reset_filters(cutoff1, reso1); - pv->dcf18.reset_filters(cutoff1, reso1); + const float dcf1_cutoff = *m_dcf1.cutoff; + const float dcf1_reso = *m_dcf1.reso; + pv->dcf17.reset_filters(dcf1_cutoff, dcf1_reso); + pv->dcf18.reset_filters(dcf1_cutoff, dcf1_reso); // envelopes m_dcf1.env.start(&pv->dcf1_env); m_lfo1.env.start(&pv->lfo1_env); m_dca1.env.start(&pv->dca1_env); // lfos - const float pshift1 - = (*m_lfo1.sync > 0.0f ? m_phasor.pshift() : 0.0f); - pv->lfo1_sample = pv->lfo1_osc.start(pshift1); + const float lfo1_pshift + = (m_lfo1.psync ? m_lfo1.psync->lfo1.pshift() : 0.0f); + pv->lfo1_sample = pv->lfo1.start(lfo1_pshift); + if (*m_lfo1.sync > 0.0f && m_lfo1.psync == nullptr) + m_lfo1.psync = pv; // glides (portamento) - const float frames1 + const float dco1_frames = uint32_t(*m_dco1.glide * *m_dco1.glide * m_srate); - pv->dco1_glide1.reset(frames1, pv->dco1_freq1); - pv->dco1_glide2.reset(frames1, pv->dco1_freq2); + pv->dco1_glide1.reset(dco1_frames, pv->dco1_freq1); + pv->dco1_glide2.reset(dco1_frames, pv->dco1_freq2); + // panning + pv->out1_panning = 0.0f; + pv->out1_pan.reset(&pv->out1_panning); + // volume + pv->out1_volume = 0.0f; + pv->out1_vol.reset(&pv->out1_volume); // sustain pv->sustain1 = false; // allocated @@ -1646,65 +1739,78 @@ m_def2.pressure.value_ptr(), &m_ctl2.pressure, &pv->pre2); // frequencies - const float note2 = float(key) - + *m_dco2.octave * OCTAVE_SCALE + const float dco2_tuning + = *m_dco2.octave * OCTAVE_SCALE + *m_dco2.tuning * TUNING_SCALE; - const float detune2 + const float dco2_detune = *m_dco2.detune * DETUNE_SCALE; + const float dco2_freq + = m_freqs[key] * synthv1_freq2(dco2_tuning); + pv->dco2_freq1 = dco2_freq; + pv->dco2_freq2 = dco2_freq; // syncs if (*m_dco2.sync1 > 0.5f) { - pv->dco2_freq2 = synthv1_freq(note2); - pv->dco2_osc2.sync(&pv->dco2_osc1); + pv->dco22.sync(&pv->dco21); } else { - pv->dco2_freq2 = synthv1_freq(note2 + detune2); - pv->dco2_osc2.sync(NULL); + pv->dco2_freq2 *= synthv1_freq2(+ dco2_detune); + pv->dco22.sync(nullptr); } if (*m_dco2.sync2 > 0.5f) { - pv->dco2_freq1 = synthv1_freq(note2); - pv->dco2_osc1.sync(&pv->dco2_osc2); + pv->dco21.sync(&pv->dco22); } else { - pv->dco2_freq1 = synthv1_freq(note2 - detune2); - pv->dco2_osc1.sync(NULL); + pv->dco2_freq1 *= synthv1_freq2(- dco2_detune); + pv->dco21.sync(nullptr); } // phases - const float phase2 = *m_dco2.phase * PHASE_SCALE; - pv->dco2_sample1 = pv->dco2_osc1.start( 0.0f, pv->dco2_freq1); - pv->dco2_sample2 = pv->dco2_osc2.start(phase2, pv->dco2_freq2); + const float dco2_phase = *m_dco2.phase * PHASE_SCALE; + pv->dco2_sample1 = pv->dco21.start( 0.0f, pv->dco2_freq1); + pv->dco2_sample2 = pv->dco22.start(dco2_phase, pv->dco2_freq2); // filters - const int type2 = int(*m_dcf2.type); - pv->dcf21.reset(synthv1_filter1::Type(type2)); - pv->dcf22.reset(synthv1_filter1::Type(type2)); - pv->dcf23.reset(synthv1_filter2::Type(type2)); - pv->dcf24.reset(synthv1_filter2::Type(type2)); - pv->dcf25.reset(synthv1_filter3::Type(type2)); - pv->dcf26.reset(synthv1_filter3::Type(type2)); + const int dcf2_type = int(*m_dcf2.type); + pv->dcf21.reset(synthv1_filter1::Type(dcf2_type)); + pv->dcf22.reset(synthv1_filter1::Type(dcf2_type)); + pv->dcf23.reset(synthv1_filter2::Type(dcf2_type)); + pv->dcf24.reset(synthv1_filter2::Type(dcf2_type)); + pv->dcf25.reset(synthv1_filter3::Type(dcf2_type)); + pv->dcf26.reset(synthv1_filter3::Type(dcf2_type)); // formant filters - const float cutoff2 = *m_dcf2.cutoff; - const float reso2 = *m_dcf2.reso; - pv->dcf27.reset_filters(cutoff2, reso2); - pv->dcf28.reset_filters(cutoff2, reso2); + const float dcf2_cutoff = *m_dcf2.cutoff; + const float dcf2_reso = *m_dcf2.reso; + pv->dcf27.reset_filters(dcf2_cutoff, dcf2_reso); + pv->dcf28.reset_filters(dcf2_cutoff, dcf2_reso); // envelopes m_dcf2.env.start(&pv->dcf2_env); m_lfo2.env.start(&pv->lfo2_env); m_dca2.env.start(&pv->dca2_env); // lfos - const float pshift2 - = (*m_lfo2.sync > 0.0f ? m_phasor.pshift() : 0.0f); - pv->lfo2_sample = pv->lfo2_osc.start(pshift2); + const float lfo2_pshift + = (m_lfo2.psync ? m_lfo2.psync->lfo2.pshift() : 0.0f); + pv->lfo2_sample = pv->lfo2.start(lfo2_pshift); + if (*m_lfo2.sync > 0.0f && m_lfo2.psync == nullptr) + m_lfo2.psync = pv; // glides (portamento) - const float frames2 + const float dco2_frames = uint32_t(*m_dco2.glide * *m_dco2.glide * m_srate); - pv->dco2_glide1.reset(frames2, pv->dco2_freq1); - pv->dco2_glide2.reset(frames2, pv->dco2_freq2); + pv->dco2_glide1.reset(dco2_frames, pv->dco2_freq1); + pv->dco2_glide2.reset(dco2_frames, pv->dco2_freq2); // sustain pv->sustain2 = false; + // panning + pv->out2_panning = 0.0f; + pv->out2_pan.reset(&pv->out2_panning); + // volume + pv->out2_volume = 0.0f; + pv->out2_vol.reset(&pv->out2_volume); // allocated m_note2[key] = pv; } } + m_midi_in.schedule_note(key, value); } // note off else if (status == 0x80 || (status == 0x90 && value == 0)) { + if (!m_key.is_note(key)) + continue; synthv1_voice *pv; // synth 1 if (on1) { @@ -1718,7 +1824,7 @@ m_dcf1.env.note_off(&pv->dcf1_env); m_lfo1.env.note_off(&pv->lfo1_env); } - m_note1[pv->note1] = NULL; + m_note1[pv->note1] = nullptr; pv->note1 = -1; // mono legato? if (*m_def1.mono > 0.0f) { @@ -1746,7 +1852,7 @@ m_dcf2.env.note_off(&pv->dcf2_env); m_lfo2.env.note_off(&pv->lfo2_env); } - m_note2[pv->note2] = NULL; + m_note2[pv->note2] = nullptr; pv->note2 = -1; // mono legato? if (*m_def2.mono > 0.0f) { @@ -1762,9 +1868,12 @@ } } } + m_midi_in.schedule_note(key, 0); } // key pressure/poly.aftertouch else if (status == 0xa0) { + if (!m_key.is_note(key)) + continue; const float pre = float(value) / 127.0f; synthv1_voice *pv; // synth 1 @@ -1849,7 +1958,6 @@ if (on1) m_ctl1.pitchbend = synthv1_pow2f(*m_def1.pitchbend * pitchbend); if (on2) m_ctl2.pitchbend = synthv1_pow2f(*m_def2.pitchbend * pitchbend); } - } // process pending controllers... @@ -1886,9 +1994,9 @@ synthv1_voice *pv = m_play_list.next(); while (pv) { if (pv->note1 >= 0) - m_note1[pv->note1] = NULL; + m_note1[pv->note1] = nullptr; if (pv->note2 >= 0) - m_note2[pv->note2] = NULL; + m_note2[pv->note2] = nullptr; free_voice(pv); pv = m_play_list.next(); } @@ -1898,10 +2006,10 @@ dco2_last1 = 0.0f; dco2_last2 = 0.0f; - m_aux1.reset(); - m_aux2.reset(); + m_lfo1.psync = nullptr; + m_lfo2.psync = nullptr; - m_direct_chan = m_direct_note = m_direct_vel = -1; + m_direct_note = 0; } void synthv1_impl::allNotesOff_1 (void) @@ -1912,7 +2020,7 @@ m_dca1.env.note_off_fast(&pv->dca1_env); m_dcf1.env.note_off_fast(&pv->dcf1_env); m_lfo1.env.note_off_fast(&pv->lfo1_env); - m_note1[pv->note1] = NULL; + m_note1[pv->note1] = nullptr; pv->note1 = -1; } pv = pv->next(); @@ -1920,8 +2028,6 @@ dco1_last1 = 0.0f; dco1_last2 = 0.0f; - - m_aux1.reset(); } @@ -1933,7 +2039,7 @@ m_dca2.env.note_off_fast(&pv->dca2_env); m_dcf2.env.note_off_fast(&pv->dcf2_env); m_lfo2.env.note_off_fast(&pv->lfo2_env); - m_note2[pv->note2] = NULL; + m_note2[pv->note2] = nullptr; pv->note2 = -1; } pv = pv->next(); @@ -1941,8 +2047,6 @@ dco2_last1 = 0.0f; dco2_last2 = 0.0f; - - m_aux2.reset(); } @@ -1958,7 +2062,7 @@ m_dca1.env.note_off(&pv->dca1_env); m_dcf1.env.note_off(&pv->dcf1_env); m_lfo1.env.note_off(&pv->lfo1_env); - m_note1[pv->note1] = NULL; + m_note1[pv->note1] = nullptr; pv->note1 = -1; } } @@ -1977,7 +2081,7 @@ m_dca2.env.note_off(&pv->dca2_env); m_dcf2.env.note_off(&pv->dcf2_env); m_lfo2.env.note_off(&pv->lfo2_env); - m_note2[pv->note2] = NULL; + m_note2[pv->note2] = nullptr; pv->note2 = -1; } } @@ -2011,14 +2115,19 @@ // direct note-on triggered on next cycle... void synthv1_impl::directNoteOn ( int note, int vel ) { - if (vel > 0) { + if (vel > 0 && m_nvoices >= MAX_DIRECT_NOTES) + return; + + const uint32_t i = m_direct_note; + if (i < MAX_DIRECT_NOTES) { const int ch1 = int(*m_def1.channel); const int ch2 = int(*m_def2.channel); - m_direct_chan = (ch1 > 0 ? ch1 - 1 : (ch2 > 0 ? ch2 - 1 : 0)) & 0x0f; - m_direct_note = note; - m_direct_vel = vel; - } else { - m_direct_vel = 0; + const int chan = (ch1 > 0 ? ch1 - 1 : (ch2 > 0 ? ch2 - 1 : 0)) & 0x0f; + direct_note& data = m_direct_notes[i]; + data.status = (vel > 0 ? 0x90 : 0x80) | chan; + data.note = note; + data.vel = vel; + ++m_direct_note; } } @@ -2039,6 +2148,113 @@ } +// Micro-tuning support + +void synthv1_impl::setTuningEnabled ( bool enabled ) +{ + m_tun.enabled = enabled; +} + +bool synthv1_impl::isTuningEnabled (void) const +{ + return m_tun.enabled; +} + + +void synthv1_impl::setTuningRefPitch ( float refPitch ) +{ + m_tun.refPitch = refPitch; +} + +float synthv1_impl::tuningRefPitch (void) const +{ + return m_tun.refPitch; +} + + +void synthv1_impl::setTuningRefNote ( int refNote ) +{ + m_tun.refNote = refNote; +} + +int synthv1_impl::tuningRefNote (void) const +{ + return m_tun.refNote; +} + + +void synthv1_impl::setTuningScaleFile ( const char *pszScaleFile ) +{ + m_tun.scaleFile = QString::fromUtf8(pszScaleFile); +} + +const char *synthv1_impl::tuningScaleFile (void) const +{ + return m_tun.scaleFile.toUtf8().constData(); +} + + +void synthv1_impl::setTuningKeyMapFile ( const char *pszKeyMapFile ) +{ + m_tun.keyMapFile = QString::fromUtf8(pszKeyMapFile); +} + +const char *synthv1_impl::tuningKeyMapFile (void) const +{ + return m_tun.keyMapFile.toUtf8().constData(); +} + + +void synthv1_impl::resetTuning (void) +{ + if (m_tun.enabled) { + // Instance micro-tuning, possibly from Scala keymap and scale files... + synthv1_tuning tuning( + m_tun.refPitch, + m_tun.refNote); + if (m_tun.keyMapFile.isEmpty()) + if (!m_tun.keyMapFile.isEmpty()) + tuning.loadKeyMapFile(m_tun.keyMapFile); + if (!m_tun.scaleFile.isEmpty()) + tuning.loadScaleFile(m_tun.scaleFile); + for (int note = 0; note < MAX_NOTES; ++note) + m_freqs[note] = tuning.noteToPitch(note); + // Done instance tuning. + } + else + if (m_config.bTuningEnabled) { + // Global/config micro-tuning, possibly from Scala keymap and scale files... + synthv1_tuning tuning( + m_config.fTuningRefPitch, + m_config.iTuningRefNote); + if (!m_config.sTuningKeyMapFile.isEmpty()) + tuning.loadKeyMapFile(m_config.sTuningKeyMapFile); + if (!m_config.sTuningScaleFile.isEmpty()) + tuning.loadScaleFile(m_config.sTuningScaleFile); + for (int note = 0; note < MAX_NOTES; ++note) + m_freqs[note] = tuning.noteToPitch(note); + // Done global/config tuning. + } else { + // Native/default tuning, 12-tone equal temperament western standard... + for (int note = 0; note < MAX_NOTES; ++note) + m_freqs[note] = synthv1_freq(note); + // Done native/default tuning. + } +} + + +// all stabilize + +void synthv1_impl::stabilize (void) +{ + for (int i = 0; i < synthv1::NUM_PARAMS; ++i) { + synthv1_port *pParamPort = paramPort(synthv1::ParamIndex(i)); + if (pParamPort) + pParamPort->tick(synthv1_port2::NSTEP); + } +} + + // all reset clear void synthv1_impl::reset (void) @@ -2046,40 +2262,37 @@ m_vol1.reset( m_out1.volume.value_ptr(), m_dca1.volume.value_ptr(), - &m_ctl1.volume, &m_aux1.volume); + &m_ctl1.volume); m_pan1.reset( m_out1.panning.value_ptr(), - &m_ctl1.panning, - &m_aux1.panning); + &m_ctl1.panning); m_wid1.reset( m_out1.width.value_ptr()); m_vol2.reset( m_out2.volume.value_ptr(), m_dca2.volume.value_ptr(), - &m_ctl2.volume, - &m_aux2.volume); + &m_ctl2.volume); m_pan2.reset( m_out2.panning.value_ptr(), - &m_ctl2.panning, - &m_aux2.panning); + &m_ctl2.panning); m_wid2.reset( m_out2.width.value_ptr()); - + // flangers - if (m_flanger == NULL) + if (m_flanger == nullptr) m_flanger = new synthv1_fx_flanger [m_nchannels]; // phasers - if (m_phaser == NULL) + if (m_phaser == nullptr) m_phaser = new synthv1_fx_phaser [m_nchannels]; // delays - if (m_delay == NULL) + if (m_delay == nullptr) m_delay = new synthv1_fx_delay [m_nchannels]; // compressors - if (m_comp == NULL) + if (m_comp == nullptr) m_comp = new synthv1_fx_comp [m_nchannels]; // reverbs @@ -2111,6 +2324,8 @@ void synthv1_impl::process ( float **ins, float **outs, uint32_t nframes ) { + if (!m_running) return; + float *v_outs[m_nchannels]; float *v_sfxs[m_nchannels]; @@ -2120,32 +2335,34 @@ uint16_t k; for (k = 0; k < m_nchannels; ++k) { - ::memcpy(m_sfxs[k], ins[k], nframes * sizeof(float)); - ::memset(outs[k], 0, nframes * sizeof(float)); + ::memset(m_sfxs[k], 0, nframes * sizeof(float)); + ::memcpy(outs[k], ins[k], nframes * sizeof(float)); } // process direct note on/off... - if (m_direct_chan >= 0 && m_direct_note >= 0 && m_direct_vel >= 0) { - struct note_data { uint8_t status, note, vel; } data; - data.status = (m_direct_vel > 0 ? 0x90 : 0x80) | m_direct_chan; - data.note = m_direct_note; - data.vel = m_direct_vel; + while (m_direct_note > 0) { + const direct_note& data + = m_direct_notes[--m_direct_note]; process_midi((uint8_t *) &data, sizeof(data)); - if (m_direct_vel == 0) { - m_direct_chan = -1; - m_direct_note = -1; - } - m_direct_vel = -1; } // controls - const float lfo1_freq - = get_bpm(*m_lfo1.bpm) / (60.01f - *m_lfo1.rate * 60.0f); - const float lfo2_freq - = get_bpm(*m_lfo2.bpm) / (60.01f - *m_lfo2.rate * 60.0f); - const float modwheel1 = m_ctl1.modwheel + PITCH_SCALE * *m_lfo1.pitch; - const float modwheel2 = m_ctl2.modwheel + PITCH_SCALE * *m_lfo2.pitch; + const bool lfo1_enabled = (*m_lfo1.enabled > 0.0f); + const bool lfo2_enabled = (*m_lfo2.enabled > 0.0f); + + const float lfo1_freq = (lfo1_enabled + ? get_bpm(*m_lfo1.bpm) / (60.01f - *m_lfo1.rate * 60.0f) : 0.0f); + const float lfo2_freq = (lfo2_enabled + ? get_bpm(*m_lfo2.bpm) / (60.01f - *m_lfo2.rate * 60.0f) : 0.0f); + + const float modwheel1 = (lfo1_enabled + ? m_ctl1.modwheel + PITCH_SCALE * *m_lfo1.pitch : 0.0f); + const float modwheel2 = (lfo2_enabled + ? m_ctl2.modwheel + PITCH_SCALE * *m_lfo2.pitch : 0.0f); + + const bool dcf1_enabled = (*m_dcf1.enabled > 0.0f); + const bool dcf2_enabled = (*m_dcf2.enabled > 0.0f); const float fxsend1 = *m_out1.fxsend * *m_out1.fxsend; const float fxsend2 = *m_out2.fxsend * *m_out2.fxsend; @@ -2172,11 +2389,15 @@ dco2_wave2.reset_test( synthv1_wave::Shape(*m_dco2.shape2), *m_dco2.width2, *m_dco2.bandl2 > 0.0f); - - lfo1_wave.reset_test( - synthv1_wave::Shape(*m_lfo1.shape), *m_lfo1.width); - lfo2_wave.reset_test( - synthv1_wave::Shape(*m_lfo2.shape), *m_lfo2.width); + + if (lfo1_enabled) { + lfo1_wave.reset_test( + synthv1_wave::Shape(*m_lfo1.shape), *m_lfo1.width); + } + if (lfo2_enabled) { + lfo2_wave.reset_test( + synthv1_wave::Shape(*m_lfo2.shape), *m_lfo2.width); + } // per voice @@ -2225,35 +2446,43 @@ // generators - const float lfo1_env = pv->lfo1_env.tick(); - const float lfo2_env = pv->lfo2_env.tick(); - - const float lfo1 = pv->lfo1_sample * lfo1_env; - const float lfo2 = pv->lfo2_sample * lfo2_env; + const float lfo1_env + = (lfo1_enabled ? pv->lfo1_env.tick() : 0.0f); + const float lfo2_env + = (lfo1_enabled ? pv->lfo2_env.tick() : 0.0f); + + const float lfo1 + = (lfo1_enabled ? pv->lfo1_sample * lfo1_env : 0.0f); + const float lfo2 + = (lfo2_enabled ? pv->lfo2_sample * lfo2_env : 0.0f); const float dco11 = pv->dco1_sample1 * pv->dco1_bal.value(j, 0); const float dco12 = pv->dco1_sample2 * pv->dco1_bal.value(j, 1); const float dco21 = pv->dco2_sample1 * pv->dco2_bal.value(j, 0); const float dco22 = pv->dco2_sample2 * pv->dco2_bal.value(j, 1); - pv->dco1_sample1 = pv->dco1_osc1.sample(pv->dco1_freq1 + pv->dco1_sample1 = pv->dco11.sample(pv->dco1_freq1 * (m_ctl1.pitchbend + modwheel1 * lfo1) + pv->dco1_glide1.tick()); - pv->dco1_sample2 = pv->dco1_osc2.sample(pv->dco1_freq2 + pv->dco1_sample2 = pv->dco12.sample(pv->dco1_freq2 * (m_ctl1.pitchbend + modwheel1 * lfo1) + pv->dco1_glide2.tick()); - pv->dco2_sample1 = pv->dco2_osc1.sample(pv->dco2_freq1 + pv->dco2_sample1 = pv->dco21.sample(pv->dco2_freq1 * (m_ctl2.pitchbend + modwheel2 * lfo2) + pv->dco2_glide1.tick()); - pv->dco2_sample2 = pv->dco2_osc2.sample(pv->dco2_freq2 + pv->dco2_sample2 = pv->dco22.sample(pv->dco2_freq2 * (m_ctl2.pitchbend + modwheel2 * lfo2) + pv->dco2_glide2.tick()); - pv->lfo1_sample = pv->lfo1_osc.sample(lfo1_freq - * (1.0f + SWEEP_SCALE * *m_lfo1.sweep * lfo1_env)); - pv->lfo2_sample = pv->lfo2_osc.sample(lfo2_freq - * (1.0f + SWEEP_SCALE * *m_lfo2.sweep * lfo2_env)); + if (lfo1_enabled) { + pv->lfo1_sample = pv->lfo1.sample(lfo1_freq + * (1.0f + SWEEP_SCALE * *m_lfo1.sweep * lfo1_env)); + } + if (lfo2_enabled) { + pv->lfo2_sample = pv->lfo2.sample(lfo2_freq + * (1.0f + SWEEP_SCALE * *m_lfo2.sweep * lfo2_env)); + } // ring modulators @@ -2269,58 +2498,60 @@ // filters - const float env1 = 0.5f * (1.0f + vel1 - * *m_dcf1.envelope * pv->dcf1_env.tick()); - const float cutoff1 = synthv1_sigmoid_1(*m_dcf1.cutoff - * env1 * (1.0f + *m_lfo1.cutoff * lfo1)); - const float reso1 = synthv1_sigmoid_1(*m_dcf1.reso - * env1 * (1.0f + *m_lfo1.reso * lfo1)); - - switch (int(*m_dcf1.slope)) { - case 3: // Formant - mod11 = pv->dcf17.output(mod11, cutoff1, reso1); - mod12 = pv->dcf18.output(mod12, cutoff1, reso1); - break; - case 2: // Biquad - mod11 = pv->dcf15.output(mod11, cutoff1, reso1); - mod12 = pv->dcf16.output(mod12, cutoff1, reso1); - break; - case 1: // 24db/octave - mod11 = pv->dcf13.output(mod11, cutoff1, reso1); - mod12 = pv->dcf14.output(mod12, cutoff1, reso1); - break; - case 0: // 12db/octave - default: - mod11 = pv->dcf11.output(mod11, cutoff1, reso1); - mod12 = pv->dcf12.output(mod12, cutoff1, reso1); - break; + if (dcf1_enabled) { + const float env1 = 0.5f * (1.0f + vel1 + * *m_dcf1.envelope * pv->dcf1_env.tick()); + const float cutoff1 = synthv1_sigmoid_1(*m_dcf1.cutoff + * env1 * (1.0f + *m_lfo1.cutoff * lfo1)); + const float reso1 = synthv1_sigmoid_1(*m_dcf1.reso + * env1 * (1.0f + *m_lfo1.reso * lfo1)); + switch (int(*m_dcf1.slope)) { + case 3: // Formant + mod11 = pv->dcf17.output(mod11, cutoff1, reso1); + mod12 = pv->dcf18.output(mod12, cutoff1, reso1); + break; + case 2: // Biquad + mod11 = pv->dcf15.output(mod11, cutoff1, reso1); + mod12 = pv->dcf16.output(mod12, cutoff1, reso1); + break; + case 1: // 24db/octave + mod11 = pv->dcf13.output(mod11, cutoff1, reso1); + mod12 = pv->dcf14.output(mod12, cutoff1, reso1); + break; + case 0: // 12db/octave + default: + mod11 = pv->dcf11.output(mod11, cutoff1, reso1); + mod12 = pv->dcf12.output(mod12, cutoff1, reso1); + break; + } } - const float env2 = 0.5f * (1.0f + vel2 - * *m_dcf2.envelope * pv->dcf2_env.tick()); - const float cutoff2 = synthv1_sigmoid_1(*m_dcf2.cutoff - * env2 * (1.0f + *m_lfo2.cutoff * lfo2)); - const float reso2 = synthv1_sigmoid_1(*m_dcf2.reso - * env2 * (1.0f + *m_lfo2.reso * lfo2)); - - switch (int(*m_dcf2.slope)) { - case 3: // Formant - mod21 = pv->dcf27.output(mod21, cutoff2, reso2); - mod22 = pv->dcf28.output(mod22, cutoff2, reso2); - break; - case 2: // Biquad - mod21 = pv->dcf25.output(mod21, cutoff2, reso2); - mod22 = pv->dcf26.output(mod22, cutoff2, reso2); - break; - case 1: // 24db/octave - mod21 = pv->dcf23.output(mod21, cutoff2, reso2); - mod22 = pv->dcf24.output(mod22, cutoff2, reso2); - break; - case 0: // 12db/octave - default: - mod21 = pv->dcf21.output(mod21, cutoff2, reso2); - mod22 = pv->dcf22.output(mod22, cutoff2, reso2); - break; + if (dcf2_enabled) { + const float env2 = 0.5f * (1.0f + vel2 + * *m_dcf2.envelope * pv->dcf2_env.tick()); + const float cutoff2 = synthv1_sigmoid_1(*m_dcf2.cutoff + * env2 * (1.0f + *m_lfo2.cutoff * lfo2)); + const float reso2 = synthv1_sigmoid_1(*m_dcf2.reso + * env2 * (1.0f + *m_lfo2.reso * lfo2)); + switch (int(*m_dcf2.slope)) { + case 3: // Formant + mod21 = pv->dcf27.output(mod21, cutoff2, reso2); + mod22 = pv->dcf28.output(mod22, cutoff2, reso2); + break; + case 2: // Biquad + mod21 = pv->dcf25.output(mod21, cutoff2, reso2); + mod22 = pv->dcf26.output(mod22, cutoff2, reso2); + break; + case 1: // 24db/octave + mod21 = pv->dcf23.output(mod21, cutoff2, reso2); + mod22 = pv->dcf24.output(mod22, cutoff2, reso2); + break; + case 0: // 12db/octave + default: + mod21 = pv->dcf21.output(mod21, cutoff2, reso2); + mod22 = pv->dcf22.output(mod22, cutoff2, reso2); + break; + } } // volumes @@ -2329,24 +2560,30 @@ const float mid1 = 0.5f * (mod11 + mod12); const float sid1 = 0.5f * (mod11 - mod12); const float vol1 = vel1 * m_vol1.value(j) - * pv->dca1_env.tick(); + * pv->dca1_env.tick() + * pv->out1_vol.value(j); const float wid2 = m_wid2.value(j); const float mid2 = 0.5f * (mod21 + mod22); const float sid2 = 0.5f * (mod21 - mod22); const float vol2 = vel2 * m_vol2.value(j) - * pv->dca2_env.tick(); + * pv->dca2_env.tick() + * pv->out2_vol.value(j); // outputs - const float out11 - = vol1 * (mid1 + sid1 * wid1) * m_pan1.value(j, 0); - const float out12 - = vol1 * (mid1 - sid1 * wid1) * m_pan1.value(j, 1); - const float out21 - = vol2 * (mid2 + sid2 * wid2) * m_pan2.value(j, 0); - const float out22 - = vol2 * (mid2 - sid2 * wid2) * m_pan2.value(j, 1); + const float out11 = vol1 * (mid1 + sid1 * wid1) + * pv->out1_pan.value(j, 0) + * m_pan1.value(j, 0); + const float out12 = vol1 * (mid1 - sid1 * wid1) + * pv->out1_pan.value(j, 1) + * m_pan1.value(j, 1); + const float out21 = vol2 * (mid2 + sid2 * wid2) + * pv->out2_pan.value(j, 0) + * m_pan2.value(j, 0); + const float out22 = vol2 * (mid2 - sid2 * wid2) + * pv->out2_pan.value(j, 1) + * m_pan2.value(j, 1); for (k = 0; k < m_nchannels; ++k) { const float dry1 = (k & 1 ? out12 : out11); @@ -2362,10 +2599,10 @@ if (j == 0) { pv->dco1_balance = lfo1 * *m_lfo1.balance; pv->dco2_balance = lfo2 * *m_lfo2.balance; - m_aux1.panning = lfo1 * *m_lfo1.panning; - m_aux1.volume = lfo1 * *m_lfo1.volume + 1.0f; - m_aux2.panning = lfo2 * *m_lfo2.panning; - m_aux2.volume = lfo2 * *m_lfo2.volume + 1.0f; + pv->out1_panning = lfo1 * *m_lfo1.panning; + pv->out2_panning = lfo2 * *m_lfo2.panning; + pv->out1_volume = lfo1 * *m_lfo1.volume + 1.0f; + pv->out2_volume = lfo2 * *m_lfo2.volume + 1.0f; } } @@ -2379,6 +2616,12 @@ pv->dca1_pre.process(ngen); pv->dca2_pre.process(ngen); + pv->out1_pan.process(ngen); + pv->out2_pan.process(ngen); + + pv->out1_vol.process(ngen); + pv->out2_vol.process(ngen); + // envelope countdowns if (pv->dca1_env.running && pv->dca1_env.frames == 0) @@ -2437,27 +2680,24 @@ // output mix-down for (k = 0; k < m_nchannels; ++k) { uint32_t n; - // fx sends - float *in = m_sfxs[k]; - float *out = outs[k]; - for (n = 0; n < nframes; ++n) - *out++ += *in++; - // dynamics - in = outs[k]; + float *sfx = m_sfxs[k]; // compressor if (int(*m_dyn.compress) > 0) - m_comp[k].process(in, nframes); + m_comp[k].process(sfx, nframes); // limiter if (int(*m_dyn.limiter) > 0) { - out = in; + float *p = sfx; + float *q = sfx; for (n = 0; n < nframes; ++n) - *out++ = synthv1_sigmoid(*in++); + *q++ = synthv1_sigmoid(*p++); } + // mix-down + float *out = outs[k]; + for (n = 0; n < nframes; ++n) + *out++ += *sfx++; } // post-processing - m_phasor.process(nframes); - m_dca1.volume.tick(nframes); m_out1.width.tick(nframes); m_out1.panning.tick(nframes); @@ -2480,6 +2720,15 @@ } +// process running state... +bool synthv1_impl::running ( bool on ) +{ + const bool running = m_running; + m_running = on; + return running; +} + + //------------------------------------------------------------------------- // synthv1 - decl. // @@ -2601,6 +2850,22 @@ } +// process state + +bool synthv1::running ( bool on ) +{ + return m_pImpl->running(on); +} + + +// all stabilize + +void synthv1::stabilize (void) +{ + m_pImpl->stabilize(); +} + + // all reset clear void synthv1::reset (void) @@ -2631,4 +2896,66 @@ } +// Micro-tuning support +void synthv1::setTuningEnabled ( bool enabled ) +{ + m_pImpl->setTuningEnabled(enabled); +} + +bool synthv1::isTuningEnabled (void) const +{ + return m_pImpl->isTuningEnabled(); +} + + +void synthv1::setTuningRefPitch ( float refPitch ) +{ + m_pImpl->setTuningRefPitch(refPitch); +} + +float synthv1::tuningRefPitch (void) const +{ + return m_pImpl->tuningRefPitch(); +} + + +void synthv1::setTuningRefNote ( int refNote ) +{ + m_pImpl->setTuningRefNote(refNote); +} + +int synthv1::tuningRefNote (void) const +{ + return m_pImpl->tuningRefNote(); +} + + +void synthv1::setTuningScaleFile ( const char *pszScaleFile ) +{ + m_pImpl->setTuningScaleFile(pszScaleFile); +} + +const char *synthv1::tuningScaleFile (void) const +{ + return m_pImpl->tuningScaleFile(); +} + + +void synthv1::setTuningKeyMapFile ( const char *pszKeyMapFile ) +{ + m_pImpl->setTuningKeyMapFile(pszKeyMapFile); +} + +const char *synthv1::tuningKeyMapFile (void) const +{ + return m_pImpl->tuningKeyMapFile(); +} + + +void synthv1::resetTuning (void) +{ + m_pImpl->resetTuning(); +} + + // end of synthv1.cpp diff -Nru synthv1-0.8.6/src/synthv1_formant.cpp synthv1-0.9.10+git20190929/src/synthv1_formant.cpp --- synthv1-0.8.6/src/synthv1_formant.cpp 2017-12-20 07:56:50.309842973 +0000 +++ synthv1-0.9.10+git20190929/src/synthv1_formant.cpp 2019-09-28 23:00:43.000000000 +0000 @@ -1,7 +1,7 @@ // synthv1_formant.cpp // /**************************************************************************** - Copyright (C) 2012-2016, rncbc aka Rui Nuno Capela. All rights reserved. + Copyright (C) 2012-2019, rncbc aka Rui Nuno Capela. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License @@ -178,15 +178,15 @@ // reset method impl. -void synthv1_formant::Impl::reset_coeffs (void) +void synthv1_formant::Impl::reset_coeffs ( float cutoff, float reso ) { - const float fK = m_cutoff * float(NUM_VTABS - 1); + const float fK = cutoff * float(NUM_VTABS - 1); const uint32_t k = uint32_t(fK); const float fJ = (fK - float(k)) * float(NUM_VOWELS - 1); const uint32_t j = uint32_t(fJ); const float dJ = (fJ - float(j)); // vowel morph fraction - const float q = 4.0f * m_reso * m_reso + 1.0f; + const float q = 4.0f * reso * reso + 1.0f; const float p = 1.0f / q; // vocal/vowel formant morphing @@ -215,7 +215,7 @@ void synthv1_formant::reset_coeffs (void) { if (m_pImpl) { - m_pImpl->update(m_cutoff, m_reso); + m_pImpl->reset_coeffs(m_cutoff, m_reso); for (uint32_t i = 0; i < NUM_FORMANTS; ++i) m_filters[i].reset_coeffs(m_pImpl->coeffs(i)); } diff -Nru synthv1-0.8.6/src/synthv1_formant.h synthv1-0.9.10+git20190929/src/synthv1_formant.h --- synthv1-0.8.6/src/synthv1_formant.h 2017-12-20 07:56:50.309842973 +0000 +++ synthv1-0.9.10+git20190929/src/synthv1_formant.h 2019-09-28 23:00:43.000000000 +0000 @@ -1,7 +1,7 @@ // synthv1_formant.h // /**************************************************************************** - Copyright (C) 2012-2016, rncbc aka Rui Nuno Capela. All rights reserved. + Copyright (C) 2012-2019, rncbc aka Rui Nuno Capela. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License @@ -40,6 +40,7 @@ static const uint32_t NUM_VTABS = 5; static const uint32_t NUM_VOWELS = 5; static const uint32_t NUM_FORMANTS = 5; + static const uint32_t NUM_STEPS = 32; // 2-pole filter coeffs. struct Coeffs { float a0, b1, b2; }; @@ -59,8 +60,7 @@ // ctor. Impl(float srate = 44100.0f) - : m_srate(srate), m_cutoff(0.0f), m_reso(0.0f) - { reset_coeffs(); } + : m_srate(srate) { reset_coeffs(); } // sample-rate accessors void setSampleRate(float srate) @@ -72,41 +72,26 @@ const Coeffs& coeffs(uint32_t i) const { return m_ctabs[i]; } - // update method - void update(float cutoff = 0.5f, float reso = 0.0f) - { - if (::fabsf(m_cutoff - cutoff) > 0.001f || - ::fabsf(m_reso - reso) > 0.001f) { - m_cutoff = cutoff; - m_reso = reso; - reset_coeffs(); - } - } + // reset coeffs. method + void reset_coeffs(float cutoff = 0.5f, float reso = 0.0f); protected: // compute coeffs. for given vocal formant table void vtab_coeffs(Coeffs& coeffs, const Vtab *vtab, uint32_t i, float p); - // reset coeffs. method - void reset_coeffs(); - private: // instance members float m_srate; - // parameters - float m_cutoff; - float m_reso; - // filter coeffs. Coeffs m_ctabs[NUM_FORMANTS]; }; // ctor. synthv1_formant(Impl *pImpl = 0) - : m_pImpl(pImpl), m_cutoff(0.0f), m_reso(0.0f) + : m_pImpl(pImpl), m_cutoff(0.5f), m_reso(0.0f), m_nstep(0) { reset_coeffs(); } // reset impl. @@ -159,7 +144,6 @@ void set_value(float value) { - const uint32_t NUM_STEPS = 32; m_nstep = NUM_STEPS; m_vstep = (value - m_value) / float(m_nstep); } @@ -227,8 +211,12 @@ // update method void update(float cutoff, float reso) { + if (m_nstep > 0) + --m_nstep; + else if (::fabsf(m_cutoff - cutoff) > 0.001f || ::fabsf(m_reso - reso) > 0.001f) { + m_nstep = NUM_STEPS; m_cutoff = cutoff; m_reso = reso; reset_coeffs(); @@ -247,6 +235,9 @@ float m_cutoff; float m_reso; + // slew-rate control. + uint32_t m_nstep; + // formant filters Filter m_filters[NUM_FORMANTS]; diff -Nru synthv1-0.8.6/src/synthv1.h synthv1-0.9.10+git20190929/src/synthv1.h --- synthv1-0.8.6/src/synthv1.h 2017-12-20 07:56:50.308842973 +0000 +++ synthv1-0.9.10+git20190929/src/synthv1.h 2019-09-28 23:00:43.000000000 +0000 @@ -1,7 +1,7 @@ // synthv1.h // /**************************************************************************** - Copyright (C) 2012-2017, rncbc aka Rui Nuno Capela. All rights reserved. + Copyright (C) 2012-2019, rncbc aka Rui Nuno Capela. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License @@ -75,6 +75,7 @@ DCO1_TUNING, DCO1_GLIDE, DCO1_ENVTIME, + DCF1_ENABLED, DCF1_CUTOFF, DCF1_RESO, DCF1_TYPE, @@ -84,6 +85,7 @@ DCF1_DECAY, DCF1_SUSTAIN, DCF1_RELEASE, + LFO1_ENABLED, LFO1_SHAPE, LFO1_WIDTH, LFO1_BPM, @@ -134,6 +136,7 @@ DCO2_TUNING, DCO2_GLIDE, DCO2_ENVTIME, + DCF2_ENABLED, DCF2_CUTOFF, DCF2_RESO, DCF2_TYPE, @@ -143,6 +146,7 @@ DCF2_DECAY, DCF2_SUSTAIN, DCF2_RELEASE, + LFO2_ENABLED, LFO2_SHAPE, LFO2_WIDTH, LFO2_BPM, @@ -203,6 +207,9 @@ DYN1_COMPRESS, DYN1_LIMITER, + KEY1_LOW, + KEY1_HIGH, + NUM_PARAMS }; @@ -215,6 +222,9 @@ void setParamValue(ParamIndex index, float fValue); float paramValue(ParamIndex index) const; + bool running(bool on); + + void stabilize(); void reset(); void process_midi(uint8_t *data, uint32_t size); @@ -227,6 +237,25 @@ void directNoteOn(int note, int vel); + void setTuningEnabled(bool enabled); + bool isTuningEnabled() const; + + void setTuningRefPitch(float refPitch); + float tuningRefPitch() const; + + void setTuningRefNote(int refNote); + int tuningRefNote() const; + + void setTuningScaleFile(const char *pszScaleFile); + const char *tuningScaleFile() const; + + void setTuningKeyMapFile(const char *pszKeyMapFile); + const char *tuningKeyMapFile() const; + + void resetTuning(); + + virtual void updateTuning() = 0; + private: synthv1_impl *m_pImpl; diff -Nru synthv1-0.8.6/src/synthv1_jack.cpp synthv1-0.9.10+git20190929/src/synthv1_jack.cpp --- synthv1-0.8.6/src/synthv1_jack.cpp 2017-12-20 07:56:50.309842973 +0000 +++ synthv1-0.9.10+git20190929/src/synthv1_jack.cpp 2019-09-28 23:00:43.000000000 +0000 @@ -1,7 +1,7 @@ // synthv1_jack.cpp // /**************************************************************************** - Copyright (C) 2012-2017, rncbc aka Rui Nuno Capela. All rights reserved. + Copyright (C) 2012-2019, rncbc aka Rui Nuno Capela. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License @@ -65,7 +65,7 @@ void run() { snd_seq_t *seq = m_synth->alsa_seq(); - if (seq == NULL) + if (seq == nullptr) return; m_running = true; @@ -82,7 +82,7 @@ while (m_running && poll_rc >= 0) { poll_rc = ::poll(pfds, nfds, 200); while (poll_rc > 0) { - snd_seq_event_t *ev = NULL; + snd_seq_event_t *ev = nullptr; snd_seq_event_input(seq, &ev); m_synth->alsa_capture(ev); // snd_seq_free_event(ev); @@ -124,6 +124,15 @@ } +//---------------------------------------------------------------------- +// JACK on-shutdown callback. + +static void synthv1_jack_on_shutdown ( void *arg ) +{ + static_cast (arg)->shutdown(); +} + + #ifdef CONFIG_JACK_SESSION #include @@ -152,27 +161,27 @@ synthv1_jack::synthv1_jack (void) : synthv1(2) { - m_client = NULL; + m_client = nullptr; m_activated = false; - m_audio_ins = NULL; - m_audio_outs = NULL; + m_audio_ins = nullptr; + m_audio_outs = nullptr; - m_ins = m_outs = NULL; + m_ins = m_outs = nullptr; ::memset(m_params, 0, synthv1::NUM_PARAMS * sizeof(float)); #ifdef CONFIG_JACK_MIDI - m_midi_in = NULL; + m_midi_in = nullptr; #endif #ifdef CONFIG_ALSA_MIDI - m_alsa_seq = NULL; + m_alsa_seq = nullptr; // m_alsa_client = -1; m_alsa_port = -1; - m_alsa_decoder = NULL; - m_alsa_buffer = NULL; - m_alsa_thread = NULL; + m_alsa_decoder = nullptr; + m_alsa_buffer = nullptr; + m_alsa_thread = nullptr; #endif synthv1::programs()->enabled(true); @@ -290,8 +299,8 @@ } // open client - m_client = ::jack_client_open(client_id, JackNullOption, NULL); - if (m_client == NULL) + m_client = ::jack_client_open(client_id, JackNullOption, nullptr); + if (m_client == nullptr) return; // set sample rate @@ -312,11 +321,11 @@ ::snprintf(port_name, sizeof(port_name), "in_%d", k + 1); m_audio_ins[k] = ::jack_port_register(m_client, port_name, JACK_DEFAULT_AUDIO_TYPE, JackPortIsInput, 0); - m_ins[k] = NULL; + m_ins[k] = nullptr; ::snprintf(port_name, sizeof(port_name), "out_%d", k + 1); m_audio_outs[k] = ::jack_port_register(m_client, port_name, JACK_DEFAULT_AUDIO_TYPE, JackPortIsOutput, 0); - m_outs[k] = NULL; + m_outs[k] = nullptr; } // register midi port @@ -325,12 +334,12 @@ "in", JACK_DEFAULT_MIDI_TYPE, JackPortIsInput, 0); #endif #ifdef CONFIG_ALSA_MIDI - m_alsa_seq = NULL; + m_alsa_seq = nullptr; // m_alsa_client = -1; m_alsa_port = -1; - m_alsa_decoder = NULL; - m_alsa_buffer = NULL; - m_alsa_thread = NULL; + m_alsa_decoder = nullptr; + m_alsa_buffer = nullptr; + m_alsa_thread = nullptr; // open alsa sequencer client... if (snd_seq_open(&m_alsa_seq, "hw", SND_SEQ_OPEN_INPUT, 0) >= 0) { snd_seq_set_client_name(m_alsa_seq, client_id); @@ -352,6 +361,9 @@ jack_set_buffer_size_callback(m_client, synthv1_jack_buffer_size, this); + jack_on_shutdown(m_client, + synthv1_jack_on_shutdown, this); + // set process callbacks... ::jack_set_process_callback(m_client, synthv1_jack_process, this); @@ -395,15 +407,15 @@ if (m_alsa_seq) { if (m_alsa_thread) { delete m_alsa_thread; - m_alsa_thread = NULL; + m_alsa_thread = nullptr; } if (m_alsa_buffer) { ::jack_ringbuffer_free(m_alsa_buffer); - m_alsa_buffer = NULL; + m_alsa_buffer = nullptr; } if (m_alsa_decoder) { snd_midi_event_free(m_alsa_decoder); - m_alsa_decoder = NULL; + m_alsa_decoder = nullptr; } if (m_alsa_port >= 0) { snd_seq_delete_simple_port(m_alsa_seq, m_alsa_port); @@ -411,18 +423,18 @@ } snd_seq_close(m_alsa_seq); // m_alsa_client = -1; - m_alsa_seq = NULL; + m_alsa_seq = nullptr; } #endif - if (m_client == NULL) + if (m_client == nullptr) return; #ifdef CONFIG_JACK_MIDI // unregister midi ports if (m_midi_in) { ::jack_port_unregister(m_client, m_midi_in); - m_midi_in = NULL; + m_midi_in = nullptr; } #endif @@ -432,39 +444,39 @@ for (uint16_t k = 0; k < nchannels; ++k) { if (m_audio_outs && m_audio_outs[k]) { ::jack_port_unregister(m_client, m_audio_outs[k]); - m_audio_outs[k] = NULL; + m_audio_outs[k] = nullptr; } if (m_outs && m_outs[k]) - m_outs[k] = NULL; + m_outs[k] = nullptr; if (m_audio_ins && m_audio_ins[k]) { ::jack_port_unregister(m_client, m_audio_ins[k]); - m_audio_ins[k] = NULL; + m_audio_ins[k] = nullptr; } if (m_ins && m_ins[k]) - m_ins[k] = NULL; + m_ins[k] = nullptr; } if (m_outs) { delete [] m_outs; - m_outs = NULL; + m_outs = nullptr; } if (m_ins) { delete [] m_ins; - m_ins = NULL; + m_ins = nullptr; } if (m_audio_outs) { delete [] m_audio_outs; - m_audio_outs = NULL; + m_audio_outs = nullptr; } if (m_audio_ins) { delete [] m_audio_ins; - m_audio_ins = NULL; + m_audio_ins = nullptr; } // close client ::jack_client_close(m_client); - m_client = NULL; + m_client = nullptr; } @@ -479,10 +491,10 @@ // alsa event capture. void synthv1_jack::alsa_capture ( snd_seq_event_t *ev ) { - if (m_alsa_decoder == NULL) + if (m_alsa_decoder == nullptr) return; - if (ev == NULL) + if (ev == nullptr) return; // ignored events... @@ -603,6 +615,33 @@ } +void synthv1_jack::updateTuning (void) +{ + synthv1::resetTuning(); +} + + +void synthv1_jack::shutdown (void) +{ + synthv1_jack_application *pApp = synthv1_jack_application::getInstance(); + if (pApp) + pApp->shutdown(); +} + + +void synthv1_jack::shutdown_close (void) +{ + m_activated = false; + + if (m_client) { + ::jack_client_close(m_client); + m_client = nullptr; + } + + close(); +} + + //------------------------------------------------------------------------- // synthv1_jack_application -- Singleton application instance. // @@ -617,12 +656,35 @@ #endif +#ifdef HAVE_SIGNAL_H + +#include + +#include +#include +#include +#include + +// File descriptor for SIGTERM notifier. +static int g_fdSigterm[2] = { -1, -1 }; + +// Unix SIGTERM signal handler. +static void synthv1_sigterm_handler ( int /*signo*/ ) +{ + char c = 1; + + (::write(g_fdSigterm[0], &c, sizeof(c)) > 0); +} + +#endif // HAVE_SIGNAL_H + + // Constructor. synthv1_jack_application::synthv1_jack_application ( int& argc, char **argv ) - : QObject(NULL), m_pApp(NULL), m_bGui(true), - m_pSynth(NULL), m_pWidget(NULL) + : QObject(nullptr), m_pApp(nullptr), m_bGui(true), + m_pSynth(nullptr), m_pWidget(nullptr) #ifdef CONFIG_NSM - , m_pNsmClient(NULL) + , m_pNsmClient(nullptr) #endif { #ifdef Q_WS_X11 @@ -637,16 +699,70 @@ m_bGui = false; } - if (m_bGui) - m_pApp = new QApplication(argc, argv); - else + if (m_bGui) { + #if QT_VERSION >= QT_VERSION_CHECK(5, 6, 0) + QApplication::setAttribute(Qt::AA_EnableHighDpiScaling); + #endif + QApplication *pApp = new QApplication(argc, argv); + #if QT_VERSION >= QT_VERSION_CHECK(5, 1, 0) + pApp->setApplicationDisplayName(SYNTHV1_TITLE); + // SYNTHV1_TITLE " - " + QObject::tr(SYNTHV1_SUBTITLE)); + #endif + m_pApp = pApp; + } else { m_pApp = new QCoreApplication(argc, argv); + } + +#if QT_VERSION >= QT_VERSION_CHECK(5, 1, 0) + m_pApp->setApplicationName(SYNTHV1_TITLE); +#endif + +#ifdef HAVE_SIGNAL_H + + // Set to ignore any fatal "Broken pipe" signals. + ::signal(SIGPIPE, SIG_IGN); + + // Initialize file descriptors for SIGTERM socket notifier. + ::socketpair(AF_UNIX, SOCK_STREAM, 0, g_fdSigterm); + m_pSigtermNotifier + = new QSocketNotifier(g_fdSigterm[1], QSocketNotifier::Read, this); + + QObject::connect(m_pSigtermNotifier, + SIGNAL(activated(int)), + SLOT(handle_sigterm())); + + // Install SIGTERM signal handler. + struct sigaction sigterm; + sigterm.sa_handler = synthv1_sigterm_handler; + sigemptyset(&sigterm.sa_mask); + sigterm.sa_flags = 0; + sigterm.sa_flags |= SA_RESTART; + ::sigaction(SIGTERM, &sigterm, nullptr); + ::sigaction(SIGQUIT, &sigterm, nullptr); + + // Ignore SIGHUP/SIGINT signals. + ::signal(SIGHUP, SIG_IGN); + ::signal(SIGINT, SIG_IGN); + +#else + + m_pSigtermNotifier = nullptr; + +#endif // !HAVE_SIGNAL_H + + // Pseudo-singleton instance. + g_pInstance = this; } // Destructor. synthv1_jack_application::~synthv1_jack_application (void) { + g_pInstance = nullptr; + +#ifdef HAVE_SIGNAL_H + if (m_pSigtermNotifier) delete m_pSigtermNotifier; +#endif #ifdef CONFIG_NSM if (m_pNsmClient) delete m_pNsmClient; #endif @@ -694,7 +810,7 @@ // Startup methods. bool synthv1_jack_application::setup (void) { - if (m_pApp == NULL) + if (m_pApp == nullptr) return false; if (!parse_args()) { @@ -702,11 +818,15 @@ return false; } + QObject::connect(this, + SIGNAL(shutdown_signal()), + SLOT(shutdown_slot())); + m_pSynth = new synthv1_jack(); if (m_bGui) { m_pWidget = new synthv1widget_jack(m_pSynth); - m_pWidget->show(); + // m_pWidget->show(); if (m_presets.isEmpty()) m_pWidget->initPreset(); else @@ -741,7 +861,10 @@ if (m_pWidget) m_pWidget->setNsmClient(m_pNsmClient); } + else #endif // CONFIG_NSM + if (m_pWidget) + m_pWidget->show(); return true; } @@ -758,10 +881,10 @@ void synthv1_jack_application::openSession (void) { - if (m_pSynth == NULL) + if (m_pSynth == nullptr) return; - if (m_pNsmClient == NULL) + if (m_pNsmClient == nullptr) return; if (!m_pNsmClient->is_active()) @@ -785,7 +908,9 @@ if (!dir.exists()) dir.mkpath(path_name); - const QFileInfo fi(path_name, display_name + '.' + SYNTHV1_TITLE); + QFileInfo fi(path_name, "session." SYNTHV1_TITLE); + if (!fi.exists()) + fi.setFile(path_name, display_name + '.' + SYNTHV1_TITLE); if (fi.exists()) { const QString& sFilename = fi.absoluteFilePath(); if (m_pWidget) { @@ -804,10 +929,10 @@ void synthv1_jack_application::saveSession (void) { - if (m_pSynth == NULL) + if (m_pSynth == nullptr) return; - if (m_pNsmClient == NULL) + if (m_pNsmClient == nullptr) return; if (!m_pNsmClient->is_active()) @@ -817,10 +942,11 @@ qDebug("synthv1_jack::saveSession()"); #endif - const QString& path_name = m_pNsmClient->path_name(); - const QString& display_name = m_pNsmClient->display_name(); // const QString& client_id = m_pNsmClient->client_id(); - const QFileInfo fi(path_name, display_name + '.' + SYNTHV1_TITLE); + const QString& path_name = m_pNsmClient->path_name(); +// const QString& display_name = m_pNsmClient->display_name(); +// const QFileInfo fi(path_name, display_name + '.' + SYNTHV1_TITLE); + const QFileInfo fi(path_name, "session." SYNTHV1_TITLE); synthv1_param::savePreset(m_pSynth, fi.absoluteFilePath(), true); @@ -831,7 +957,7 @@ void synthv1_jack_application::showSession (void) { - if (m_pNsmClient == NULL) + if (m_pNsmClient == nullptr) return; if (!m_pNsmClient->is_active()) @@ -850,7 +976,7 @@ void synthv1_jack_application::hideSession (void) { - if (m_pNsmClient == NULL) + if (m_pNsmClient == nullptr) return; if (!m_pNsmClient->is_active()) @@ -868,6 +994,53 @@ #endif // CONFIG_NSM +#ifdef HAVE_SIGNAL_H + +// SIGTERM signal handler. +void synthv1_jack_application::handle_sigterm (void) +{ + char c; + + if (::read(g_fdSigterm[1], &c, sizeof(c)) > 0) { + if (m_pApp) + m_pApp->quit(); + } +} + +#endif // HAVE_SIGNAL_H + + +// JACK shutdown handlers. +void synthv1_jack_application::shutdown (void) +{ + emit shutdown_signal(); +} + + +void synthv1_jack_application::shutdown_slot (void) +{ + bool bQuit = true; + + if (m_pSynth) + m_pSynth->shutdown_close(); + + if (m_pWidget) + bQuit = m_pWidget->queryClose(); + + if (m_pApp && bQuit) + m_pApp->quit(); +} + + +// Pseudo-singleton instance. +synthv1_jack_application *synthv1_jack_application::g_pInstance = nullptr; + +synthv1_jack_application *synthv1_jack_application::getInstance (void) +{ + return g_pInstance; +} + + //------------------------------------------------------------------------- // main diff -Nru synthv1-0.8.6/src/synthv1_jack.h synthv1-0.9.10+git20190929/src/synthv1_jack.h --- synthv1-0.8.6/src/synthv1_jack.h 2017-12-20 07:56:50.310842973 +0000 +++ synthv1-0.9.10+git20190929/src/synthv1_jack.h 2019-09-28 23:00:43.000000000 +0000 @@ -1,7 +1,7 @@ // synthv1_jack.h // /**************************************************************************** - Copyright (C) 2012-2017, rncbc aka Rui Nuno Capela. All rights reserved. + Copyright (C) 2012-2019, rncbc aka Rui Nuno Capela. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License @@ -67,9 +67,13 @@ void sessionEvent(void *pvSessionArg); #endif + void shutdown(); + void shutdown_close(); + protected: void updatePreset(bool bDirty); + void updateTuning(); private: @@ -115,6 +119,9 @@ class synthv1_nsm; #endif +#ifdef HAVE_SIGNAL_H +class QSocketNotifier; +#endif class synthv1_jack_application : public QObject { @@ -131,19 +138,33 @@ // Facade method. int exec(); -#ifdef CONFIG_NSM + // JACK shutdown handler. + void shutdown(); + + // Pseudo-singleton accessor. + static synthv1_jack_application *getInstance(); + +signals: + + void shutdown_signal(); protected slots: +#ifdef CONFIG_NSM // NSM callback slots. void openSession(); void saveSession(); - void hideSession(); void showSession(); - #endif // CONFIG_NSM +#ifdef HAVE_SIGNAL_H + // SIGTERM signal handler. + void handle_sigterm(); +#endif + + void shutdown_slot(); + protected: // Argument parser method. @@ -157,6 +178,7 @@ // Instance variables. QCoreApplication *m_pApp; bool m_bGui; + QStringList m_presets; synthv1_jack *m_pSynth; @@ -165,6 +187,12 @@ #ifdef CONFIG_NSM synthv1_nsm *m_pNsmClient; #endif + +#ifdef HAVE_SIGNAL_H + QSocketNotifier *m_pSigtermNotifier; +#endif + + static synthv1_jack_application *g_pInstance; }; diff -Nru synthv1-0.8.6/src/synthv1.lv2/synthv1.ttl synthv1-0.9.10+git20190929/src/synthv1.lv2/synthv1.ttl --- synthv1-0.8.6/src/synthv1.lv2/synthv1.ttl 2017-12-20 07:56:50.308842973 +0000 +++ synthv1-0.9.10+git20190929/src/synthv1.lv2/synthv1.ttl 2019-09-28 23:05:55.000000000 +0000 @@ -9,6 +9,8 @@ @prefix lv2atom: . @prefix lv2midi: . @prefix lv2time: . +@prefix lv2state: . +@prefix lv2patch: . @prefix lv2worker: . @prefix lv2pg: . @@ -19,23 +21,30 @@ doap:name "synthv1" ; doap:maintainer [ foaf:name "rncbc aka. Rui Nuno Capela" ; - foaf:homepage ; + foaf:homepage ; foaf:mbox ; ] ; lv2:requiredFeature lv2urid:map, lv2worker:schedule ; lv2:optionalFeature lv2:hardRTCapable ; lv2:extensionData lv2worker:interface ; - lv2ui:ui synthv1_lv2:ui, synthv1_lv2:ui_external ; + lv2ui:ui synthv1_lv2:ui_x11, synthv1_lv2:ui_external ; + lv2patch:writable synthv1_lv2:P201_TUNING_ENABLED, + synthv1_lv2:P202_TUNING_REF_PITCH, + synthv1_lv2:P203_TUNING_REF_NOTE, + synthv1_lv2:P204_TUNING_SCALE_FILE, + synthv1_lv2:P205_TUNING_KEYMAP_FILE ; lv2:port [ a lv2:InputPort, lv2atom:AtomPort ; lv2atom:bufferType lv2atom:Sequence ; lv2atom:supports lv2midi:MidiEvent, lv2time:Position ; + lv2:designation lv2:control ; lv2:index 0 ; lv2:symbol "in"; lv2:name "MIDI In"; - ] , [ + ], [ a lv2:OutputPort, lv2atom:AtomPort ; lv2atom:bufferType lv2atom:Sequence ; + lv2:designation lv2:control ; lv2:index 1 ; lv2:symbol "notify"; lv2:name "Notify"; @@ -76,7 +85,7 @@ lv2:default 1.0 ; lv2:minimum 0.0 ; lv2:maximum 4.0 ; - lv2pg:group synthv1_lv2:101_DCO1 ; + lv2pg:group synthv1_lv2:G101_DCO1 ; ], [ a lv2:InputPort, lv2:ControlPort ; lv2:index 7 ; @@ -85,7 +94,7 @@ lv2:default 1.0 ; lv2:minimum 0.0 ; lv2:maximum 1.0 ; - lv2pg:group synthv1_lv2:101_DCO1 ; + lv2pg:group synthv1_lv2:G101_DCO1 ; ], [ a lv2:InputPort, lv2:ControlPort ; lv2:index 8 ; @@ -95,7 +104,7 @@ lv2:default 0.0 ; lv2:minimum 0.0 ; lv2:maximum 1.0 ; - lv2pg:group synthv1_lv2:101_DCO1 ; + lv2pg:group synthv1_lv2:G101_DCO1 ; ], [ a lv2:InputPort, lv2:ControlPort ; lv2:index 9 ; @@ -105,7 +114,7 @@ lv2:default 0.0 ; lv2:minimum 0.0 ; lv2:maximum 1.0 ; - lv2pg:group synthv1_lv2:101_DCO1 ; + lv2pg:group synthv1_lv2:G101_DCO1 ; ], [ a lv2:InputPort, lv2:ControlPort ; lv2:index 10 ; @@ -120,7 +129,7 @@ lv2:default 1.0 ; lv2:minimum 0.0 ; lv2:maximum 4.0 ; - lv2pg:group synthv1_lv2:101_DCO1 ; + lv2pg:group synthv1_lv2:G101_DCO1 ; ], [ a lv2:InputPort, lv2:ControlPort ; lv2:index 11 ; @@ -129,7 +138,7 @@ lv2:default 1.0 ; lv2:minimum 0.0 ; lv2:maximum 1.0 ; - lv2pg:group synthv1_lv2:101_DCO1 ; + lv2pg:group synthv1_lv2:G101_DCO1 ; ], [ a lv2:InputPort, lv2:ControlPort ; lv2:index 12 ; @@ -139,7 +148,7 @@ lv2:default 0.0 ; lv2:minimum 0.0 ; lv2:maximum 1.0 ; - lv2pg:group synthv1_lv2:101_DCO1 ; + lv2pg:group synthv1_lv2:G101_DCO1 ; ], [ a lv2:InputPort, lv2:ControlPort ; lv2:index 13 ; @@ -149,7 +158,7 @@ lv2:default 0.0 ; lv2:minimum 0.0 ; lv2:maximum 1.0 ; - lv2pg:group synthv1_lv2:101_DCO1 ; + lv2pg:group synthv1_lv2:G101_DCO1 ; ], [ a lv2:InputPort, lv2:ControlPort ; lv2:index 14 ; @@ -158,7 +167,7 @@ lv2:default 0.0 ; lv2:minimum -1.0 ; lv2:maximum 1.0 ; - lv2pg:group synthv1_lv2:101_DCO1 ; + lv2pg:group synthv1_lv2:G101_DCO1 ; ], [ a lv2:InputPort, lv2:ControlPort ; lv2:index 15 ; @@ -167,7 +176,7 @@ lv2:default 0.1 ; lv2:minimum 0.0 ; lv2:maximum 1.0 ; - lv2pg:group synthv1_lv2:101_DCO1 ; + lv2pg:group synthv1_lv2:G101_DCO1 ; ], [ a lv2:InputPort, lv2:ControlPort ; lv2:index 16 ; @@ -176,7 +185,7 @@ lv2:default 0.0 ; lv2:minimum 0.0 ; lv2:maximum 1.0 ; - lv2pg:group synthv1_lv2:101_DCO1 ; + lv2pg:group synthv1_lv2:G101_DCO1 ; ], [ a lv2:InputPort, lv2:ControlPort ; lv2:index 17 ; @@ -185,7 +194,7 @@ lv2:default 0.0 ; lv2:minimum 0.0 ; lv2:maximum 1.0 ; - lv2pg:group synthv1_lv2:101_DCO1 ; + lv2pg:group synthv1_lv2:G101_DCO1 ; ], [ a lv2:InputPort, lv2:ControlPort ; lv2:index 18 ; @@ -194,7 +203,7 @@ lv2:default 0.0 ; lv2:minimum -4.0 ; lv2:maximum 4.0 ; - lv2pg:group synthv1_lv2:101_DCO1 ; + lv2pg:group synthv1_lv2:G101_DCO1 ; ], [ a lv2:InputPort, lv2:ControlPort ; lv2:index 19 ; @@ -203,7 +212,7 @@ lv2:default 0.0 ; lv2:minimum -1.0 ; lv2:maximum 1.0 ; - lv2pg:group synthv1_lv2:101_DCO1 ; + lv2pg:group synthv1_lv2:G101_DCO1 ; ], [ a lv2:InputPort, lv2:ControlPort ; lv2:index 20 ; @@ -212,7 +221,7 @@ lv2:default 0.0 ; lv2:minimum 0.0 ; lv2:maximum 1.0 ; - lv2pg:group synthv1_lv2:101_DCO1 ; + lv2pg:group synthv1_lv2:G101_DCO1 ; ], [ a lv2:InputPort, lv2:ControlPort ; lv2:index 21 ; @@ -221,28 +230,38 @@ lv2:default 0.5 ; lv2:minimum 0.0 ; lv2:maximum 1.0 ; - lv2pg:group synthv1_lv2:101_DCO1 ; + lv2pg:group synthv1_lv2:G101_DCO1 ; ], [ a lv2:InputPort, lv2:ControlPort ; lv2:index 22 ; + lv2:symbol "DCF1_ENABLED" ; + lv2:name "DCF1 Enabled" ; + lv2:portProperty lv2:toggled ; + lv2:default 1.0 ; + lv2:minimum 0.0 ; + lv2:maximum 1.0 ; + lv2pg:group synthv1_lv2:G102_DCF1 ; + ], [ + a lv2:InputPort, lv2:ControlPort ; + lv2:index 23 ; lv2:symbol "DCF1_CUTOFF" ; lv2:name "DCF1 Cutoff" ; lv2:default 0.5 ; lv2:minimum 0.0 ; lv2:maximum 1.0 ; - lv2pg:group synthv1_lv2:102_DCF1 ; + lv2pg:group synthv1_lv2:G102_DCF1 ; ], [ a lv2:InputPort, lv2:ControlPort ; - lv2:index 23 ; + lv2:index 24 ; lv2:symbol "DCF1_RESO" ; lv2:name "DCF1 Resonance" ; lv2:default 0.0 ; lv2:minimum 0.0 ; lv2:maximum 1.0 ; - lv2pg:group synthv1_lv2:102_DCF1 ; + lv2pg:group synthv1_lv2:G102_DCF1 ; ], [ a lv2:InputPort, lv2:ControlPort ; - lv2:index 24 ; + lv2:index 25 ; lv2:symbol "DCF1_TYPE" ; lv2:name "DCF1 Type" ; lv2:portProperty lv2:integer, lv2:enumeration ; @@ -253,10 +272,10 @@ lv2:default 0.0 ; lv2:minimum 0.0 ; lv2:maximum 3.0 ; - lv2pg:group synthv1_lv2:102_DCF1 ; + lv2pg:group synthv1_lv2:G102_DCF1 ; ], [ a lv2:InputPort, lv2:ControlPort ; - lv2:index 25 ; + lv2:index 26 ; lv2:symbol "DCF1_SLOPE" ; lv2:name "DCF1 Slope" ; lv2:portProperty lv2:integer, lv2:enumeration ; @@ -267,55 +286,65 @@ lv2:default 0.0 ; lv2:minimum 0.0 ; lv2:maximum 3.0 ; - lv2pg:group synthv1_lv2:102_DCF1 ; + lv2pg:group synthv1_lv2:G102_DCF1 ; ], [ a lv2:InputPort, lv2:ControlPort ; - lv2:index 26 ; + lv2:index 27 ; lv2:symbol "DCF1_ENVELOPE" ; lv2:name "DCF1 Envelope" ; lv2:default 1.0 ; lv2:minimum -1.0 ; lv2:maximum 1.0 ; - lv2pg:group synthv1_lv2:102_DCF1 ; + lv2pg:group synthv1_lv2:G102_DCF1 ; ], [ a lv2:InputPort, lv2:ControlPort ; - lv2:index 27 ; + lv2:index 28 ; lv2:symbol "DCF1_ATTACK" ; lv2:name "DCF1 Attack" ; lv2:default 0.0 ; lv2:minimum 0.0 ; lv2:maximum 1.0 ; - lv2pg:group synthv1_lv2:102_DCF1 ; + lv2pg:group synthv1_lv2:G102_DCF1 ; ], [ a lv2:InputPort, lv2:ControlPort ; - lv2:index 28 ; + lv2:index 29 ; lv2:symbol "DCF1_DECAY" ; lv2:name "DCF1 Decay" ; lv2:default 0.2 ; lv2:minimum 0.0 ; lv2:maximum 1.0 ; - lv2pg:group synthv1_lv2:102_DCF1 ; + lv2pg:group synthv1_lv2:G102_DCF1 ; ], [ a lv2:InputPort, lv2:ControlPort ; - lv2:index 29 ; + lv2:index 30 ; lv2:symbol "DCF1_SUSTAIN" ; lv2:name "DCF1 Sustain" ; lv2:default 0.5 ; lv2:minimum 0.0 ; lv2:maximum 1.0 ; - lv2pg:group synthv1_lv2:102_DCF1 ; + lv2pg:group synthv1_lv2:G102_DCF1 ; ], [ a lv2:InputPort, lv2:ControlPort ; - lv2:index 30 ; + lv2:index 31 ; lv2:symbol "DCF1_RELEASE" ; lv2:name "DCF1 Release" ; lv2:default 0.5 ; lv2:minimum 0.0 ; lv2:maximum 1.0 ; - lv2pg:group synthv1_lv2:102_DCF1 ; + lv2pg:group synthv1_lv2:G102_DCF1 ; ], [ a lv2:InputPort, lv2:ControlPort ; - lv2:index 31 ; + lv2:index 32 ; + lv2:symbol "LFO1_ENABLED" ; + lv2:name "LFO1 Enabled" ; + lv2:portProperty lv2:toggled ; + lv2:default 1.0 ; + lv2:minimum 0.0 ; + lv2:maximum 1.0 ; + lv2pg:group synthv1_lv2:G103_LFO1 ; + ], [ + a lv2:InputPort, lv2:ControlPort ; + lv2:index 33 ; lv2:symbol "LFO1_SHAPE" ; lv2:name "LFO1 Wave Shape" ; lv2:portProperty lv2:integer, lv2:enumeration ; @@ -327,283 +356,283 @@ lv2:default 1.0 ; lv2:minimum 0.0 ; lv2:maximum 4.0 ; - lv2pg:group synthv1_lv2:103_LFO1 ; + lv2pg:group synthv1_lv2:G103_LFO1 ; ], [ a lv2:InputPort, lv2:ControlPort ; - lv2:index 32 ; + lv2:index 34 ; lv2:symbol "LFO1_WIDTH" ; lv2:name "LFO1 Wave Width" ; lv2:default 1.0 ; lv2:minimum 0.0 ; lv2:maximum 1.0 ; - lv2pg:group synthv1_lv2:103_LFO1 ; + lv2pg:group synthv1_lv2:G103_LFO1 ; ], [ a lv2:InputPort, lv2:ControlPort ; - lv2:index 33 ; + lv2:index 35 ; lv2:symbol "LFO1_BPM" ; lv2:name "LFO1 BPM" ; lv2:default 180.0 ; lv2:minimum 0.0 ; lv2:maximum 360.0 ; - lv2pg:group synthv1_lv2:103_LFO1 ; + lv2pg:group synthv1_lv2:G103_LFO1 ; ], [ a lv2:InputPort, lv2:ControlPort ; - lv2:index 34 ; + lv2:index 36 ; lv2:symbol "LFO1_RATE" ; lv2:name "LFO1 Rate" ; lv2:default 0.5 ; lv2:minimum 0.0 ; lv2:maximum 1.0 ; - lv2pg:group synthv1_lv2:103_LFO1 ; + lv2pg:group synthv1_lv2:G103_LFO1 ; ], [ a lv2:InputPort, lv2:ControlPort ; - lv2:index 35 ; + lv2:index 37 ; lv2:symbol "LFO1_SYNC" ; lv2:name "LFO1 Sync" ; lv2:portProperty lv2:toggled ; lv2:default 0.0 ; lv2:minimum 0.0 ; lv2:maximum 1.0 ; - lv2pg:group synthv1_lv2:103_LFO1 ; + lv2pg:group synthv1_lv2:G103_LFO1 ; ], [ a lv2:InputPort, lv2:ControlPort ; - lv2:index 36 ; + lv2:index 38 ; lv2:symbol "LFO1_SWEEP" ; lv2:name "LFO1 Sweep" ; lv2:default 0.0 ; lv2:minimum -1.0 ; lv2:maximum 1.0 ; - lv2pg:group synthv1_lv2:103_LFO1 ; + lv2pg:group synthv1_lv2:G103_LFO1 ; ], [ a lv2:InputPort, lv2:ControlPort ; - lv2:index 37 ; + lv2:index 39 ; lv2:symbol "LFO1_PITCH" ; lv2:name "LFO1 Pitch" ; lv2:default 0.0 ; lv2:minimum -1.0 ; lv2:maximum 1.0 ; - lv2pg:group synthv1_lv2:103_LFO1 ; + lv2pg:group synthv1_lv2:G103_LFO1 ; ], [ a lv2:InputPort, lv2:ControlPort ; - lv2:index 38 ; + lv2:index 40 ; lv2:symbol "LFO1_BALANCE" ; lv2:name "LFO1 Balance" ; lv2:default 0.0 ; lv2:minimum -1.0 ; lv2:maximum 1.0 ; - lv2pg:group synthv1_lv2:103_LFO1 ; + lv2pg:group synthv1_lv2:G103_LFO1 ; ], [ a lv2:InputPort, lv2:ControlPort ; - lv2:index 39 ; + lv2:index 41 ; lv2:symbol "LFO1_RINGMOD" ; lv2:name "LFO1 Ring Mod" ; lv2:default 0.0 ; lv2:minimum -1.0 ; lv2:maximum 1.0 ; - lv2pg:group synthv1_lv2:103_LFO1 ; + lv2pg:group synthv1_lv2:G103_LFO1 ; ], [ a lv2:InputPort, lv2:ControlPort ; - lv2:index 40 ; + lv2:index 42 ; lv2:symbol "LFO1_CUTOFF" ; lv2:name "LFO1 Cutoff" ; lv2:default 0.0 ; lv2:minimum -1.0 ; lv2:maximum 1.0 ; - lv2pg:group synthv1_lv2:103_LFO1 ; + lv2pg:group synthv1_lv2:G103_LFO1 ; ], [ a lv2:InputPort, lv2:ControlPort ; - lv2:index 41 ; + lv2:index 43 ; lv2:symbol "LFO1_RESO" ; lv2:name "LFO1 Resonance" ; lv2:default 0.0 ; lv2:minimum -1.0 ; lv2:maximum 1.0 ; - lv2pg:group synthv1_lv2:103_LFO1 ; + lv2pg:group synthv1_lv2:G103_LFO1 ; ], [ a lv2:InputPort, lv2:ControlPort ; - lv2:index 42 ; + lv2:index 44 ; lv2:symbol "LFO1_PANNING" ; lv2:name "LFO1 Panning" ; lv2:default 0.0 ; lv2:minimum -1.0 ; lv2:maximum 1.0 ; - lv2pg:group synthv1_lv2:103_LFO1 ; + lv2pg:group synthv1_lv2:G103_LFO1 ; ], [ a lv2:InputPort, lv2:ControlPort ; - lv2:index 43 ; + lv2:index 45 ; lv2:symbol "LFO1_VOLUME" ; lv2:name "LFO1 Volume" ; lv2:default 0.0 ; lv2:minimum -1.0 ; lv2:maximum 1.0 ; - lv2pg:group synthv1_lv2:103_LFO1 ; + lv2pg:group synthv1_lv2:G103_LFO1 ; ], [ a lv2:InputPort, lv2:ControlPort ; - lv2:index 44 ; + lv2:index 46 ; lv2:symbol "LFO1_ATTACK" ; lv2:name "LFO1 Attack" ; lv2:default 0.0 ; lv2:minimum 0.0 ; lv2:maximum 1.0 ; - lv2pg:group synthv1_lv2:103_LFO1 ; + lv2pg:group synthv1_lv2:G103_LFO1 ; ], [ a lv2:InputPort, lv2:ControlPort ; - lv2:index 45 ; + lv2:index 47 ; lv2:symbol "LFO1_DECAY" ; lv2:name "LFO1 Decay" ; lv2:default 0.1 ; lv2:minimum 0.0 ; lv2:maximum 1.0 ; - lv2pg:group synthv1_lv2:103_LFO1 ; + lv2pg:group synthv1_lv2:G103_LFO1 ; ], [ a lv2:InputPort, lv2:ControlPort ; - lv2:index 46 ; + lv2:index 48 ; lv2:symbol "LFO1_SUSTAIN" ; lv2:name "LFO1 Sustain" ; lv2:default 1.0 ; lv2:minimum 0.0 ; lv2:maximum 1.0 ; - lv2pg:group synthv1_lv2:103_LFO1 ; + lv2pg:group synthv1_lv2:G103_LFO1 ; ], [ a lv2:InputPort, lv2:ControlPort ; - lv2:index 47 ; + lv2:index 49 ; lv2:symbol "LFO1_RELEASE" ; lv2:name "LFO1 Release" ; lv2:default 0.5 ; lv2:minimum 0.0 ; lv2:maximum 1.0 ; - lv2pg:group synthv1_lv2:103_LFO1 ; + lv2pg:group synthv1_lv2:G103_LFO1 ; ], [ a lv2:InputPort, lv2:ControlPort ; - lv2:index 48 ; + lv2:index 50 ; lv2:symbol "DCA1_VOLUME" ; lv2:name "DCA1 Volume" ; lv2:default 0.5 ; lv2:minimum 0.0 ; lv2:maximum 1.0 ; - lv2pg:group synthv1_lv2:104_DCA1 ; + lv2pg:group synthv1_lv2:G104_DCA1 ; ], [ a lv2:InputPort, lv2:ControlPort ; - lv2:index 49 ; + lv2:index 51 ; lv2:symbol "DCA1_ATTACK" ; lv2:name "DCA1 Attack" ; lv2:default 0.0 ; lv2:minimum 0.0 ; lv2:maximum 1.0 ; - lv2pg:group synthv1_lv2:104_DCA1 ; + lv2pg:group synthv1_lv2:G104_DCA1 ; ], [ a lv2:InputPort, lv2:ControlPort ; - lv2:index 50 ; + lv2:index 52 ; lv2:symbol "DCA1_DECAY" ; lv2:name "DCA1 Decay" ; lv2:default 0.1 ; lv2:minimum 0.0 ; lv2:maximum 1.0 ; - lv2pg:group synthv1_lv2:104_DCA1 ; + lv2pg:group synthv1_lv2:G104_DCA1 ; ], [ a lv2:InputPort, lv2:ControlPort ; - lv2:index 51 ; + lv2:index 53 ; lv2:symbol "DCA1_SUSTAIN" ; lv2:name "DCA1 Sustain" ; lv2:default 1.0 ; lv2:minimum 0.0 ; lv2:maximum 1.0 ; - lv2pg:group synthv1_lv2:104_DCA1 ; + lv2pg:group synthv1_lv2:G104_DCA1 ; ], [ a lv2:InputPort, lv2:ControlPort ; - lv2:index 52 ; + lv2:index 54 ; lv2:symbol "DCA1_RELEASE" ; lv2:name "DCA1 Release" ; lv2:default 0.1 ; lv2:minimum 0.0 ; lv2:maximum 1.0 ; - lv2pg:group synthv1_lv2:104_DCA1 ; + lv2pg:group synthv1_lv2:G104_DCA1 ; ], [ a lv2:InputPort, lv2:ControlPort ; - lv2:index 53 ; + lv2:index 55 ; lv2:symbol "OUT1_WIDTH" ; lv2:name "OUT1 Stereo Width" ; lv2:default 0.0 ; lv2:minimum -1.0 ; lv2:maximum 1.0 ; - lv2pg:group synthv1_lv2:105_OUT1 ; + lv2pg:group synthv1_lv2:G105_OUT1 ; ], [ a lv2:InputPort, lv2:ControlPort ; - lv2:index 54 ; + lv2:index 56 ; lv2:symbol "OUT1_PANNING" ; lv2:name "OUT1 Panning" ; lv2:default 0.0 ; lv2:minimum -1.0 ; lv2:maximum 1.0 ; - lv2pg:group synthv1_lv2:105_OUT1 ; + lv2pg:group synthv1_lv2:G105_OUT1 ; ], [ a lv2:InputPort, lv2:ControlPort ; - lv2:index 55 ; + lv2:index 57 ; lv2:symbol "OUT1_FXSEND" ; lv2:name "OUT1 FX Send" ; lv2:default 1.0 ; lv2:minimum 0.0 ; lv2:maximum 1.0 ; - lv2pg:group synthv1_lv2:105_OUT1 ; + lv2pg:group synthv1_lv2:G105_OUT1 ; ], [ a lv2:InputPort, lv2:ControlPort ; - lv2:index 56 ; + lv2:index 58 ; lv2:symbol "OUT1_VOLUME" ; lv2:name "OUT1 Volume" ; lv2:default 0.5 ; lv2:minimum 0.0 ; lv2:maximum 1.0 ; - lv2pg:group synthv1_lv2:105_OUT1 ; + lv2pg:group synthv1_lv2:G105_OUT1 ; ] ; lv2:port [ a lv2:InputPort, lv2:ControlPort ; - lv2:index 57 ; + lv2:index 59 ; lv2:symbol "DEF1_PITCHBEND" ; lv2:name "DEF1 Pitchbend" ; lv2:default 0.2 ; lv2:minimum 0.0 ; lv2:maximum 1.0 ; - lv2pg:group synthv1_lv2:106_DEF1 ; + lv2pg:group synthv1_lv2:G106_DEF1 ; ], [ a lv2:InputPort, lv2:ControlPort ; - lv2:index 58 ; + lv2:index 60 ; lv2:symbol "DEF1_MODWHEEL" ; lv2:name "DEF1 Modwheel" ; lv2:default 0.2 ; lv2:minimum 0.0 ; lv2:maximum 1.0 ; - lv2pg:group synthv1_lv2:106_DEF1 ; + lv2pg:group synthv1_lv2:G106_DEF1 ; ], [ a lv2:InputPort, lv2:ControlPort ; - lv2:index 59 ; + lv2:index 61 ; lv2:symbol "DEF1_PRESSURE" ; lv2:name "DEF1 Pressure" ; lv2:default 0.2 ; lv2:minimum 0.0 ; lv2:maximum 1.0 ; - lv2pg:group synthv1_lv2:106_DEF1 ; + lv2pg:group synthv1_lv2:G106_DEF1 ; ], [ a lv2:InputPort, lv2:ControlPort ; - lv2:index 60 ; + lv2:index 62 ; lv2:symbol "DEF1_VELOCITY" ; lv2:name "DEF1 Velocity" ; lv2:default 0.2 ; lv2:minimum 0.0 ; lv2:maximum 1.0 ; - lv2pg:group synthv1_lv2:106_DEF1 ; + lv2pg:group synthv1_lv2:G106_DEF1 ; ], [ a lv2:InputPort, lv2:ControlPort ; - lv2:index 61 ; + lv2:index 63 ; lv2:symbol "DEF1_CHANNEL" ; lv2:name "DEF1 Channel" ; lv2:portProperty lv2:integer ; lv2:default 0.0 ; lv2:minimum 0.0 ; lv2:maximum 16.0 ; - lv2pg:group synthv1_lv2:106_DEF1 ; + lv2pg:group synthv1_lv2:G106_DEF1 ; ], [ a lv2:InputPort, lv2:ControlPort ; - lv2:index 62 ; + lv2:index 64 ; lv2:symbol "DEF1_MONO" ; lv2:name "DEF1 Mono" ; lv2:portProperty lv2:integer, lv2:enumeration ; @@ -613,11 +642,11 @@ lv2:default 0.0 ; lv2:minimum 0.0 ; lv2:maximum 2.0 ; - lv2pg:group synthv1_lv2:106_DEF1 ; + lv2pg:group synthv1_lv2:G106_DEF1 ; ] ; lv2:port [ a lv2:InputPort, lv2:ControlPort ; - lv2:index 63 ; + lv2:index 65 ; lv2:symbol "DCO2_SHAPE1" ; lv2:name "DCO2 Wave Shape 1" ; lv2:portProperty lv2:integer, lv2:enumeration ; @@ -629,39 +658,39 @@ lv2:default 1.0 ; lv2:minimum 0.0 ; lv2:maximum 4.0 ; - lv2pg:group synthv1_lv2:201_DCO2 ; + lv2pg:group synthv1_lv2:G201_DCO2 ; ], [ a lv2:InputPort, lv2:ControlPort ; - lv2:index 64 ; + lv2:index 66 ; lv2:symbol "DCO2_WIDTH1" ; lv2:name "DCO2 Wave Width 1" ; lv2:default 1.0 ; lv2:minimum 0.0 ; lv2:maximum 1.0 ; - lv2pg:group synthv1_lv2:201_DCO2 ; + lv2pg:group synthv1_lv2:G201_DCO2 ; ], [ a lv2:InputPort, lv2:ControlPort ; - lv2:index 65 ; + lv2:index 67 ; lv2:symbol "DCO2_BANDL1" ; lv2:name "DCO2 Wave Bandlimit 1" ; lv2:portProperty lv2:toggled ; lv2:default 0.0 ; lv2:minimum 0.0 ; lv2:maximum 1.0 ; - lv2pg:group synthv1_lv2:201_DCO2 ; + lv2pg:group synthv1_lv2:G201_DCO2 ; ], [ a lv2:InputPort, lv2:ControlPort ; - lv2:index 66 ; + lv2:index 68 ; lv2:symbol "DCO2_SYNC1" ; lv2:name "DCO2 Wave Sync 1" ; lv2:portProperty lv2:toggled ; lv2:default 0.0 ; lv2:minimum 0.0 ; lv2:maximum 1.0 ; - lv2pg:group synthv1_lv2:101_DCO1 ; + lv2pg:group synthv1_lv2:G101_DCO1 ; ], [ a lv2:InputPort, lv2:ControlPort ; - lv2:index 67 ; + lv2:index 69 ; lv2:symbol "DCO2_SHAPE2" ; lv2:name "DCO2 Wave Shape 2" ; lv2:portProperty lv2:integer, lv2:enumeration ; @@ -673,129 +702,139 @@ lv2:default 1.0 ; lv2:minimum 0.0 ; lv2:maximum 4.0 ; - lv2pg:group synthv1_lv2:201_DCO2 ; + lv2pg:group synthv1_lv2:G201_DCO2 ; ], [ a lv2:InputPort, lv2:ControlPort ; - lv2:index 68 ; + lv2:index 70 ; lv2:symbol "DCO2_WIDTH2" ; lv2:name "DCO2 Wave Width 2" ; lv2:default 1.0 ; lv2:minimum 0.0 ; lv2:maximum 1.0 ; - lv2pg:group synthv1_lv2:201_DCO2 ; + lv2pg:group synthv1_lv2:G201_DCO2 ; ], [ a lv2:InputPort, lv2:ControlPort ; - lv2:index 69 ; + lv2:index 71 ; lv2:symbol "DCO2_BANDL2" ; lv2:name "DCO2 Wave Bandlimit 2" ; lv2:portProperty lv2:toggled ; lv2:default 0.0 ; lv2:minimum 0.0 ; lv2:maximum 1.0 ; - lv2pg:group synthv1_lv2:201_DCO2 ; + lv2pg:group synthv1_lv2:G201_DCO2 ; ], [ a lv2:InputPort, lv2:ControlPort ; - lv2:index 70 ; + lv2:index 72 ; lv2:symbol "DCO2_SYNC2" ; lv2:name "DCO2 Wave Sync 2" ; lv2:portProperty lv2:toggled ; lv2:default 0.0 ; lv2:minimum 0.0 ; lv2:maximum 1.0 ; - lv2pg:group synthv1_lv2:101_DCO1 ; + lv2pg:group synthv1_lv2:G101_DCO1 ; ], [ a lv2:InputPort, lv2:ControlPort ; - lv2:index 71 ; + lv2:index 73 ; lv2:symbol "DCO2_BALANCE" ; lv2:name "DCO2 Balance" ; lv2:default 0.0 ; lv2:minimum -1.0 ; lv2:maximum 1.0 ; - lv2pg:group synthv1_lv2:201_DCO2 ; + lv2pg:group synthv1_lv2:G201_DCO2 ; ], [ a lv2:InputPort, lv2:ControlPort ; - lv2:index 72 ; + lv2:index 74 ; lv2:symbol "DCO2_DETUNE" ; lv2:name "DCO2 Detune" ; lv2:default 0.1 ; lv2:minimum 0.0 ; lv2:maximum 1.0 ; - lv2pg:group synthv1_lv2:201_DCO2 ; + lv2pg:group synthv1_lv2:G201_DCO2 ; ], [ a lv2:InputPort, lv2:ControlPort ; - lv2:index 73 ; + lv2:index 75 ; lv2:symbol "DCO2_PHASE" ; lv2:name "DCO2 Phase" ; lv2:default 0.0 ; lv2:minimum 0.0 ; lv2:maximum 1.0 ; - lv2pg:group synthv1_lv2:201_DCO2 ; + lv2pg:group synthv1_lv2:G201_DCO2 ; ], [ a lv2:InputPort, lv2:ControlPort ; - lv2:index 74 ; + lv2:index 76 ; lv2:symbol "DCO2_RINGMOD" ; lv2:name "DCO2 Ring Mod" ; lv2:default 0.0 ; lv2:minimum 0.0 ; lv2:maximum 1.0 ; - lv2pg:group synthv1_lv2:101_DCO1 ; + lv2pg:group synthv1_lv2:G101_DCO1 ; ], [ a lv2:InputPort, lv2:ControlPort ; - lv2:index 75 ; + lv2:index 77 ; lv2:symbol "DCO2_OCTAVE" ; lv2:name "DCO2 Octave" ; lv2:default -2.0 ; lv2:minimum -4.0 ; lv2:maximum 4.0 ; - lv2pg:group synthv1_lv2:201_DCO2 ; + lv2pg:group synthv1_lv2:G201_DCO2 ; ], [ a lv2:InputPort, lv2:ControlPort ; - lv2:index 76 ; + lv2:index 78 ; lv2:symbol "DCO2_TUNING" ; lv2:name "DCO2 Tuning" ; lv2:default 0.0 ; lv2:minimum -1.0 ; lv2:maximum 1.0 ; - lv2pg:group synthv1_lv2:201_DCO2 ; + lv2pg:group synthv1_lv2:G201_DCO2 ; ], [ a lv2:InputPort, lv2:ControlPort ; - lv2:index 77 ; + lv2:index 79 ; lv2:symbol "DCO2_GLIDE" ; lv2:name "DCO2 Glide" ; lv2:default 0.0 ; lv2:minimum 0.0 ; lv2:maximum 1.0 ; - lv2pg:group synthv1_lv2:201_DCO2 ; + lv2pg:group synthv1_lv2:G201_DCO2 ; ], [ a lv2:InputPort, lv2:ControlPort ; - lv2:index 78 ; + lv2:index 80 ; lv2:symbol "DCO2_ENVTIME" ; lv2:name "DCO2 Env.Time" ; lv2:default 0.5 ; lv2:minimum 0.0 ; lv2:maximum 1.0 ; - lv2pg:group synthv1_lv2:201_DCO2 ; + lv2pg:group synthv1_lv2:G201_DCO2 ; ], [ a lv2:InputPort, lv2:ControlPort ; - lv2:index 79 ; + lv2:index 81 ; + lv2:symbol "DCF2_ENABLED" ; + lv2:name "DCF2 Enabled" ; + lv2:portProperty lv2:toggled ; + lv2:default 1.0 ; + lv2:minimum 0.0 ; + lv2:maximum 1.0 ; + lv2pg:group synthv1_lv2:G202_DCF2 ; + ], [ + a lv2:InputPort, lv2:ControlPort ; + lv2:index 82 ; lv2:symbol "DCF2_CUTOFF" ; lv2:name "DCF2 Cutoff" ; lv2:default 0.5 ; lv2:minimum 0.0 ; lv2:maximum 1.0 ; - lv2pg:group synthv1_lv2:202_DCF2 ; + lv2pg:group synthv1_lv2:G202_DCF2 ; ], [ a lv2:InputPort, lv2:ControlPort ; - lv2:index 80 ; + lv2:index 83 ; lv2:symbol "DCF2_RESO" ; lv2:name "DCF2 Resonance" ; lv2:default 0.0 ; lv2:minimum 0.0 ; lv2:maximum 1.0 ; - lv2pg:group synthv1_lv2:202_DCF2 ; + lv2pg:group synthv1_lv2:G202_DCF2 ; ], [ a lv2:InputPort, lv2:ControlPort ; - lv2:index 81 ; + lv2:index 84 ; lv2:symbol "DCF2_TYPE" ; lv2:name "DCF2 Type" ; lv2:portProperty lv2:integer, lv2:enumeration ; @@ -806,10 +845,10 @@ lv2:default 0.0 ; lv2:minimum 0.0 ; lv2:maximum 3.0 ; - lv2pg:group synthv1_lv2:202_DCF2 ; + lv2pg:group synthv1_lv2:G202_DCF2 ; ], [ a lv2:InputPort, lv2:ControlPort ; - lv2:index 82 ; + lv2:index 85 ; lv2:symbol "DCF2_SLOPE" ; lv2:name "DCF2 Slope" ; lv2:portProperty lv2:integer, lv2:enumeration ; @@ -820,55 +859,65 @@ lv2:default 0.0 ; lv2:minimum 0.0 ; lv2:maximum 3.0 ; - lv2pg:group synthv1_lv2:202_DCF2 ; + lv2pg:group synthv1_lv2:G202_DCF2 ; ], [ a lv2:InputPort, lv2:ControlPort ; - lv2:index 83 ; + lv2:index 86 ; lv2:symbol "DCF2_ENVELOPE" ; lv2:name "DCF2 Envelope" ; lv2:default 1.0 ; lv2:minimum -1.0 ; lv2:maximum 1.0 ; - lv2pg:group synthv1_lv2:202_DCF2 ; + lv2pg:group synthv1_lv2:G202_DCF2 ; ], [ a lv2:InputPort, lv2:ControlPort ; - lv2:index 84 ; + lv2:index 87 ; lv2:symbol "DCF2_ATTACK" ; lv2:name "DCF2 Attack" ; lv2:default 0.0 ; lv2:minimum 0.0 ; lv2:maximum 1.0 ; - lv2pg:group synthv1_lv2:202_DCF2 ; + lv2pg:group synthv1_lv2:G202_DCF2 ; ], [ a lv2:InputPort, lv2:ControlPort ; - lv2:index 85 ; + lv2:index 88 ; lv2:symbol "DCF2_DECAY" ; lv2:name "DCF2 Decay" ; lv2:default 0.2 ; lv2:minimum 0.0 ; lv2:maximum 1.0 ; - lv2pg:group synthv1_lv2:202_DCF2 ; + lv2pg:group synthv1_lv2:G202_DCF2 ; ], [ a lv2:InputPort, lv2:ControlPort ; - lv2:index 86 ; + lv2:index 89 ; lv2:symbol "DCF2_SUSTAIN" ; lv2:name "DCF2 Sustain" ; lv2:default 0.5 ; lv2:minimum 0.0 ; lv2:maximum 1.0 ; - lv2pg:group synthv1_lv2:202_DCF2 ; + lv2pg:group synthv1_lv2:G202_DCF2 ; ], [ a lv2:InputPort, lv2:ControlPort ; - lv2:index 87 ; + lv2:index 90 ; lv2:symbol "DCF2_RELEASE" ; lv2:name "DCF2 Release" ; lv2:default 0.5 ; lv2:minimum 0.0 ; lv2:maximum 1.0 ; - lv2pg:group synthv1_lv2:202_DCF2 ; + lv2pg:group synthv1_lv2:G202_DCF2 ; ], [ a lv2:InputPort, lv2:ControlPort ; - lv2:index 88 ; + lv2:index 91 ; + lv2:symbol "LFO2_ENABLED" ; + lv2:name "LFO2 Enabled" ; + lv2:portProperty lv2:toggled ; + lv2:default 1.0 ; + lv2:minimum 0.0 ; + lv2:maximum 1.0 ; + lv2pg:group synthv1_lv2:G203_LFO2 ; + ], [ + a lv2:InputPort, lv2:ControlPort ; + lv2:index 92 ; lv2:symbol "LFO2_SHAPE" ; lv2:name "LFO2 Wave Shape" ; lv2:portProperty lv2:integer, lv2:enumeration ; @@ -880,283 +929,283 @@ lv2:default 1.0 ; lv2:minimum 0.0 ; lv2:maximum 4.0 ; - lv2pg:group synthv1_lv2:203_LFO2 ; + lv2pg:group synthv1_lv2:G203_LFO2 ; ], [ a lv2:InputPort, lv2:ControlPort ; - lv2:index 89 ; + lv2:index 93 ; lv2:symbol "LFO2_WIDTH" ; lv2:name "LFO2 Wave Width" ; lv2:default 1.0 ; lv2:minimum 0.0 ; lv2:maximum 1.0 ; - lv2pg:group synthv1_lv2:203_LFO2 ; + lv2pg:group synthv1_lv2:G203_LFO2 ; ], [ a lv2:InputPort, lv2:ControlPort ; - lv2:index 90 ; + lv2:index 94 ; lv2:symbol "LFO2_BPM" ; lv2:name "LFO2 BPM" ; lv2:default 180.0 ; lv2:minimum 0.0 ; lv2:maximum 360.0 ; - lv2pg:group synthv1_lv2:203_LFO2 ; + lv2pg:group synthv1_lv2:G203_LFO2 ; ], [ a lv2:InputPort, lv2:ControlPort ; - lv2:index 91 ; + lv2:index 95 ; lv2:symbol "LFO2_RATE" ; lv2:name "LFO2 Rate" ; lv2:default 0.5 ; lv2:minimum 0.0 ; lv2:maximum 1.0 ; - lv2pg:group synthv1_lv2:203_LFO2 ; + lv2pg:group synthv1_lv2:G203_LFO2 ; ], [ a lv2:InputPort, lv2:ControlPort ; - lv2:index 92 ; + lv2:index 96 ; lv2:symbol "LFO2_SYNC" ; lv2:name "LFO2 Sync" ; lv2:portProperty lv2:toggled ; lv2:default 0.0 ; lv2:minimum 0.0 ; lv2:maximum 1.0 ; - lv2pg:group synthv1_lv2:203_LFO2 ; + lv2pg:group synthv1_lv2:G203_LFO2 ; ], [ a lv2:InputPort, lv2:ControlPort ; - lv2:index 93 ; + lv2:index 97 ; lv2:symbol "LFO2_SWEEP" ; lv2:name "LFO2 Sweep" ; lv2:default 0.0 ; lv2:minimum -1.0 ; lv2:maximum 1.0 ; - lv2pg:group synthv1_lv2:203_LFO2 ; + lv2pg:group synthv1_lv2:G203_LFO2 ; ], [ a lv2:InputPort, lv2:ControlPort ; - lv2:index 94 ; + lv2:index 98 ; lv2:symbol "LFO2_PITCH" ; lv2:name "LFO2 Pitch" ; lv2:default 0.0 ; lv2:minimum -1.0 ; lv2:maximum 1.0 ; - lv2pg:group synthv1_lv2:203_LFO2 ; + lv2pg:group synthv1_lv2:G203_LFO2 ; ], [ a lv2:InputPort, lv2:ControlPort ; - lv2:index 95 ; + lv2:index 99 ; lv2:symbol "LFO2_BALANCE" ; lv2:name "LFO2 Balance" ; lv2:default 0.0 ; lv2:minimum -1.0 ; lv2:maximum 1.0 ; - lv2pg:group synthv1_lv2:103_LFO1 ; + lv2pg:group synthv1_lv2:G103_LFO1 ; ], [ a lv2:InputPort, lv2:ControlPort ; - lv2:index 96 ; + lv2:index 100 ; lv2:symbol "LFO2_RINGMOD" ; lv2:name "LFO2 Ring Mod" ; lv2:default 0.0 ; lv2:minimum -1.0 ; lv2:maximum 1.0 ; - lv2pg:group synthv1_lv2:103_LFO1 ; + lv2pg:group synthv1_lv2:G103_LFO1 ; ], [ a lv2:InputPort, lv2:ControlPort ; - lv2:index 97 ; + lv2:index 101 ; lv2:symbol "LFO2_CUTOFF" ; lv2:name "LFO2 Cutoff" ; lv2:default 0.0 ; lv2:minimum -1.0 ; lv2:maximum 1.0 ; - lv2pg:group synthv1_lv2:203_LFO2 ; + lv2pg:group synthv1_lv2:G203_LFO2 ; ], [ a lv2:InputPort, lv2:ControlPort ; - lv2:index 98 ; + lv2:index 102 ; lv2:symbol "LFO2_RESO" ; lv2:name "LFO2 Resonance" ; lv2:default 0.0 ; lv2:minimum -1.0 ; lv2:maximum 1.0 ; - lv2pg:group synthv1_lv2:203_LFO2 ; + lv2pg:group synthv1_lv2:G203_LFO2 ; ], [ a lv2:InputPort, lv2:ControlPort ; - lv2:index 99 ; + lv2:index 103 ; lv2:symbol "LFO2_PANNING" ; lv2:name "LFO2 Panning" ; lv2:default 0.0 ; lv2:minimum -1.0 ; lv2:maximum 1.0 ; - lv2pg:group synthv1_lv2:203_LFO2 ; + lv2pg:group synthv1_lv2:G203_LFO2 ; ], [ a lv2:InputPort, lv2:ControlPort ; - lv2:index 100 ; + lv2:index 104 ; lv2:symbol "LFO2_VOLUME" ; lv2:name "LFO2 Volume" ; lv2:default 0.0 ; lv2:minimum -1.0 ; lv2:maximum 1.0 ; - lv2pg:group synthv1_lv2:203_LFO2 ; + lv2pg:group synthv1_lv2:G203_LFO2 ; ], [ a lv2:InputPort, lv2:ControlPort ; - lv2:index 101 ; + lv2:index 105 ; lv2:symbol "LFO2_ATTACK" ; lv2:name "LFO2 Attack" ; lv2:default 0.0 ; lv2:minimum 0.0 ; lv2:maximum 1.0 ; - lv2pg:group synthv1_lv2:203_LFO2 ; + lv2pg:group synthv1_lv2:G203_LFO2 ; ], [ a lv2:InputPort, lv2:ControlPort ; - lv2:index 102 ; + lv2:index 106 ; lv2:symbol "LFO2_DECAY" ; lv2:name "LFO2 Decay" ; lv2:default 0.1 ; lv2:minimum 0.0 ; lv2:maximum 1.0 ; - lv2pg:group synthv1_lv2:203_LFO2 ; + lv2pg:group synthv1_lv2:G203_LFO2 ; ], [ a lv2:InputPort, lv2:ControlPort ; - lv2:index 103 ; + lv2:index 107 ; lv2:symbol "LFO2_SUSTAIN" ; lv2:name "LFO2 Sustain" ; lv2:default 1.0 ; lv2:minimum 0.0 ; lv2:maximum 1.0 ; - lv2pg:group synthv1_lv2:203_LFO2 ; + lv2pg:group synthv1_lv2:G203_LFO2 ; ], [ a lv2:InputPort, lv2:ControlPort ; - lv2:index 104 ; + lv2:index 108 ; lv2:symbol "LFO2_RELEASE" ; lv2:name "LFO2 Release" ; lv2:default 0.5 ; lv2:minimum 0.0 ; lv2:maximum 1.0 ; - lv2pg:group synthv1_lv2:203_LFO2 ; + lv2pg:group synthv1_lv2:G203_LFO2 ; ], [ a lv2:InputPort, lv2:ControlPort ; - lv2:index 105 ; + lv2:index 109 ; lv2:symbol "DCA2_VOLUME" ; lv2:name "DCA2 Volume" ; lv2:default 0.5 ; lv2:minimum 0.0 ; lv2:maximum 1.0 ; - lv2pg:group synthv1_lv2:204_DCA2 ; + lv2pg:group synthv1_lv2:G204_DCA2 ; ], [ a lv2:InputPort, lv2:ControlPort ; - lv2:index 106 ; + lv2:index 110 ; lv2:symbol "DCA2_ATTACK" ; lv2:name "DCA2 Attack" ; lv2:default 0.0 ; lv2:minimum 0.0 ; lv2:maximum 1.0 ; - lv2pg:group synthv1_lv2:204_DCA2 ; + lv2pg:group synthv1_lv2:G204_DCA2 ; ], [ a lv2:InputPort, lv2:ControlPort ; - lv2:index 107 ; + lv2:index 111 ; lv2:symbol "DCA2_DECAY" ; lv2:name "DCA2 Decay" ; lv2:default 0.1 ; lv2:minimum 0.0 ; lv2:maximum 1.0 ; - lv2pg:group synthv1_lv2:204_DCA2 ; + lv2pg:group synthv1_lv2:G204_DCA2 ; ], [ a lv2:InputPort, lv2:ControlPort ; - lv2:index 108 ; + lv2:index 112 ; lv2:symbol "DCA2_SUSTAIN" ; lv2:name "DCA2 Sustain" ; lv2:default 1.0 ; lv2:minimum 0.0 ; lv2:maximum 1.0 ; - lv2pg:group synthv1_lv2:204_DCA2 ; + lv2pg:group synthv1_lv2:G204_DCA2 ; ], [ a lv2:InputPort, lv2:ControlPort ; - lv2:index 109 ; + lv2:index 113 ; lv2:symbol "DCA2_RELEASE" ; lv2:name "DCA2 Release" ; lv2:default 0.1 ; lv2:minimum 0.0 ; lv2:maximum 1.0 ; - lv2pg:group synthv1_lv2:204_DCA2 ; + lv2pg:group synthv1_lv2:G204_DCA2 ; ], [ a lv2:InputPort, lv2:ControlPort ; - lv2:index 110 ; + lv2:index 114 ; lv2:symbol "OUT2_WIDTH" ; lv2:name "OUT2 Stereo Width" ; lv2:default 0.0 ; lv2:minimum -1.0 ; lv2:maximum 1.0 ; - lv2pg:group synthv1_lv2:205_OUT2 ; + lv2pg:group synthv1_lv2:G205_OUT2 ; ], [ a lv2:InputPort, lv2:ControlPort ; - lv2:index 111 ; + lv2:index 115 ; lv2:symbol "OUT2_PANNING" ; lv2:name "OUT2 Panning" ; lv2:default 0.0 ; lv2:minimum -1.0 ; lv2:maximum 1.0 ; - lv2pg:group synthv1_lv2:205_OUT2 ; + lv2pg:group synthv1_lv2:G205_OUT2 ; ], [ a lv2:InputPort, lv2:ControlPort ; - lv2:index 112 ; + lv2:index 116 ; lv2:symbol "OUT2_FXSEND" ; lv2:name "OUT2 FX Send" ; lv2:default 1.0 ; lv2:minimum 0.0 ; lv2:maximum 1.0 ; - lv2pg:group synthv1_lv2:205_OUT2 ; + lv2pg:group synthv1_lv2:G205_OUT2 ; ], [ a lv2:InputPort, lv2:ControlPort ; - lv2:index 113 ; + lv2:index 117 ; lv2:symbol "OUT2_VOLUME" ; lv2:name "OUT2 Volume" ; lv2:default 0.5 ; lv2:minimum 0.0 ; lv2:maximum 1.0 ; - lv2pg:group synthv1_lv2:205_OUT2 ; + lv2pg:group synthv1_lv2:G205_OUT2 ; ] ; lv2:port [ a lv2:InputPort, lv2:ControlPort ; - lv2:index 114 ; + lv2:index 118 ; lv2:symbol "DEF2_PITCHBEND" ; lv2:name "DEF2 Pitchbend" ; lv2:default 0.2 ; lv2:minimum 0.0 ; lv2:maximum 1.0 ; - lv2pg:group synthv1_lv2:206_DEF2 ; + lv2pg:group synthv1_lv2:G206_DEF2 ; ], [ a lv2:InputPort, lv2:ControlPort ; - lv2:index 115 ; + lv2:index 119 ; lv2:symbol "DEF2_MODWHEEL" ; lv2:name "DEF2 Modwheel" ; lv2:default 0.2 ; lv2:minimum 0.0 ; lv2:maximum 1.0 ; - lv2pg:group synthv1_lv2:206_DEF2 ; + lv2pg:group synthv1_lv2:G206_DEF2 ; ], [ a lv2:InputPort, lv2:ControlPort ; - lv2:index 116 ; + lv2:index 120 ; lv2:symbol "DEF2_PRESSURE" ; lv2:name "DEF2 Pressure" ; lv2:default 0.2 ; lv2:minimum 0.0 ; lv2:maximum 1.0 ; - lv2pg:group synthv1_lv2:206_DEF2 ; + lv2pg:group synthv1_lv2:G206_DEF2 ; ], [ a lv2:InputPort, lv2:ControlPort ; - lv2:index 117 ; + lv2:index 121 ; lv2:symbol "DEF2_VELOCITY" ; lv2:name "DEF2 Velocity" ; lv2:default 0.2 ; lv2:minimum 0.0 ; lv2:maximum 1.0 ; - lv2pg:group synthv1_lv2:206_DEF2 ; + lv2pg:group synthv1_lv2:G206_DEF2 ; ], [ a lv2:InputPort, lv2:ControlPort ; - lv2:index 118 ; + lv2:index 122 ; lv2:symbol "DEF2_CHANNEL" ; lv2:name "DEF2 Channel" ; lv2:portProperty lv2:integer ; lv2:default 0.0 ; lv2:minimum 0.0 ; lv2:maximum 16.0 ; - lv2pg:group synthv1_lv2:206_DEF2 ; + lv2pg:group synthv1_lv2:G206_DEF2 ; ], [ a lv2:InputPort, lv2:ControlPort ; - lv2:index 119 ; + lv2:index 123 ; lv2:symbol "DEF2_MONO" ; lv2:name "DEF2 Mono" ; lv2:portProperty lv2:integer, lv2:enumeration ; @@ -1166,328 +1215,392 @@ lv2:default 0.0 ; lv2:minimum 0.0 ; lv2:maximum 2.0 ; - lv2pg:group synthv1_lv2:206_DEF2 ; + lv2pg:group synthv1_lv2:G206_DEF2 ; ] ; lv2:port [ a lv2:InputPort, lv2:ControlPort ; - lv2:index 120 ; + lv2:index 124 ; lv2:symbol "CHO1_WET" ; lv2:name "Chorus Wet" ; lv2:default 0.0 ; lv2:minimum 0.0 ; lv2:maximum 1.0 ; - lv2pg:group synthv1_lv2:301_CHO1 ; + lv2pg:group synthv1_lv2:G301_CHO1 ; ], [ a lv2:InputPort, lv2:ControlPort ; - lv2:index 121 ; + lv2:index 125 ; lv2:symbol "CHO1_DELAY" ; lv2:name "Chorus Delay" ; lv2:default 0.5 ; lv2:minimum 0.0 ; lv2:maximum 1.0 ; - lv2pg:group synthv1_lv2:301_CHO1 ; + lv2pg:group synthv1_lv2:G301_CHO1 ; ], [ a lv2:InputPort, lv2:ControlPort ; - lv2:index 122 ; + lv2:index 126 ; lv2:symbol "CHO1_FEEDB" ; lv2:name "Chorus Feedback" ; lv2:default 0.5 ; lv2:minimum 0.0 ; lv2:maximum 1.0 ; - lv2pg:group synthv1_lv2:301_CHO1 ; + lv2pg:group synthv1_lv2:G301_CHO1 ; ], [ a lv2:InputPort, lv2:ControlPort ; - lv2:index 123 ; + lv2:index 127 ; lv2:symbol "CHO1_RATE" ; lv2:name "Chorus Rate" ; lv2:default 0.5 ; lv2:minimum 0.0 ; lv2:maximum 1.0 ; - lv2pg:group synthv1_lv2:301_CHO1 ; + lv2pg:group synthv1_lv2:G301_CHO1 ; ], [ a lv2:InputPort, lv2:ControlPort ; - lv2:index 124 ; + lv2:index 128 ; lv2:symbol "CHO1_MOD" ; lv2:name "Chorus Modulation" ; lv2:default 0.5 ; lv2:minimum 0.0 ; lv2:maximum 1.0 ; - lv2pg:group synthv1_lv2:301_CHO1 ; + lv2pg:group synthv1_lv2:G301_CHO1 ; ] ; lv2:port [ a lv2:InputPort, lv2:ControlPort ; - lv2:index 125 ; + lv2:index 129 ; lv2:symbol "FLA1_WET" ; lv2:name "Flanger Wet" ; lv2:default 0.0 ; lv2:minimum 0.0 ; lv2:maximum 1.0 ; - lv2pg:group synthv1_lv2:302_FLA1 ; + lv2pg:group synthv1_lv2:G302_FLA1 ; ], [ a lv2:InputPort, lv2:ControlPort ; - lv2:index 126 ; + lv2:index 130 ; lv2:symbol "FLA1_DELAY" ; lv2:name "Flanger Delay" ; lv2:default 0.5 ; lv2:minimum 0.0 ; lv2:maximum 1.0 ; - lv2pg:group synthv1_lv2:302_FLA1 ; + lv2pg:group synthv1_lv2:G302_FLA1 ; ], [ a lv2:InputPort, lv2:ControlPort ; - lv2:index 127 ; + lv2:index 131 ; lv2:symbol "FLA1_FEEDB" ; lv2:name "Flanger Feedback" ; lv2:default 0.5 ; lv2:minimum 0.0 ; lv2:maximum 1.0 ; - lv2pg:group synthv1_lv2:302_FLA1 ; + lv2pg:group synthv1_lv2:G302_FLA1 ; ], [ a lv2:InputPort, lv2:ControlPort ; - lv2:index 128 ; + lv2:index 132 ; lv2:symbol "FLA1_DAFT" ; lv2:name "Flanger Daft" ; lv2:default 0.0 ; lv2:minimum 0.0 ; lv2:maximum 1.0 ; - lv2pg:group synthv1_lv2:302_FLA1 ; + lv2pg:group synthv1_lv2:G302_FLA1 ; ] ; lv2:port [ a lv2:InputPort, lv2:ControlPort ; - lv2:index 129 ; + lv2:index 133 ; lv2:symbol "PHA1_WET" ; lv2:name "Phaser Wet" ; lv2:default 0.0 ; lv2:minimum 0.0 ; lv2:maximum 1.0 ; - lv2pg:group synthv1_lv2:303_PHA1 ; + lv2pg:group synthv1_lv2:G303_PHA1 ; ], [ a lv2:InputPort, lv2:ControlPort ; - lv2:index 130 ; + lv2:index 134 ; lv2:symbol "PHA1_RATE" ; lv2:name "Phaser Rate" ; lv2:default 0.5 ; lv2:minimum 0.0 ; lv2:maximum 1.0 ; - lv2pg:group synthv1_lv2:303_PHA1 ; + lv2pg:group synthv1_lv2:G303_PHA1 ; ], [ a lv2:InputPort, lv2:ControlPort ; - lv2:index 131 ; + lv2:index 135 ; lv2:symbol "PHA1_FEEDB" ; lv2:name "Phaser Feedback" ; lv2:default 0.5 ; lv2:minimum 0.0 ; lv2:maximum 1.0 ; - lv2pg:group synthv1_lv2:303_PHA1 ; + lv2pg:group synthv1_lv2:G303_PHA1 ; ], [ a lv2:InputPort, lv2:ControlPort ; - lv2:index 132 ; + lv2:index 136 ; lv2:symbol "PHA1_DEPTH" ; lv2:name "Phaser Depth" ; lv2:default 0.5 ; lv2:minimum 0.0 ; lv2:maximum 1.0 ; - lv2pg:group synthv1_lv2:303_PHA1 ; + lv2pg:group synthv1_lv2:G303_PHA1 ; ], [ a lv2:InputPort, lv2:ControlPort ; - lv2:index 133 ; + lv2:index 137 ; lv2:symbol "PHA1_DAFT" ; lv2:name "Phaser Daft" ; lv2:default 0.0 ; lv2:minimum 0.0 ; lv2:maximum 1.0 ; - lv2pg:group synthv1_lv2:303_PHA1 ; + lv2pg:group synthv1_lv2:G303_PHA1 ; ] ; lv2:port [ a lv2:InputPort, lv2:ControlPort ; - lv2:index 134 ; + lv2:index 138 ; lv2:symbol "DEL1_WET" ; lv2:name "Delay Wet" ; lv2:default 0.0 ; lv2:minimum 0.0 ; lv2:maximum 1.0 ; - lv2pg:group synthv1_lv2:304_DEL1 ; + lv2pg:group synthv1_lv2:G304_DEL1 ; ], [ a lv2:InputPort, lv2:ControlPort ; - lv2:index 135 ; + lv2:index 139 ; lv2:symbol "DEL1_DELAY" ; lv2:name "Delay Delay" ; lv2:default 0.5 ; lv2:minimum 0.0 ; lv2:maximum 1.0 ; - lv2pg:group synthv1_lv2:304_DEL1 ; + lv2pg:group synthv1_lv2:G304_DEL1 ; ], [ a lv2:InputPort, lv2:ControlPort ; - lv2:index 136 ; + lv2:index 140 ; lv2:symbol "DEL1_FEEDB" ; lv2:name "Delay Feedback" ; lv2:default 0.5 ; lv2:minimum 0.0 ; lv2:maximum 1.0 ; - lv2pg:group synthv1_lv2:304_DEL1 ; + lv2pg:group synthv1_lv2:G304_DEL1 ; ], [ a lv2:InputPort, lv2:ControlPort ; - lv2:index 137 ; + lv2:index 141 ; lv2:symbol "DEL1_BPM" ; lv2:name "Delay BPM" ; lv2:default 180.0 ; lv2:minimum 0.0 ; lv2:maximum 360.0 ; - lv2pg:group synthv1_lv2:304_DEL1 ; + lv2pg:group synthv1_lv2:G304_DEL1 ; ] ; lv2:port [ a lv2:InputPort, lv2:ControlPort ; - lv2:index 138 ; + lv2:index 142 ; lv2:symbol "REV1_WET" ; lv2:name "Reverb Wet" ; lv2:default 0.0 ; lv2:minimum 0.0 ; lv2:maximum 1.0 ; - lv2pg:group synthv1_lv2:305_REV1 ; + lv2pg:group synthv1_lv2:G305_REV1 ; ], [ a lv2:InputPort, lv2:ControlPort ; - lv2:index 139 ; + lv2:index 143 ; lv2:symbol "REV1_ROOM" ; lv2:name "Reverb Room" ; lv2:default 0.5 ; lv2:minimum 0.0 ; lv2:maximum 1.0 ; - lv2pg:group synthv1_lv2:305_REV1 ; + lv2pg:group synthv1_lv2:G305_REV1 ; ], [ a lv2:InputPort, lv2:ControlPort ; - lv2:index 140 ; + lv2:index 144 ; lv2:symbol "REV1_DAMP" ; lv2:name "Reverb Damp" ; lv2:default 0.5 ; lv2:minimum 0.0 ; lv2:maximum 1.0 ; - lv2pg:group synthv1_lv2:305_REV1 ; + lv2pg:group synthv1_lv2:G305_REV1 ; ], [ a lv2:InputPort, lv2:ControlPort ; - lv2:index 141 ; + lv2:index 145 ; lv2:symbol "REV1_FEEDB" ; lv2:name "Reverb Feedback" ; lv2:default 0.5 ; lv2:minimum 0.0 ; lv2:maximum 1.0 ; - lv2pg:group synthv1_lv2:305_REV1 ; + lv2pg:group synthv1_lv2:G305_REV1 ; ], [ a lv2:InputPort, lv2:ControlPort ; - lv2:index 142 ; + lv2:index 146 ; lv2:symbol "REV1_WIDTH" ; lv2:name "Reverb Width" ; lv2:default 0.0 ; lv2:minimum -1.0 ; lv2:maximum 1.0 ; - lv2pg:group synthv1_lv2:305_REV1 ; + lv2pg:group synthv1_lv2:G305_REV1 ; ] ; lv2:port [ a lv2:InputPort, lv2:ControlPort ; - lv2:index 143 ; + lv2:index 147 ; lv2:symbol "DYN1_COMPRESS" ; lv2:name "Dynamic Compressor" ; lv2:portProperty lv2:toggled ; lv2:default 0.0 ; lv2:minimum 0.0 ; lv2:maximum 1.0 ; - lv2pg:group synthv1_lv2:306_DYN1 ; + lv2pg:group synthv1_lv2:G306_DYN1 ; ], [ a lv2:InputPort, lv2:ControlPort ; - lv2:index 144 ; + lv2:index 148 ; lv2:symbol "DYN1_LIMITER" ; lv2:name "Dynamic Limiter" ; lv2:portProperty lv2:toggled ; lv2:default 1.0 ; lv2:minimum 0.0 ; lv2:maximum 1.0 ; - lv2pg:group synthv1_lv2:306_DYN1 ; + lv2pg:group synthv1_lv2:G306_DYN1 ; + ] ; + lv2:port [ + a lv2:InputPort, lv2:ControlPort ; + lv2:index 149 ; + lv2:symbol "KEY1_LOW" ; + lv2:name "Keyboard Low" ; + lv2:portProperty lv2:integer ; + lv2:default 0.0 ; + lv2:minimum 0.0 ; + lv2:maximum 127.0 ; + lv2pg:group synthv1_lv2:G501_KEY1 ; + ], [ + a lv2:InputPort, lv2:ControlPort ; + lv2:index 150 ; + lv2:symbol "KEY1_HIGH" ; + lv2:name "Keyboard High" ; + lv2:portProperty lv2:integer ; + lv2:default 127.0 ; + lv2:minimum 0.0 ; + lv2:maximum 127.0 ; + lv2pg:group synthv1_lv2:G501_KEY1 ; ] . -synthv1_lv2:101_DCO1 + +synthv1_lv2:P201_TUNING_ENABLED + a lv2:Parameter ; + rdfs:label "P201 Tuning Enabled" ; + rdfs:range lv2atom:Bool . + +synthv1_lv2:P202_TUNING_REF_PITCH + a lv2:Parameter ; + rdfs:label "P202 Tuning Reference Pitch" ; + rdfs:range lv2atom:Float ; + lv2:default 440.0 ; + lv2:minimum 20.0 ; + lv2:maximum 20000.0 . + +synthv1_lv2:P203_TUNING_REF_NOTE + a lv2:Parameter ; + rdfs:label "P203 Tuning Reference Note" ; + rdfs:range lv2atom:Int ; + lv2:default 69 ; + lv2:minimum 0 ; + lv2:maximum 127 . + +synthv1_lv2:P204_TUNING_SCALE_FILE + a lv2:Parameter ; + rdfs:label "P204 Tuning Scale File" ; + rdfs:range lv2atom:Path . + +synthv1_lv2:P205_TUNING_KEYMAP_FILE + a lv2:Parameter ; + rdfs:label "P205 Tuning Key Map File" ; + rdfs:range lv2atom:Path . + + +synthv1_lv2:G101_DCO1 a lv2pg:InputGroup; lv2:name "Synth 1 - DCO1" ; lv2:symbol "DCO1" . -synthv1_lv2:102_DCF1 +synthv1_lv2:G102_DCF1 a lv2pg:InputGroup; lv2:name "Synth 1 - DCF1" ; lv2:symbol "DCF1" . -synthv1_lv2:103_LFO1 +synthv1_lv2:G103_LFO1 a lv2pg:InputGroup; lv2:name "Synth 1 - LFO1" ; lv2:symbol "LFO1" . -synthv1_lv2:104_DCA1 +synthv1_lv2:G104_DCA1 a lv2pg:InputGroup; lv2:name "Synth 1 - DCA1" ; lv2:symbol "DCA1" . -synthv1_lv2:105_OUT1 +synthv1_lv2:G105_OUT1 a lv2pg:InputGroup; lv2:name "Synth 1 - OUT1" ; lv2:symbol "OUT1" . -synthv1_lv2:106_DEF1 +synthv1_lv2:G106_DEF1 a lv2pg:InputGroup; lv2:name "Synth 1 - DEF1" ; lv2:symbol "DEF1" . -synthv1_lv2:201_DCO2 +synthv1_lv2:G201_DCO2 a lv2pg:InputGroup; lv2:name "Synth 2 - DCO2" ; lv2:symbol "DCO2" . -synthv1_lv2:202_DCF2 +synthv1_lv2:G202_DCF2 a lv2pg:InputGroup; lv2:name "Synth 2 - DCF2" ; lv2:symbol "DCF2" . -synthv1_lv2:203_LFO2 +synthv1_lv2:G203_LFO2 a lv2pg:InputGroup; lv2:name "Synth 2 - LFO2" ; lv2:symbol "LFO2" . -synthv1_lv2:204_DCA2 +synthv1_lv2:G204_DCA2 a lv2pg:InputGroup; lv2:name "Synth 2 - DCA2" ; lv2:symbol "DCA2" . -synthv1_lv2:205_OUT2 +synthv1_lv2:G205_OUT2 a lv2pg:InputGroup; lv2:name "Synth 2 - OUT2" ; lv2:symbol "OUT2" . -synthv1_lv2:206_DEF2 +synthv1_lv2:G206_DEF2 a lv2pg:InputGroup; lv2:name "Synth 2 - DEF2" ; lv2:symbol "DEF2" . -synthv1_lv2:301_CHO1 +synthv1_lv2:G301_CHO1 a lv2pg:InputGroup; lv2:name "Effects - Chorus" ; lv2:symbol "CHO1" . -synthv1_lv2:302_FLA1 +synthv1_lv2:G302_FLA1 a lv2pg:InputGroup; lv2:name "Effects - Flanger" ; lv2:symbol "FLA1" . -synthv1_lv2:303_PHA1 +synthv1_lv2:G303_PHA1 a lv2pg:InputGroup; lv2:name "Effects - Phaser" ; lv2:symbol "PHA1" . -synthv1_lv2:304_DEL1 +synthv1_lv2:G304_DEL1 a lv2pg:InputGroup; lv2:name "Effects - Delay" ; lv2:symbol "DEL1" . -synthv1_lv2:305_REV1 +synthv1_lv2:G305_REV1 a lv2pg:InputGroup; lv2:name "Effects - Reverb" ; lv2:symbol "REV1" . -synthv1_lv2:306_DYN1 +synthv1_lv2:G306_DYN1 a lv2pg:InputGroup; lv2:name "Effects - Dynamic" ; lv2:symbol "DYN1" . + +synthv1_lv2:G401_TUN1 + a lv2pg:InputGroup; + lv2:name "Config - Tuning" ; + lv2:symbol "TUN1" . + +synthv1_lv2:G501_KEY1 + a lv2pg:InputGroup; + lv2:name "Input - Keyboard" ; + lv2:symbol "KEY1" . diff -Nru synthv1-0.8.6/src/synthv1.lv2/synthv1_ui-qt4.ttl synthv1-0.9.10+git20190929/src/synthv1.lv2/synthv1_ui-qt4.ttl --- synthv1-0.8.6/src/synthv1.lv2/synthv1_ui-qt4.ttl 2017-12-20 07:56:50.308842973 +0000 +++ synthv1-0.9.10+git20190929/src/synthv1.lv2/synthv1_ui-qt4.ttl 1970-01-01 00:00:00.000000000 +0000 @@ -1,12 +0,0 @@ -@prefix lv2: . -@prefix lv2ui: . - - - a lv2ui:Qt4UI ; - lv2:requiredFeature ; - lv2ui:binary . - - - a ; - lv2:requiredFeature ; - lv2ui:binary . diff -Nru synthv1-0.8.6/src/synthv1.lv2/synthv1_ui-qt5.ttl synthv1-0.9.10+git20190929/src/synthv1.lv2/synthv1_ui-qt5.ttl --- synthv1-0.8.6/src/synthv1.lv2/synthv1_ui-qt5.ttl 2017-12-20 07:56:50.308842973 +0000 +++ synthv1-0.9.10+git20190929/src/synthv1.lv2/synthv1_ui-qt5.ttl 1970-01-01 00:00:00.000000000 +0000 @@ -1,12 +0,0 @@ -@prefix lv2: . -@prefix lv2ui: . - - - a lv2ui:Qt5UI ; - lv2:requiredFeature ; - lv2ui:binary . - - - a ; - lv2:requiredFeature ; - lv2ui:binary . diff -Nru synthv1-0.8.6/src/synthv1.lv2/synthv1_ui.ttl synthv1-0.9.10+git20190929/src/synthv1.lv2/synthv1_ui.ttl --- synthv1-0.8.6/src/synthv1.lv2/synthv1_ui.ttl 1970-01-01 00:00:00.000000000 +0000 +++ synthv1-0.9.10+git20190929/src/synthv1.lv2/synthv1_ui.ttl 2019-09-28 23:05:55.000000000 +0000 @@ -0,0 +1,12 @@ +@prefix lv2: . +@prefix lv2ui: . + + + a lv2ui:X11UI ; + lv2:requiredFeature ; + lv2ui:binary . + + + a ; + lv2:requiredFeature ; + lv2ui:binary . diff -Nru synthv1-0.8.6/src/synthv1_lv2.cpp synthv1-0.9.10+git20190929/src/synthv1_lv2.cpp --- synthv1-0.8.6/src/synthv1_lv2.cpp 2017-12-20 07:56:50.310842973 +0000 +++ synthv1-0.9.10+git20190929/src/synthv1_lv2.cpp 2019-09-28 23:00:43.000000000 +0000 @@ -1,7 +1,7 @@ // synthv1_lv2.cpp // /**************************************************************************** - Copyright (C) 2012-2017, rncbc aka Rui Nuno Capela. All rights reserved. + Copyright (C) 2012-2019, rncbc aka Rui Nuno Capela. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License @@ -20,6 +20,8 @@ *****************************************************************************/ #include "synthv1_lv2.h" +#include "synthv1_config.h" +#include "synthv1_sched.h" #include "synthv1_programs.h" #include "synthv1_controls.h" @@ -33,6 +35,10 @@ #include "lv2/lv2plug.in/ns/ext/options/options.h" #include "lv2/lv2plug.in/ns/ext/buf-size/buf-size.h" +#ifdef CONFIG_LV2_PATCH +#include "lv2/lv2plug.in/ns/ext/patch/patch.h" +#endif + #ifndef CONFIG_LV2_ATOM_FORGE_OBJECT #define lv2_atom_forge_object(forge, frame, id, otype) \ lv2_atom_forge_blank(forge, frame, id, otype) @@ -50,6 +56,8 @@ #include #include +#include + //------------------------------------------------------------------------- // synthv1_lv2 - impl. @@ -67,19 +75,31 @@ { ::memset(&m_urids, 0, sizeof(m_urids)); - m_urid_map = NULL; - m_atom_in = NULL; - m_atom_out = NULL; - m_schedule = NULL; + m_urid_map = nullptr; + m_atom_in = nullptr; + m_atom_out = nullptr; + m_schedule = nullptr; m_ndelta = 0; - const LV2_Options_Option *host_options = NULL; + const LV2_Options_Option *host_options = nullptr; for (int i = 0; host_features && host_features[i]; ++i) { const LV2_Feature *host_feature = host_features[i]; if (::strcmp(host_feature->URI, LV2_URID_MAP_URI) == 0) { m_urid_map = (LV2_URID_Map *) host_feature->data; if (m_urid_map) { + m_urids.p201_tuning_enabled = m_urid_map->map( + m_urid_map->handle, SYNTHV1_LV2_PREFIX "P201_TUNING_ENABLED"); + m_urids.p202_tuning_refPitch = m_urid_map->map( + m_urid_map->handle, SYNTHV1_LV2_PREFIX "P202_TUNING_REF_PITCH"); + m_urids.p203_tuning_refNote = m_urid_map->map( + m_urid_map->handle, SYNTHV1_LV2_PREFIX "P203_TUNING_REF_NOTE"); + m_urids.p204_tuning_scaleFile = m_urid_map->map( + m_urid_map->handle, SYNTHV1_LV2_PREFIX "P204_TUNING_SCALE_FILE"); + m_urids.p205_tuning_keyMapFile = m_urid_map->map( + m_urid_map->handle, SYNTHV1_LV2_PREFIX "P205_TUNING_KEYMAP_FILE"); + m_urids.tun1_update = m_urid_map->map( + m_urid_map->handle, SYNTHV1_LV2_PREFIX "TUN1_UPDATE"); m_urids.atom_Blank = m_urid_map->map( m_urid_map->handle, LV2_ATOM__Blank); m_urids.atom_Object = m_urid_map->map( @@ -88,6 +108,10 @@ m_urid_map->handle, LV2_ATOM__Float); m_urids.atom_Int = m_urid_map->map( m_urid_map->handle, LV2_ATOM__Int); + m_urids.atom_Bool = m_urid_map->map( + m_urid_map->handle, LV2_ATOM__Bool); + m_urids.atom_Path = m_urid_map->map( + m_urid_map->handle, LV2_ATOM__Path); m_urids.time_Position = m_urid_map->map( m_urid_map->handle, LV2_TIME__Position); m_urids.time_beatsPerMinute = m_urid_map->map( @@ -104,6 +128,20 @@ #endif m_urids.state_StateChanged = m_urid_map->map( m_urid_map->handle, LV2_STATE__StateChanged); + #ifdef CONFIG_LV2_PATCH + m_urids.patch_Get = m_urid_map->map( + m_urid_map->handle, LV2_PATCH__Get); + m_urids.patch_Set = m_urid_map->map( + m_urid_map->handle, LV2_PATCH__Set); + m_urids.patch_Put = m_urid_map->map( + m_urid_map->handle, LV2_PATCH__Put); + m_urids.patch_body = m_urid_map->map( + m_urid_map->handle, LV2_PATCH__body); + m_urids.patch_property = m_urid_map->map( + m_urid_map->handle, LV2_PATCH__property); + m_urids.patch_value = m_urid_map->map( + m_urid_map->handle, LV2_PATCH__value); + #endif } } else @@ -144,7 +182,7 @@ m_ins = new float * [nchannels]; m_outs = new float * [nchannels]; for (uint16_t k = 0; k < nchannels; ++k) - m_ins[k] = m_outs[k] = NULL; + m_ins[k] = m_outs[k] = nullptr; } @@ -202,7 +240,7 @@ if (m_atom_in) { LV2_ATOM_SEQUENCE_FOREACH(m_atom_in, event) { - if (event == NULL) + if (event == nullptr) continue; if (event->body.type == m_urids.midi_MidiEvent) { uint8_t *data = (uint8_t *) LV2_ATOM_BODY(&event->body); @@ -225,20 +263,79 @@ const LV2_Atom_Object *object = (LV2_Atom_Object *) &event->body; if (object->body.otype == m_urids.time_Position) { - LV2_Atom *atom = NULL; + LV2_Atom *atom = nullptr; lv2_atom_object_get(object, - m_urids.time_beatsPerMinute, &atom, NULL); + m_urids.time_beatsPerMinute, &atom, nullptr); if (atom && atom->type == m_urids.atom_Float) { const float host_bpm = ((LV2_Atom_Float *) atom)->body; if (::fabsf(host_bpm - synthv1::tempo()) > 0.001f) synthv1::setTempo(host_bpm); } } + #ifdef CONFIG_LV2_PATCH + else + if (object->body.otype == m_urids.patch_Set) { + // set property value + const LV2_Atom *property = nullptr; + const LV2_Atom *value = nullptr; + lv2_atom_object_get(object, + m_urids.patch_property, &property, + m_urids.patch_value, &value, 0); + if (property && value && property->type == m_forge.URID) { + const uint32_t key = ((const LV2_Atom_URID *) property)->body; + const LV2_URID type = value->type; + if (key == m_urids.p201_tuning_enabled + && type == m_urids.atom_Bool) { + const uint32_t enabled + = *(uint32_t *) LV2_ATOM_BODY_CONST(value); + synthv1::setTuningEnabled(enabled > 0); + updateTuning(); + } + else + if (key == m_urids.p202_tuning_refPitch + && type == m_urids.atom_Float) { + const float refPitch + = *(float *) LV2_ATOM_BODY_CONST(value); + synthv1::setTuningRefPitch(refPitch); + updateTuning(); + } + else + if (key == m_urids.p203_tuning_refNote + && type == m_urids.atom_Int) { + const uint32_t refNote + = *(uint32_t *) LV2_ATOM_BODY_CONST(value); + synthv1::setTuningRefNote(refNote); + updateTuning(); + } + else + if (key == m_urids.p204_tuning_scaleFile + && type == m_urids.atom_Path) { + const char *scaleFile + = (const char *) LV2_ATOM_BODY_CONST(value); + synthv1::setTuningScaleFile(scaleFile); + updateTuning(); + } + else + if (key == m_urids.p205_tuning_keyMapFile + && type == m_urids.atom_Path) { + const char *keyMapFile + = (const char *) LV2_ATOM_BODY_CONST(value); + synthv1::setTuningKeyMapFile(keyMapFile); + updateTuning(); + } + } + } + else + if (object->body.otype == m_urids.patch_Get) { + // put all property values (probably to UI) + patch_put(ndelta); + } + #endif // CONFIG_LV2_PATCH } } // remember last time for worker response m_ndelta = ndelta; - // m_atom_in = NULL; + // m_atom_in = nullptr; } if (nframes > ndelta) @@ -258,6 +355,130 @@ } +uint32_t synthv1_lv2::urid_map ( const char *uri ) const +{ + return (m_urid_map ? m_urid_map->map(m_urid_map->handle, uri) : 0); +} + + +//------------------------------------------------------------------------- +// synthv1_lv2 - LV2 State interface. +// + +static LV2_State_Status synthv1_lv2_state_save ( LV2_Handle instance, + LV2_State_Store_Function store, LV2_State_Handle handle, + uint32_t flags, const LV2_Feature *const */*features*/ ) +{ + synthv1_lv2 *pPlugin = static_cast (instance); + if (pPlugin == nullptr) + return LV2_STATE_ERR_UNKNOWN; + + // FIXME: At this time, only micro-tonal (aka. tuning) settings + // are posed to be saved into some XML chunk as state... + if (!pPlugin->isTuningEnabled()) + return LV2_STATE_SUCCESS; + + // Save state as XML chunk... + // + const uint32_t key = pPlugin->urid_map(SYNTHV1_LV2_PREFIX "state"); + if (key == 0) + return LV2_STATE_ERR_NO_PROPERTY; + + const uint32_t type = pPlugin->urid_map(LV2_ATOM__Chunk); + if (type == 0) + return LV2_STATE_ERR_BAD_TYPE; +#if 0 + if ((flags & (LV2_STATE_IS_POD | LV2_STATE_IS_PORTABLE)) == 0) + return LV2_STATE_ERR_BAD_FLAGS; +#else + flags |= (LV2_STATE_IS_POD | LV2_STATE_IS_PORTABLE); +#endif + + QDomDocument doc(SYNTHV1_TITLE); + QDomElement eState = doc.createElement("state"); + + QDomElement eTuning = doc.createElement("tuning"); + synthv1_param::saveTuning(pPlugin, doc, eTuning); + eState.appendChild(eTuning); + + doc.appendChild(eState); + + const QByteArray data(doc.toByteArray()); + const char *value = data.constData(); + size_t size = data.size(); + + return (*store)(handle, key, value, size, type, flags); +} + + +static LV2_State_Status synthv1_lv2_state_restore ( LV2_Handle instance, + LV2_State_Retrieve_Function retrieve, LV2_State_Handle handle, + uint32_t flags, const LV2_Feature *const */*features*/ ) +{ + synthv1_lv2 *pPlugin = static_cast (instance); + if (pPlugin == nullptr) + return LV2_STATE_ERR_UNKNOWN; + + // Retrieve state as XML chunk... + // + const uint32_t key = pPlugin->urid_map(SYNTHV1_LV2_PREFIX "state"); + if (key == 0) + return LV2_STATE_ERR_NO_PROPERTY; + + const uint32_t chunk_type = pPlugin->urid_map(LV2_ATOM__Chunk); + if (chunk_type == 0) + return LV2_STATE_ERR_BAD_TYPE; + + size_t size = 0; + uint32_t type = 0; +// flags = 0; + + const char *value + = (const char *) (*retrieve)(handle, key, &size, &type, &flags); + + if (size < 2) + return LV2_STATE_ERR_UNKNOWN; + + if (type != chunk_type) + return LV2_STATE_ERR_BAD_TYPE; + + if ((flags & (LV2_STATE_IS_POD | LV2_STATE_IS_PORTABLE)) == 0) + return LV2_STATE_ERR_BAD_FLAGS; + + if (value == nullptr) + return LV2_STATE_ERR_UNKNOWN; + + QDomDocument doc(SYNTHV1_TITLE); + if (doc.setContent(QByteArray(value, size))) { + QDomElement eState = doc.documentElement(); + if (eState.tagName() == "state") { + for (QDomNode nChild = eState.firstChild(); + !nChild.isNull(); + nChild = nChild.nextSibling()) { + QDomElement eChild = nChild.toElement(); + if (eChild.isNull()) + continue; + if (eChild.tagName() == "tuning") + synthv1_param::loadTuning(pPlugin, eChild); + } + } + } + + pPlugin->reset(); + + synthv1_sched::sync_notify(pPlugin, synthv1_sched::Wave, 1); + + return LV2_STATE_SUCCESS; +} + + +static const LV2_State_Interface synthv1_lv2_state_interface = +{ + synthv1_lv2_state_save, + synthv1_lv2_state_restore +}; + + #ifdef CONFIG_LV2_PROGRAMS #include "synthv1_programs.h" @@ -285,7 +506,7 @@ } } - return NULL; + return nullptr; } void synthv1_lv2::select_program ( uint32_t bank, uint32_t program ) @@ -296,21 +517,23 @@ #endif // CONFIG_LV2_PROGRAMS -uint32_t synthv1_lv2::urid_map ( const char *uri ) const +void synthv1_lv2::updatePreset ( bool /*bDirty*/ ) { - return (m_urid_map ? m_urid_map->map(m_urid_map->handle, uri) : 0); + if (m_schedule /*&& bDirty*/) { + synthv1_lv2_worker_message mesg; + mesg.atom.type = m_urids.state_StateChanged; + mesg.atom.size = 0; // nothing else matters. + m_schedule->schedule_work( + m_schedule->handle, sizeof(mesg), &mesg); + } } -//------------------------------------------------------------------------- -// synthv1_lv2 - LV2 State (bogus) interface. -// - -void synthv1_lv2::updatePreset ( bool /*bDirty*/ ) +void synthv1_lv2::updateTuning (void) { - if (m_schedule /*&& bDirty*/) { + if (m_schedule) { synthv1_lv2_worker_message mesg; - mesg.atom.type = m_urids.state_StateChanged; + mesg.atom.type = m_urids.tun1_update; mesg.atom.size = 0; // nothing else matters. m_schedule->schedule_work( m_schedule->handle, sizeof(mesg), &mesg); @@ -318,24 +541,43 @@ } -bool synthv1_lv2::worker_work ( const void *data, uint32_t /*size*/ ) +bool synthv1_lv2::worker_work ( const void *data, uint32_t size ) { + if (size != sizeof(synthv1_lv2_worker_message)) + return false; + const synthv1_lv2_worker_message *mesg = (const synthv1_lv2_worker_message *) data; return (mesg->atom.type == m_urids.state_StateChanged); + if (mesg->atom.type == m_urids.state_StateChanged) + return true; + else + if (mesg->atom.type == m_urids.tun1_update) { + synthv1::resetTuning(); + return true; + } + + return false; } -bool synthv1_lv2::worker_response ( const void *data, uint32_t /*size*/ ) +bool synthv1_lv2::worker_response ( const void *data, uint32_t size ) { + if (size != sizeof(synthv1_lv2_worker_message)) + return false; + const synthv1_lv2_worker_message *mesg = (const synthv1_lv2_worker_message *) data; if (mesg->atom.type == m_urids.state_StateChanged) return state_changed(); - else - return false; + +#ifdef CONFIG_LV2_PATCH + return patch_put(m_ndelta, mesg->atom.type); +#else + return true; +#endif } @@ -351,6 +593,60 @@ } +#ifdef CONFIG_LV2_PATCH + +bool synthv1_lv2::patch_put ( uint32_t ndelta, uint32_t type ) +{ + static char s_szNull[1] = {'\0'}; + + if (type == m_urids.patch_Put) + type = 0; + + lv2_atom_forge_frame_time(&m_forge, ndelta); + + LV2_Atom_Forge_Frame patch_frame; + lv2_atom_forge_object(&m_forge, &patch_frame, 0, m_urids.patch_Put); + lv2_atom_forge_key(&m_forge, m_urids.patch_body); + + LV2_Atom_Forge_Frame body_frame; + lv2_atom_forge_object(&m_forge, &body_frame, 0, 0); + + if (type == 0 || type == m_urids.p201_tuning_enabled) { + lv2_atom_forge_key(&m_forge, m_urids.p201_tuning_enabled); + lv2_atom_forge_bool(&m_forge, synthv1::isTuningEnabled()); + } + if (type == 0 || type == m_urids.p202_tuning_refPitch) { + lv2_atom_forge_key(&m_forge, m_urids.p202_tuning_refPitch); + lv2_atom_forge_float(&m_forge, synthv1::tuningRefPitch()); + } + if (type == 0 || type == m_urids.p203_tuning_refNote) { + lv2_atom_forge_key(&m_forge, m_urids.p203_tuning_refNote); + lv2_atom_forge_int(&m_forge, synthv1::tuningRefNote()); + } + if (type == 0 || type == m_urids.p204_tuning_scaleFile) { + const char *pszScaleFile = synthv1::tuningScaleFile(); + if (pszScaleFile == nullptr) + pszScaleFile = s_szNull; + lv2_atom_forge_key(&m_forge, m_urids.p204_tuning_scaleFile); + lv2_atom_forge_path(&m_forge, pszScaleFile, ::strlen(pszScaleFile) + 1); + } + if (type == 0 || type == m_urids.p205_tuning_keyMapFile) { + const char *pszKeyMapFile = synthv1::tuningKeyMapFile(); + if (pszKeyMapFile == nullptr) + pszKeyMapFile = s_szNull; + lv2_atom_forge_key(&m_forge, m_urids.p205_tuning_keyMapFile); + lv2_atom_forge_path(&m_forge, pszKeyMapFile, ::strlen(pszKeyMapFile) + 1); + } + + lv2_atom_forge_pop(&m_forge, &body_frame); + lv2_atom_forge_pop(&m_forge, &patch_frame); + + return true; +} + +#endif // CONFIG_LV2_PATCH + + //------------------------------------------------------------------------- // synthv1_lv2 - LV2 desc. // @@ -413,7 +709,7 @@ if (pPlugin) return pPlugin->get_program(index); else - return NULL; + return nullptr; } static void synthv1_lv2_programs_select_program ( @@ -454,7 +750,7 @@ if (pSynth && pSynth->worker_response(data, size)) return LV2_WORKER_SUCCESS; else - return LV2_WORKER_SUCCESS; + return LV2_WORKER_ERR_UNKNOWN; } @@ -462,7 +758,7 @@ { synthv1_lv2_worker_work, synthv1_lv2_worker_response, - NULL + nullptr }; @@ -475,8 +771,11 @@ #endif if (::strcmp(uri, LV2_WORKER__interface) == 0) return &synthv1_lv2_worker_interface; + else + if (::strcmp(uri, LV2_STATE__interface) == 0) + return &synthv1_lv2_state_interface; - return NULL; + return nullptr; } @@ -495,7 +794,7 @@ LV2_SYMBOL_EXPORT const LV2_Descriptor *lv2_descriptor ( uint32_t index ) { - return (index == 0 ? &synthv1_lv2_descriptor : NULL); + return (index == 0 ? &synthv1_lv2_descriptor : nullptr); } diff -Nru synthv1-0.8.6/src/synthv1_lv2.h synthv1-0.9.10+git20190929/src/synthv1_lv2.h --- synthv1-0.8.6/src/synthv1_lv2.h 2017-12-20 07:56:50.310842973 +0000 +++ synthv1-0.9.10+git20190929/src/synthv1_lv2.h 2019-09-28 23:00:43.000000000 +0000 @@ -1,7 +1,7 @@ // synthv1_lv2.h // /**************************************************************************** - Copyright (C) 2012-2017, rncbc aka Rui Nuno Capela. All rights reserved. + Copyright (C) 2012-2019, rncbc aka Rui Nuno Capela. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License @@ -24,7 +24,6 @@ #include "synthv1.h" -#include "lv2.h" #include "lv2/lv2plug.in/ns/ext/urid/urid.h" #include "lv2/lv2plug.in/ns/ext/atom/atom.h" #include "lv2/lv2plug.in/ns/ext/atom/forge.h" @@ -84,19 +83,32 @@ protected: void updatePreset(bool bDirty); + void updateTuning(); bool state_changed(); +#ifdef CONFIG_LV2_PATCH + bool patch_put(uint32_t ndelta, uint32_t type = 0); +#endif + private: LV2_URID_Map *m_urid_map; struct lv2_urids { + LV2_URID p201_tuning_enabled; + LV2_URID p202_tuning_refPitch; + LV2_URID p203_tuning_refNote; + LV2_URID p204_tuning_scaleFile; + LV2_URID p205_tuning_keyMapFile; + LV2_URID tun1_update; LV2_URID atom_Blank; LV2_URID atom_Object; LV2_URID atom_Float; LV2_URID atom_Int; + LV2_URID atom_Bool; + LV2_URID atom_Path; LV2_URID time_Position; LV2_URID time_beatsPerMinute; LV2_URID midi_MidiEvent; @@ -104,7 +116,14 @@ LV2_URID bufsz_maxBlockLength; LV2_URID bufsz_nominalBlockLength; LV2_URID state_StateChanged; - + #ifdef CONFIG_LV2_PATCH + LV2_URID patch_Get; + LV2_URID patch_Set; + LV2_URID patch_Put; + LV2_URID patch_body; + LV2_URID patch_property; + LV2_URID patch_value; + #endif } m_urids; LV2_Atom_Forge m_forge; diff -Nru synthv1-0.8.6/src/synthv1_lv2ui.cpp synthv1-0.9.10+git20190929/src/synthv1_lv2ui.cpp --- synthv1-0.8.6/src/synthv1_lv2ui.cpp 2017-12-20 07:56:50.310842973 +0000 +++ synthv1-0.9.10+git20190929/src/synthv1_lv2ui.cpp 2019-09-28 23:00:43.000000000 +0000 @@ -1,7 +1,7 @@ // synthv1_lv2ui.cpp // /**************************************************************************** - Copyright (C) 2012-2015, rncbc aka Rui Nuno Capela. All rights reserved. + Copyright (C) 2012-2019, rncbc aka Rui Nuno Capela. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License @@ -61,7 +61,7 @@ // synthv1_lv2ui - LV2 UI desc. // -static QApplication *synthv1_lv2ui_qapp_instance = NULL; +static QApplication *synthv1_lv2ui_qapp_instance = nullptr; static unsigned int synthv1_lv2ui_qapp_refcount = 0; @@ -71,7 +71,7 @@ LV2UI_Controller controller, LV2UI_Widget *widget, const LV2_Feature *const *features ) { - synthv1_lv2 *pSynth = NULL; + synthv1_lv2 *pSynth = nullptr; for (int i = 0; features && features[i]; ++i) { if (::strcmp(features[i]->URI, LV2_INSTANCE_ACCESS_URI) == 0) { @@ -80,12 +80,12 @@ } } - if (pSynth == NULL) - return NULL; + if (pSynth == nullptr) + return nullptr; - if (qApp == NULL && synthv1_lv2ui_qapp_instance == NULL) { + if (qApp == nullptr && synthv1_lv2ui_qapp_instance == nullptr) { static int s_argc = 1; - static const char *s_argv[] = { __func__, NULL }; + static const char *s_argv[] = { __func__, nullptr }; synthv1_lv2ui_qapp_instance = new QApplication(s_argc, (char **) s_argv); } synthv1_lv2ui_qapp_refcount++; @@ -101,10 +101,12 @@ synthv1widget_lv2 *pWidget = static_cast (ui); if (pWidget) { delete pWidget; + #if 0//Avoid destructing the possibly shared QApplication instance... if (--synthv1_lv2ui_qapp_refcount == 0 && synthv1_lv2ui_qapp_instance) { delete synthv1_lv2ui_qapp_instance; - synthv1_lv2ui_qapp_instance = NULL; + synthv1_lv2ui_qapp_instance = nullptr; } + #endif } } @@ -173,6 +175,29 @@ #endif // CONFIG_LV2_UI_IDLE + +#ifdef CONFIG_LV2_UI_RESIZE + +int synthv1_lv2ui_resize ( LV2UI_Handle ui, int width, int height ) +{ + synthv1widget_lv2 *pWidget = static_cast (ui); + if (pWidget) { + pWidget->resize(width, height); + return 0; + } else { + return 1; + } +} + +static const LV2UI_Resize synthv1_lv2ui_resize_interface = +{ + nullptr, // handle: host should use its own when calling ui_resize(). + synthv1_lv2ui_resize +}; + +#endif // CONFIG_LV2_UI_RESIZE + + static const void *synthv1_lv2ui_extension_data ( const char *uri ) { #ifdef CONFIG_LV2_UI_IDLE @@ -185,11 +210,67 @@ return (void *) &synthv1_lv2ui_show_interface; else #endif - return NULL; +#ifdef CONFIG_LV2_UI_RESIZE + if (::strcmp(uri, LV2_UI__resize) == 0) + return (void *) &synthv1_lv2ui_resize_interface; + else +#endif + return nullptr; } -#ifdef CONFIG_LV2_EXTERNAL_UI +#ifdef CONFIG_LV2_UI_X11 + +static LV2UI_Handle synthv1_lv2ui_x11_instantiate ( + const LV2UI_Descriptor *, const char *, const char *, + LV2UI_Write_Function write_function, + LV2UI_Controller controller, LV2UI_Widget *widget, + const LV2_Feature *const *ui_features ) +{ + WId winid, parent = 0; + LV2UI_Resize *resize = nullptr; + synthv1_lv2 *pSynth = nullptr; + + for (int i = 0; ui_features[i]; ++i) { + if (::strcmp(ui_features[i]->URI, LV2_INSTANCE_ACCESS_URI) == 0) + pSynth = static_cast (ui_features[i]->data); + else + if (::strcmp(ui_features[i]->URI, LV2_UI__parent) == 0) + parent = (WId) ui_features[i]->data; + else + if (::strcmp(ui_features[i]->URI, LV2_UI__resize) == 0) + resize = (LV2UI_Resize *) ui_features[i]->data; + } + + if (pSynth == nullptr) + return nullptr; + if (!parent) + return nullptr; + + if (qApp == nullptr && synthv1_lv2ui_qapp_instance == nullptr) { + static int s_argc = 1; + static const char *s_argv[] = { __func__, nullptr }; + synthv1_lv2ui_qapp_instance = new QApplication(s_argc, (char **) s_argv); + } + synthv1_lv2ui_qapp_refcount++; + + synthv1widget_lv2 *pWidget + = new synthv1widget_lv2(pSynth, controller, write_function); + if (resize && resize->handle) { + const QSize& hint = pWidget->sizeHint(); + resize->ui_resize(resize->handle, hint.width(), hint.height()); + } + winid = pWidget->winId(); + pWidget->windowHandle()->setParent(QWindow::fromWinId(parent)); + pWidget->show(); + *widget = (LV2UI_Widget) winid; + return pWidget; +} + +#endif // CONFIG_LV2_UI_X11 + + +#ifdef CONFIG_LV2_UI_EXTERNAL struct synthv1_lv2ui_external_widget { @@ -233,8 +314,8 @@ LV2UI_Controller controller, LV2UI_Widget *widget, const LV2_Feature *const *ui_features ) { - synthv1_lv2 *pSynth = NULL; - LV2_External_UI_Host *external_host = NULL; + synthv1_lv2 *pSynth = nullptr; + LV2_External_UI_Host *external_host = nullptr; for (int i = 0; ui_features[i] && !external_host; ++i) { if (::strcmp(ui_features[i]->URI, LV2_INSTANCE_ACCESS_URI) == 0) @@ -246,9 +327,9 @@ } } - if (qApp == NULL && synthv1_lv2ui_qapp_instance == NULL) { + if (qApp == nullptr && synthv1_lv2ui_qapp_instance == nullptr) { static int s_argc = 1; - static const char *s_argv[] = { __func__, NULL }; + static const char *s_argv[] = { __func__, nullptr }; synthv1_lv2ui_qapp_instance = new QApplication(s_argc, (char **) s_argv); } synthv1_lv2ui_qapp_refcount++; @@ -274,7 +355,7 @@ delete pExtWidget; if (--synthv1_lv2ui_qapp_refcount == 0 && synthv1_lv2ui_qapp_instance) { delete synthv1_lv2ui_qapp_instance; - synthv1_lv2ui_qapp_instance = NULL; + synthv1_lv2ui_qapp_instance = nullptr; } } } @@ -291,10 +372,10 @@ static const void *synthv1_lv2ui_external_extension_data ( const char * ) { - return NULL; + return nullptr; } -#endif // CONFIG_LV2_EXTERNAL_UI +#endif // CONFIG_LV2_UI_EXTERNAL static const LV2UI_Descriptor synthv1_lv2ui_descriptor = @@ -306,7 +387,18 @@ synthv1_lv2ui_extension_data }; -#ifdef CONFIG_LV2_EXTERNAL_UI +#ifdef CONFIG_LV2_UI_X11 +static const LV2UI_Descriptor synthv1_lv2ui_x11_descriptor = +{ + SYNTHV1_LV2UI_X11_URI, + synthv1_lv2ui_x11_instantiate, + synthv1_lv2ui_cleanup, + synthv1_lv2ui_port_event, + synthv1_lv2ui_extension_data +}; +#endif // CONFIG_LV2_UI_X11 + +#ifdef CONFIG_LV2_UI_EXTERNAL static const LV2UI_Descriptor synthv1_lv2ui_external_descriptor = { SYNTHV1_LV2UI_EXTERNAL_URI, @@ -315,7 +407,7 @@ synthv1_lv2ui_external_port_event, synthv1_lv2ui_external_extension_data }; -#endif // CONFIG_LV2_EXTERNAL_UI +#endif // CONFIG_LV2_UI_EXTERNAL LV2_SYMBOL_EXPORT const LV2UI_Descriptor *lv2ui_descriptor ( uint32_t index ) @@ -323,12 +415,17 @@ if (index == 0) return &synthv1_lv2ui_descriptor; else -#ifdef CONFIG_LV2_EXTERNAL_UI +#ifdef CONFIG_LV2_UI_X11 if (index == 1) + return &synthv1_lv2ui_x11_descriptor; + else +#endif +#ifdef CONFIG_LV2_UI_EXTERNAL + if (index == 2) return &synthv1_lv2ui_external_descriptor; else #endif - return NULL; + return nullptr; } diff -Nru synthv1-0.8.6/src/synthv1_lv2ui.h synthv1-0.9.10+git20190929/src/synthv1_lv2ui.h --- synthv1-0.8.6/src/synthv1_lv2ui.h 2017-12-20 07:56:50.310842973 +0000 +++ synthv1-0.9.10+git20190929/src/synthv1_lv2ui.h 2019-09-28 23:00:43.000000000 +0000 @@ -1,7 +1,7 @@ // synthv1_lv2ui.h // /**************************************************************************** - Copyright (C) 2012-2015, rncbc aka Rui Nuno Capela. All rights reserved. + Copyright (C) 2012-2019, rncbc aka Rui Nuno Capela. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License @@ -24,17 +24,22 @@ #include "synthv1_ui.h" -#include "lv2.h" #include "lv2/lv2plug.in/ns/extensions/ui/ui.h" #define SYNTHV1_LV2UI_URI SYNTHV1_LV2_PREFIX "ui" -#ifdef CONFIG_LV2_EXTERNAL_UI +#ifdef CONFIG_LV2_UI_X11 +#include +#define SYNTHV1_LV2UI_X11_URI SYNTHV1_LV2_PREFIX "ui_x11" +#endif + +#ifdef CONFIG_LV2_UI_EXTERNAL #include "lv2_external_ui.h" #define SYNTHV1_LV2UI_EXTERNAL_URI SYNTHV1_LV2_PREFIX "ui_external" #endif + // Forward decls. class synthv1_lv2; diff -Nru synthv1-0.8.6/src/synthv1_nsm.cpp synthv1-0.9.10+git20190929/src/synthv1_nsm.cpp --- synthv1-0.8.6/src/synthv1_nsm.cpp 2017-12-20 07:56:50.310842973 +0000 +++ synthv1-0.9.10+git20190929/src/synthv1_nsm.cpp 2019-09-28 23:00:43.000000000 +0000 @@ -1,7 +1,7 @@ // synthv1_nsm.cpp // /**************************************************************************** - Copyright (C) 2012-2013, rncbc aka Rui Nuno Capela. All rights reserved. + Copyright (C) 2012-2019, rncbc aka Rui Nuno Capela. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License @@ -19,11 +19,8 @@ *****************************************************************************/ -#include "synthv1_config.h" - #include "synthv1_nsm.h" - #include #include @@ -42,7 +39,7 @@ { synthv1_nsm *pNsmClient = static_cast (user_data); - if (pNsmClient == NULL) + if (pNsmClient == nullptr) return -1; if (strcmp(&argv[0]->s, "/nsm/server/announce")) @@ -59,7 +56,7 @@ { synthv1_nsm *pNsmClient = static_cast (user_data); - if (pNsmClient == NULL) + if (pNsmClient == nullptr) return -1; if (strcmp(&argv[0]->s, "/nsm/server/announce")) @@ -76,7 +73,7 @@ { synthv1_nsm *pNsmClient = static_cast (user_data); - if (pNsmClient == NULL) + if (pNsmClient == nullptr) return -1; pNsmClient->nsm_open(&argv[0]->s, &argv[1]->s, &argv[2]->s); @@ -90,7 +87,7 @@ { synthv1_nsm *pNsmClient = static_cast (user_data); - if (pNsmClient == NULL) + if (pNsmClient == nullptr) return -1; pNsmClient->nsm_save(); @@ -104,7 +101,7 @@ { synthv1_nsm *pNsmClient = static_cast (user_data); - if (pNsmClient == NULL) + if (pNsmClient == nullptr) return -1; pNsmClient->nsm_loaded(); @@ -118,7 +115,7 @@ { synthv1_nsm *pNsmClient = static_cast (user_data); - if (pNsmClient == NULL) + if (pNsmClient == nullptr) return -1; pNsmClient->nsm_show(); @@ -132,7 +129,7 @@ { synthv1_nsm *pNsmClient = static_cast (user_data); - if (pNsmClient == NULL) + if (pNsmClient == nullptr) return -1; pNsmClient->nsm_hide(); @@ -150,16 +147,16 @@ const QString& nsm_url, QObject *pParent ) : QObject(pParent), #ifdef CONFIG_LIBLO - m_address(NULL), - m_thread(NULL), - m_server(NULL), + m_address(nullptr), + m_thread(nullptr), + m_server(nullptr), #endif m_active(false) { #ifdef CONFIG_LIBLO m_address = lo_address_new_from_url(nsm_url.toUtf8().constData()); int proto = lo_address_get_protocol(m_address); - m_thread = lo_server_thread_new_with_proto(NULL, proto, NULL); + m_thread = lo_server_thread_new_with_proto(nullptr, proto, nullptr); if (m_thread) { m_server = lo_server_thread_get_server(m_thread); lo_server_thread_add_method(m_thread, diff -Nru synthv1-0.8.6/src/synthv1_nsm.h synthv1-0.9.10+git20190929/src/synthv1_nsm.h --- synthv1-0.8.6/src/synthv1_nsm.h 2017-12-20 07:56:50.310842973 +0000 +++ synthv1-0.9.10+git20190929/src/synthv1_nsm.h 2019-09-28 23:00:43.000000000 +0000 @@ -1,7 +1,7 @@ // synthv1_nsm.h // /**************************************************************************** - Copyright (C) 2012-2013, rncbc aka Rui Nuno Capela. All rights reserved. + Copyright (C) 2012-2019, rncbc aka Rui Nuno Capela. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License @@ -22,6 +22,8 @@ #ifndef __synthv1_nsm_h #define __synthv1_nsm_h +#include "synthv1_config.h" + #include #ifdef CONFIG_LIBLO diff -Nru synthv1-0.8.6/src/synthv1_param.cpp synthv1-0.9.10+git20190929/src/synthv1_param.cpp --- synthv1-0.8.6/src/synthv1_param.cpp 2017-12-20 07:56:50.310842973 +0000 +++ synthv1-0.9.10+git20190929/src/synthv1_param.cpp 2019-09-28 23:00:43.000000000 +0000 @@ -1,7 +1,7 @@ // synthv1_param.cpp // /**************************************************************************** - Copyright (C) 2012-2017, rncbc aka Rui Nuno Capela. All rights reserved. + Copyright (C) 2012-2019, rncbc aka Rui Nuno Capela. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License @@ -64,6 +64,7 @@ { "DCO1_TUNING", PARAM_FLOAT, 0.0f, -1.0f, 1.0f }, // DCO1 Tuning { "DCO1_GLIDE", PARAM_FLOAT, 0.0f, 0.0f, 1.0f }, // DCO1 Glide { "DCO1_ENVTIME", PARAM_FLOAT, 0.5f, 0.0f, 1.0f }, // DCO1 Env.Time + { "DCF1_ENABLED", PARAM_BOOL, 1.0f, 0.0f, 1.0f }, // DCF1 Enabled { "DCF1_CUTOFF", PARAM_FLOAT, 0.5f, 0.0f, 1.0f }, // DCF1 Cutoff { "DCF1_RESO", PARAM_FLOAT, 0.0f, 0.0f, 1.0f }, // DCF1 Resonance { "DCF1_TYPE", PARAM_INT, 0.0f, 0.0f, 3.0f }, // DCF1 Type @@ -73,6 +74,7 @@ { "DCF1_DECAY", PARAM_FLOAT, 0.2f, 0.0f, 1.0f }, // DCF1 Decay { "DCF1_SUSTAIN", PARAM_FLOAT, 0.5f, 0.0f, 1.0f }, // DCF1 Sustain { "DCF1_RELEASE", PARAM_FLOAT, 0.5f, 0.0f, 1.0f }, // DCF1 Release + { "LFO1_ENABLED", PARAM_BOOL, 1.0f, 0.0f, 1.0f }, // LFO1 Enabled { "LFO1_SHAPE", PARAM_INT, 1.0f, 0.0f, 4.0f }, // LFO1 Wave Shape { "LFO1_WIDTH", PARAM_FLOAT, 1.0f, 0.0f, 1.0f }, // LFO1 Wave Width { "LFO1_BPM", PARAM_FLOAT, 180.0f, 0.0f, 360.0f }, // LFO1 BPM @@ -123,6 +125,7 @@ { "DCO2_TUNING", PARAM_FLOAT, 0.0f, -1.0f, 1.0f }, // DCO2 Tuning { "DCO2_GLIDE", PARAM_FLOAT, 0.0f, 0.0f, 1.0f }, // DCO2 Glide { "DCO2_ENVTIME", PARAM_FLOAT, 0.5f, 0.0f, 1.0f }, // DCO2 Env.Time + { "DCF2_ENABLED", PARAM_BOOL, 1.0f, 0.0f, 1.0f }, // DCF2 Enabled { "DCF2_CUTOFF", PARAM_FLOAT, 0.5f, 0.0f, 1.0f }, // DCF2 Cutoff { "DCF2_RESO", PARAM_FLOAT, 0.0f, 0.0f, 1.0f }, // DCF2 Resonance { "DCF2_TYPE", PARAM_INT, 0.0f, 0.0f, 3.0f }, // DCF2 Type @@ -132,6 +135,7 @@ { "DCF2_DECAY", PARAM_FLOAT, 0.2f, 0.0f, 1.0f }, // DCF2 Decay { "DCF2_SUSTAIN", PARAM_FLOAT, 0.5f, 0.0f, 1.0f }, // DCF2 Sustain { "DCF2_RELEASE", PARAM_FLOAT, 0.5f, 0.0f, 1.0f }, // DCF2 Release + { "LFO2_ENABLED", PARAM_BOOL, 1.0f, 0.0f, 1.0f }, // LFO2 Enabled { "LFO2_SHAPE", PARAM_INT, 1.0f, 0.0f, 4.0f }, // LFO2 Wave Shape { "LFO2_WIDTH", PARAM_FLOAT, 1.0f, 0.0f, 1.0f }, // LFO2 Wave Width { "LFO2_BPM", PARAM_FLOAT, 180.0f, 0.0f, 360.0f }, // LFO2 BPM @@ -190,7 +194,10 @@ { "REV1_FEEDB", PARAM_FLOAT, 0.5f, 0.0f, 1.0f }, // Reverb Feedback { "REV1_WIDTH", PARAM_FLOAT, 0.0f, -1.0f, 1.0f }, // Reverb Width { "DYN1_COMPRESS", PARAM_BOOL, 0.0f, 0.0f, 1.0f }, // Dynamic Compressor - { "DYN1_LIMITER", PARAM_BOOL, 1.0f, 0.0f, 1.0f } // Dynamic Limiter + { "DYN1_LIMITER", PARAM_BOOL, 1.0f, 0.0f, 1.0f }, // Dynamic Limiter + + { "KEY1_LOW", PARAM_INT, 0.0f, 0.0f, 127.0f }, // Keyboard Low + { "KEY1_HIGH", PARAM_INT, 127.0f, 0.0f, 127.0f } // Keyboard High }; @@ -206,6 +213,25 @@ } +float synthv1_param::paramSafeValue ( synthv1::ParamIndex index, float fValue ) +{ + const ParamInfo& param = synthv1_params[index]; + + if (param.type == PARAM_BOOL) + return (fValue > 0.5f ? 1.0f : 0.0f); + + if (fValue < param.min) + return param.min; + if (fValue > param.max) + return param.max; + + if (param.type == PARAM_INT) + return ::rintf(fValue); + else + return fValue; +} + + float synthv1_param::paramValue ( synthv1::ParamIndex index, float fScale ) { const ParamInfo& param = synthv1_params[index]; @@ -244,12 +270,11 @@ } - // Preset serialization methods. bool synthv1_param::loadPreset ( synthv1 *pSynth, const QString& sFilename ) { - if (pSynth == NULL) + if (pSynth == nullptr) return false; QFileInfo fi(sFilename); @@ -270,6 +295,11 @@ if (!file.open(QIODevice::ReadOnly)) return false; + const bool running = pSynth->running(false); + + pSynth->setTuningEnabled(false); + pSynth->reset(); + static QHash s_hash; if (s_hash.isEmpty()) { for (uint32_t i = 0; i < synthv1::NUM_PARAMS; ++i) { @@ -309,17 +339,24 @@ index = s_hash.value(sName); } const float fValue = eParam.text().toFloat(); - pSynth->setParamValue(index, fValue); + pSynth->setParamValue(index, + synthv1_param::paramSafeValue(index, fValue)); } } } + else + if (eChild.tagName() == "tuning") { + synthv1_param::loadTuning(pSynth, eChild); + } } } } file.close(); + pSynth->stabilize(); pSynth->reset(); + pSynth->running(running); QDir::setCurrent(currentDir.absolutePath()); @@ -328,11 +365,13 @@ bool synthv1_param::savePreset ( - synthv1 *pSynth, const QString& sFilename, bool /*bSymLink*/ ) + synthv1 *pSynth, const QString& sFilename, bool bSymLink ) { - if (pSynth == NULL) + if (pSynth == nullptr) return false; + pSynth->stabilize(); + const QFileInfo fi(sFilename); const QDir currentDir(QDir::current()); QDir::setCurrent(fi.absolutePath()); @@ -353,6 +392,13 @@ eParams.appendChild(eParam); } ePreset.appendChild(eParams); + + if (pSynth->isTuningEnabled()) { + QDomElement eTuning = doc.createElement("tuning"); + synthv1_param::saveTuning(pSynth, doc, eTuning, bSymLink); + ePreset.appendChild(eTuning); + } + doc.appendChild(ePreset); QFile file(fi.filePath()); @@ -368,4 +414,126 @@ } +// Tuning serialization methods. +void synthv1_param::loadTuning ( + synthv1 *pSynth, const QDomElement& eTuning ) +{ + if (pSynth == nullptr) + return; + + pSynth->setTuningEnabled(eTuning.attribute("enabled").toInt() > 0); + + for (QDomNode nChild = eTuning.firstChild(); + !nChild.isNull(); + nChild = nChild.nextSibling()) { + QDomElement eChild = nChild.toElement(); + if (eChild.isNull()) + continue; + if (eChild.tagName() == "enabled") { + pSynth->setTuningEnabled(eChild.text().toInt() > 0); + } + if (eChild.tagName() == "ref-pitch") { + pSynth->setTuningRefPitch(eChild.text().toFloat()); + } + else + if (eChild.tagName() == "ref-note") { + pSynth->setTuningRefNote(eChild.text().toInt()); + } + else + if (eChild.tagName() == "scale-file") { + const QString& sScaleFile + = eChild.text(); + const QByteArray aScaleFile + = synthv1_param::loadFilename(sScaleFile).toUtf8(); + pSynth->setTuningScaleFile(aScaleFile.constData()); + } + else + if (eChild.tagName() == "keymap-file") { + const QString& sKeyMapFile + = eChild.text(); + const QByteArray aKeyMapFile + = synthv1_param::loadFilename(sKeyMapFile).toUtf8(); + pSynth->setTuningScaleFile(aKeyMapFile.constData()); + } + } + + // Consolidate tuning state... + pSynth->resetTuning(); +} + + +void synthv1_param::saveTuning ( + synthv1 *pSynth, QDomDocument& doc, QDomElement& eTuning, bool bSymLink ) +{ + if (pSynth == nullptr) + return; + + eTuning.setAttribute("enabled", int(pSynth->isTuningEnabled())); + + QDomElement eRefPitch = doc.createElement("ref-pitch"); + eRefPitch.appendChild(doc.createTextNode( + QString::number(pSynth->tuningRefPitch()))); + eTuning.appendChild(eRefPitch); + + QDomElement eRefNote = doc.createElement("ref-note"); + eRefNote.appendChild(doc.createTextNode( + QString::number(pSynth->tuningRefNote()))); + eTuning.appendChild(eRefNote); + + const char *pszScaleFile = pSynth->tuningScaleFile(); + if (pszScaleFile) { + const QString& sScaleFile + = QString::fromUtf8(pszScaleFile); + if (!sScaleFile.isEmpty()) { + QDomElement eScaleFile = doc.createElement("scale-file"); + eScaleFile.appendChild(doc.createTextNode( + QDir::current().relativeFilePath( + synthv1_param::saveFilename(sScaleFile, bSymLink)))); + eTuning.appendChild(eScaleFile); + } + } + + const char *pszKeyMapFile = pSynth->tuningKeyMapFile(); + if (pszKeyMapFile) { + const QString& sKeyMapFile + = QString::fromUtf8(pszKeyMapFile); + if (!sKeyMapFile.isEmpty()) { + QDomElement eKeyMapFile = doc.createElement("keymap-file"); + eKeyMapFile.appendChild(doc.createTextNode( + QDir::current().relativeFilePath( + synthv1_param::saveFilename(sKeyMapFile, bSymLink)))); + eTuning.appendChild(eKeyMapFile); + } + } +} + + +// Load/save and convert canonical/absolute filename helpers. +QString synthv1_param::loadFilename ( const QString& sFilename ) +{ + QFileInfo fi(sFilename); + if (fi.isSymLink()) + fi.setFile(fi.symLinkTarget()); + return fi.canonicalFilePath(); +} + + +QString synthv1_param::saveFilename ( const QString& sFilename, bool bSymLink ) +{ + QFileInfo fi(sFilename); + if (bSymLink && fi.absolutePath() != QDir::current().absolutePath()) { + const QString& sPath = fi.absoluteFilePath(); + const QString& sName = fi.baseName(); + const QString& sExt = fi.completeSuffix(); + const QString& sLink = sName + + '-' + QString::number(qHash(sPath), 16) + + '.' + sExt; + QFile(sPath).link(sLink); + fi.setFile(QDir::current(), sLink); + } + else if (fi.isSymLink()) fi.setFile(fi.symLinkTarget()); + return fi.absoluteFilePath(); +} + + // end of synthv1_param.cpp diff -Nru synthv1-0.8.6/src/synthv1_param.h synthv1-0.9.10+git20190929/src/synthv1_param.h --- synthv1-0.8.6/src/synthv1_param.h 2017-12-20 07:56:50.310842973 +0000 +++ synthv1-0.9.10+git20190929/src/synthv1_param.h 2019-09-28 23:00:43.000000000 +0000 @@ -1,7 +1,7 @@ // synthv1_param.h // /**************************************************************************** - Copyright (C) 2012-2017, rncbc aka Rui Nuno Capela. All rights reserved. + Copyright (C) 2012-2019, rncbc aka Rui Nuno Capela. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License @@ -44,12 +44,24 @@ const QString& sFilename, bool bSymLink = false); + // Tuning serialization methods. + void loadTuning(synthv1 *pSynth, + const QDomElement& eTuning); + void saveTuning(synthv1 *pSynth, + QDomDocument& doc, QDomElement& eTuning, + bool bSymLink = false); + // Default parameter name/value helpers. const char *paramName(synthv1::ParamIndex index); float paramDefaultValue(synthv1::ParamIndex index); + float paramSafeValue(synthv1::ParamIndex index, float fValue); float paramValue(synthv1::ParamIndex index, float fScale); float paramScale(synthv1::ParamIndex index, float fValue); bool paramFloat(synthv1::ParamIndex index); + + // Load/save and convert canonical/absolute filename helpers. + QString loadFilename(const QString& sFilename); + QString saveFilename(const QString& sFilename, bool bSymLink); }; diff -Nru synthv1-0.8.6/src/synthv1.qrc synthv1-0.9.10+git20190929/src/synthv1.qrc --- synthv1-0.8.6/src/synthv1.qrc 2017-12-20 07:56:50.308842973 +0000 +++ synthv1-0.9.10+git20190929/src/synthv1.qrc 2019-09-28 23:00:43.000000000 +0000 @@ -9,6 +9,7 @@ images/presetBank.png images/presetBankOpen.png images/presetEdit.png + images/fileOpen.png images/synthv1.png images/synthv1_preset.png images/synthv1_control.png diff -Nru synthv1-0.8.6/src/synthv1_ramp.h synthv1-0.9.10+git20190929/src/synthv1_ramp.h --- synthv1-0.8.6/src/synthv1_ramp.h 2017-12-20 07:56:50.311842973 +0000 +++ synthv1-0.9.10+git20190929/src/synthv1_ramp.h 2019-09-28 23:00:43.000000000 +0000 @@ -1,7 +1,7 @@ // synthv1_ramp.h // /**************************************************************************** - Copyright (C) 2012-2014, rncbc aka Rui Nuno Capela. All rights reserved. + Copyright (C) 2012-2019, rncbc aka Rui Nuno Capela. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License @@ -46,7 +46,7 @@ m_frames = 0; } - ~synthv1_ramp() + virtual ~synthv1_ramp() { delete [] m_delta; delete [] m_value1; diff -Nru synthv1-0.8.6/src/synthv1_sched.cpp synthv1-0.9.10+git20190929/src/synthv1_sched.cpp --- synthv1-0.8.6/src/synthv1_sched.cpp 2017-12-20 07:56:50.311842973 +0000 +++ synthv1-0.9.10+git20190929/src/synthv1_sched.cpp 2019-09-28 23:00:43.000000000 +0000 @@ -1,7 +1,7 @@ // synthv1_sched.cpp // /**************************************************************************** - Copyright (C) 2012-2017, rncbc aka Rui Nuno Capela. All rights reserved. + Copyright (C) 2012-2019, rncbc aka Rui Nuno Capela. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License @@ -37,7 +37,7 @@ public: // ctor. - synthv1_sched_thread(uint32_t nsize = 8); + synthv1_sched_thread(uint32_t nsize = 32); // dtor. ~synthv1_sched_thread(); @@ -70,10 +70,10 @@ }; -static synthv1_sched_thread *g_sched_thread = NULL; +static synthv1_sched_thread *g_sched_thread = nullptr; static uint32_t g_sched_refcount = 0; -static QHash > g_sched_notifiers; +static QHash > g_sched_notifiers; //------------------------------------------------------------------------- @@ -146,7 +146,7 @@ synthv1_sched *sched = m_items[r]; if (sched) { sched->sync_process(); - m_items[r] = NULL; + m_items[r] = nullptr; } ++r &= m_nmask; } @@ -178,7 +178,7 @@ ::memset(m_items, 0, m_nsize * sizeof(int)); - if (++g_sched_refcount == 1 && g_sched_thread == NULL) { + if (++g_sched_refcount == 1 && g_sched_thread == nullptr) { g_sched_thread = new synthv1_sched_thread(); g_sched_thread->start(); } @@ -193,7 +193,7 @@ if (--g_sched_refcount == 0) { if (g_sched_thread) { delete g_sched_thread; - g_sched_thread = NULL; + g_sched_thread = nullptr; } } } @@ -254,9 +254,9 @@ void synthv1_sched::sync_notify ( synthv1 *pSynth, Type stype, int sid ) { if (g_sched_notifiers.contains(pSynth)) { - const QList& list + const QList& list = g_sched_notifiers.value(pSynth); - QListIterator iter(list); + QListIterator iter(list); while (iter.hasNext()) iter.next()->notify(stype, sid); } @@ -264,22 +264,22 @@ //------------------------------------------------------------------------- -// synthv1_sched_notifier - worker/schedule proxy decl. +// synthv1_sched::Notifier - worker/schedule proxy decl. // // ctor. -synthv1_sched_notifier::synthv1_sched_notifier ( synthv1 *pSynth ) +synthv1_sched::Notifier::Notifier ( synthv1 *pSynth ) : m_pSynth(pSynth) { - g_sched_notifiers[m_pSynth].append(this); + g_sched_notifiers[pSynth].append(this); } // dtor. -synthv1_sched_notifier::~synthv1_sched_notifier (void) +synthv1_sched::Notifier::~Notifier (void) { if (g_sched_notifiers.contains(m_pSynth)) { - QList& list = g_sched_notifiers[m_pSynth]; + QList& list = g_sched_notifiers[m_pSynth]; list.removeAll(this); if (list.isEmpty()) g_sched_notifiers.remove(m_pSynth); diff -Nru synthv1-0.8.6/src/synthv1_sched.h synthv1-0.9.10+git20190929/src/synthv1_sched.h --- synthv1-0.8.6/src/synthv1_sched.h 2017-12-20 07:56:50.311842973 +0000 +++ synthv1-0.9.10+git20190929/src/synthv1_sched.h 2019-09-28 23:00:43.000000000 +0000 @@ -1,7 +1,7 @@ // synthv1_sched.h // /**************************************************************************** - Copyright (C) 2012-2017, rncbc aka Rui Nuno Capela. All rights reserved. + Copyright (C) 2012-2019, rncbc aka Rui Nuno Capela. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License @@ -63,6 +63,27 @@ // signal broadcast (static). static void sync_notify(synthv1 *pSynth, Type stype, int sid); + // Notifier - Worker/schedule proxy decl. + // + class Notifier + { + public: + + // ctor. + Notifier(synthv1 *pSynth); + + // dtor. + virtual ~Notifier(); + + // signal notifier. + virtual void notify(synthv1_sched::Type stype, int sid) const = 0; + + private: + + // instance variables. + synthv1 *m_pSynth; + }; + private: // instance variables. @@ -83,30 +104,6 @@ }; -//------------------------------------------------------------------------- -// synthv1_sched_notifier - worker/schedule proxy decl. -// - -class synthv1_sched_notifier -{ -public: - - // ctor. - synthv1_sched_notifier(synthv1 *pSynth); - - // dtor. - ~synthv1_sched_notifier(); - - // signal notifier. - virtual void notify(synthv1_sched::Type stype, int sid) const = 0; - -private: - - // instance variables. - synthv1 *m_pSynth; -}; - - #endif // __synthv1_sched_h // end of synthv1_sched.h diff -Nru synthv1-0.8.6/src/synthv1_tuning.cpp synthv1-0.9.10+git20190929/src/synthv1_tuning.cpp --- synthv1-0.8.6/src/synthv1_tuning.cpp 1970-01-01 00:00:00.000000000 +0000 +++ synthv1-0.9.10+git20190929/src/synthv1_tuning.cpp 2019-09-28 23:00:43.000000000 +0000 @@ -0,0 +1,347 @@ +// synthv1_tuning.cpp +// +/**************************************************************************** + Copyright (C) 2012-2018, rncbc aka Rui Nuno Capela. All rights reserved. + + 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. + +*****************************************************************************/ + +//------------------------------------------------------------------------- +// TuningMap +// +// -- borrowed, stirred and refactored from amsynth -- +// https://github.com/amsynth/amsynth +// Copyright (C) 2001-2012 Nick Dowell +// + +/* + * A TuningMap consists of two parts. + * + * The "key map" maps from MIDI note numbers to logical note numbers + * for the scale. This is often the identity mapping, but if your + * scale has, for example, 11 notes in it, you'll want to skip one + * per octave so the scale lines up with the pattern of keys on a + * standard keyboard. + * + * The "scale" maps from those logical note numbers to actual pitches. + * In terms of member variables, "scale" and "scaleDesc" belong to the + * scale, and everything else belongs to the mapping. + * + * For more information, refer to http://www.huygens-fokker.org/scala/ + */ + +#include "synthv1_tuning.h" + +#include +#include + +#include + + +// Default ctor. +synthv1_tuning::synthv1_tuning ( float refPitch, int refNote ) +{ + reset(refPitch, refNote); +} + + +// Default is 12-tone equal temperament, wstern standard mapping. +void synthv1_tuning::reset ( float refPitch, int refNote ) +{ + m_refPitch = refPitch; + m_refNote = refNote; + m_zeroNote = 0; + + m_scale.clear(); + + for (int i = 0; i < 12; ++i) + m_scale.push_back(::powf(2.0f, (i + 1) / 12.0f)); + + m_mapRepeatInc = 1; + + m_mapping.clear(); + m_mapping.push_back(0); + + updateBasePitch(); +} + + +void synthv1_tuning::updateBasePitch (void) +{ + // Clever, huh? + m_basePitch = 1.0f; + m_basePitch = m_refPitch / noteToPitch(m_refNote); +} + + +// Load custom Scala key-map file (.kbm) +bool synthv1_tuning::loadKeyMapFile ( const QString& keyMapFile ) +{ + QFile file(keyMapFile); + if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) + return false; + + QTextStream fs(&file); + int mapSize = -1; + int firstNote = -1; + int lastNote = -1; + int zeroNote = -1; + int refNote = -1; + float refPitch = 0.0f; + int mapRepeatInc = -1; + QVector mapping; + + while (!fs.atEnd()) { + const QString& line + = fs.readLine().simplified(); + // Skip all-whitespace lines... + if (line.isEmpty()) + continue; + // Skip comment lines... + if (line.at(0) == '!') + continue; + bool ok = false; + const QString& val + = line.section(' ', 0, 0); + // An active range should be defined on this line... + if (line.at(0) == '<') { + // No overlap is checked for; + // it wouldn't hurt anything if ranges overlapped. + const int min = line.section(' ', 1, 1).toInt(&ok); + if (!ok || min < 0) + return false; + ok = false; + const int max = line.section(' ', 2, 2).toInt(&ok); + if (!ok || max < min || max > 127) + return false; + } + else + if (mapSize < 0) { + mapSize = val.toInt(&ok); + if (!ok || mapSize < 0) + return false; + } + else + if (firstNote < 0) { + firstNote = val.toInt(&ok); + if (!ok || firstNote < 0 || firstNote > 127) + return false; + } + else + if (lastNote < 0) { + lastNote = val.toInt(&ok); + if (!ok || lastNote < 0 || lastNote > 127) + return false; + } + else + if (zeroNote < 0) { + zeroNote = val.toInt(&ok); + if (!ok || zeroNote < 0 || zeroNote > 127) + return false; + } + else + if (refNote < 0) { + refNote = val.toInt(&ok); + if (!ok || refNote < 0 || refNote > 127) + return false; + } + else + if (refPitch <= 0.0f) { + refPitch = val.toFloat(&ok); + if (!ok || refPitch < 0.001f) + return false; + } + else + if (mapRepeatInc < 0) { + mapRepeatInc = val.toInt(&ok); + if (!ok || mapRepeatInc < 0) + return false; + } + else + if (line.at(0).toLower() == 'x') { + mapping.push_back(-1); // unmapped key + } + else { + const int mapEntry = val.toInt(&ok); + if (!ok || mapEntry < 0) + return false; + mapping.push_back(mapEntry); + } + } + + // Didn't get far enough? + if (mapRepeatInc < 0) + return false; + + // Special case for "automatic" linear mapping + if (mapSize == 0) { + if (!mapping.empty()) + return false; + m_keyMapFile = keyMapFile; + m_zeroNote = zeroNote; + m_refNote = refNote; + m_refPitch = refPitch; + m_mapRepeatInc = 1; + m_mapping.clear(); + m_mapping.push_back(0); + updateBasePitch(); + return true; + } + + // Some of the kbm files included with Scala have + // extra x's at the end for no good reason + //if (mapping.size() > mapSize) + // return false; + + mapping.resize(mapSize); + + // Check to make sure reference pitch is actually mapped + int refIndex = (refNote - zeroNote) % mapSize; + if (refIndex < 0) + refIndex += mapSize; + if (mapping.at(refIndex) < 0) + return false; + + m_keyMapFile = keyMapFile; + m_zeroNote = zeroNote; + m_refNote = refNote; + m_refPitch = refPitch; + + if (mapRepeatInc == 0) + m_mapRepeatInc = mapSize; + else + m_mapRepeatInc = mapRepeatInc; + + m_mapping = mapping; + + updateBasePitch(); + return true; +} + + +// Load custom Scala scale file (.scl) +bool synthv1_tuning::loadScaleFile ( const QString& scaleFile ) +{ + QFile file(scaleFile); + if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) + return false; + + QTextStream fs(&file); + QString scaleDesc; + int scaleSize = -1; + QVector scale; + + while (!fs.atEnd()) { + const QString& line + = fs.readLine().simplified(); + // Skip all-whitespace lines after description... + if (line.isEmpty() && !scaleDesc.isEmpty()) + continue; + // Skip comment lines + if (line.at(0) == '!') + continue; + if (scaleDesc.isEmpty()) + scaleDesc = line; + else + if (scaleSize < 0) { + bool ok = false; + scaleSize = line.section(' ', 0, 0).toInt(&ok); + if (!ok || scaleSize < 0) + return false; + } + else scale.push_back(parseScaleLine(line)); + } + + if (scaleDesc.isEmpty() || scale.size() != scaleSize) + return false; + + m_scaleFile = scaleFile; + m_scaleDesc = scaleDesc; + + m_scale = scale; + + updateBasePitch(); + return true; +} + + +// Convert a single line of a Scala scale file to a frequency relative to 1/1. +float synthv1_tuning::parseScaleLine ( const QString& line ) const +{ + bool ok = false; + + if (line.contains('.')) { + // Treat as cents... + const float cents = line.section(' ', 0, 0).toFloat(&ok); + if (!ok || cents < 0.001f) + return 0.0f; + else + return ::powf(2.0f, cents / 1200.0f); + } else { + // Treat as ratio... + const long n = line.section('/', 0, 0).toLong(&ok); + if (!ok || n < 0) + return 0.0f; + ok = false; + const long d = line.section('/', 1, 1).toLong(&ok); + if (!ok || d < 0) + return 0.0f; + else + return float(n) / float(d); + } +} + + +// The main pitch/frequency (Hz) getter. +float synthv1_tuning::noteToPitch ( int note ) const +{ + if (note < 0 || note > 127 || m_mapping.empty()) + return 0.0f; + + const int mapSize = m_mapping.size(); + + int nRepeats = (note - m_zeroNote) / mapSize; + int mapIndex = (note - m_zeroNote) % mapSize; + + if (mapIndex < 0) { + mapIndex += mapSize; + --nRepeats; + } + + if (m_mapping.at(mapIndex) < 0) + return 0.0f; // unmapped note + + const int scaleDegree = nRepeats * m_mapRepeatInc + m_mapping.at(mapIndex); + const int scaleSize = m_scale.size(); + + int nOctaves = scaleDegree / scaleSize; + int scaleIndex = scaleDegree % scaleSize; + + if (scaleIndex < 0) { + scaleIndex += scaleSize; + --nOctaves; + } + + const float pitch + = m_basePitch * ::powf(m_scale.at(scaleSize - 1), nOctaves); + if (scaleIndex > 0) + return pitch * m_scale.at(scaleIndex - 1); + else + return pitch; +} + + +// end of synthv1_tuning.cpp diff -Nru synthv1-0.8.6/src/synthv1_tuning.h synthv1-0.9.10+git20190929/src/synthv1_tuning.h --- synthv1-0.8.6/src/synthv1_tuning.h 1970-01-01 00:00:00.000000000 +0000 +++ synthv1-0.9.10+git20190929/src/synthv1_tuning.h 2019-09-28 23:00:43.000000000 +0000 @@ -0,0 +1,108 @@ +// synthv1_tuning.h +// +/**************************************************************************** + Copyright (C) 2012-2018, rncbc aka Rui Nuno Capela. All rights reserved. + + 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. + +*****************************************************************************/ + +#ifndef __synthv1_tuning_h +#define __synthv1_tuning_h + +#include +#include + +//------------------------------------------------------------------------- +// TuningMap +// +// -- borrowed, stirred and refactored from amsynth -- +// https://github.com/amsynth/amsynth +// Copyright (C) 2001-2012 Nick Dowell +// + +/* + * A TuningMap consists of two parts. + * + * The "key map" maps from MIDI note numbers to logical note numbers + * for the scale. This is often the identity mapping, but if your + * scale has, for example, 11 notes in it, you'll want to skip one + * per octave so the scale lines up with the pattern of keys on a + * standard keyboard. + * + * The "scale" maps from those logical note numbers to actual pitches. + * In terms of member variables, "scale" and "scaleDesc" belong to the + * scale, and everything else belongs to the mapping. + * + * For more information, refer to http://www.huygens-fokker.org/scala/ + */ + +class synthv1_tuning +{ +public: + + // Default reference note and pitch (A4 @440hz) + synthv1_tuning(float refPitch = 440.0f, int refNote = 69); + + // Default 12-tone equal temperament, wstern standard mapping + void reset(float refPitch, int refNote); + + // Reference note and pitch accessors. + float refPitch() const { return m_refPitch; } + int refNote() const { return m_refNote; } + + // Load custom Scala key map file (.kbm) + bool loadKeyMapFile (const QString& filename); + + // Load custom Scala scale file (.scl) + bool loadScaleFile (const QString& filename); + + const QString& keyMapFile() const { return m_keyMapFile; } + + const QString& scaleFile() const { return m_scaleFile; } + const QString& scaleDesc() const { return m_scaleDesc; } + + // The main pitch/frequency (Hz) getter + float noteToPitch(int note) const; + +protected: + + float parseScaleLine(const QString& line) const; + + void updateBasePitch(); + +private: + + // Instance member variables. + QString m_keyMapFile; + + QString m_scaleFile; + QString m_scaleDesc; + + QVector m_scale; + + float m_refPitch; + int m_refNote; + int m_zeroNote; + int m_mapRepeatInc; + float m_basePitch; + + QVector m_mapping; +}; + + +#endif // __synthv1_tuning_h + +// end of synthv1_tuning.h diff -Nru synthv1-0.8.6/src/synthv1_ui.cpp synthv1-0.9.10+git20190929/src/synthv1_ui.cpp --- synthv1-0.8.6/src/synthv1_ui.cpp 2017-12-20 07:56:50.311842973 +0000 +++ synthv1-0.9.10+git20190929/src/synthv1_ui.cpp 2019-09-28 23:00:43.000000000 +0000 @@ -1,7 +1,7 @@ // synthv1_ui.cpp // /**************************************************************************** - Copyright (C) 2012-2017, rncbc aka Rui Nuno Capela. All rights reserved. + Copyright (C) 2012-2019, rncbc aka Rui Nuno Capela. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License @@ -110,4 +110,88 @@ } +void synthv1_ui::setTuningEnabled ( bool enabled ) +{ + m_pSynth->setTuningEnabled(enabled); +} + +bool synthv1_ui::isTuningEnabled (void) const +{ + return m_pSynth->isTuningEnabled(); +} + + +void synthv1_ui::setTuningRefPitch ( float refPitch ) +{ + m_pSynth->setTuningRefPitch(refPitch); +} + +float synthv1_ui::tuningRefPitch (void) const +{ + return m_pSynth->tuningRefPitch(); +} + + +void synthv1_ui::setTuningRefNote ( int refNote ) +{ + m_pSynth->setTuningRefNote(refNote); +} + +int synthv1_ui::tuningRefNote (void) const +{ + return m_pSynth->tuningRefNote(); +} + + +void synthv1_ui::setTuningScaleFile ( const char *pszScaleFile ) +{ + m_pSynth->setTuningScaleFile(pszScaleFile); +} + +const char *synthv1_ui::tuningScaleFile (void) const +{ + return m_pSynth->tuningScaleFile(); +} + + +void synthv1_ui::setTuningKeyMapFile ( const char *pszKeyMapFile ) +{ + m_pSynth->setTuningKeyMapFile(pszKeyMapFile); +} + +const char *synthv1_ui::tuningKeyMapFile (void) const +{ + return m_pSynth->tuningKeyMapFile(); +} + + +void synthv1_ui::resetTuning (void) +{ + m_pSynth->resetTuning(); +} + + +// MIDI note/octave name helper (static). +QString synthv1_ui::noteName ( int note ) +{ + static const char *s_notes[] = + { + QT_TR_NOOP("C"), + QT_TR_NOOP("C#/Db"), + QT_TR_NOOP("D"), + QT_TR_NOOP("D#/Eb"), + QT_TR_NOOP("E"), + QT_TR_NOOP("F"), + QT_TR_NOOP("F#/Gb"), + QT_TR_NOOP("G"), + QT_TR_NOOP("G#/Ab"), + QT_TR_NOOP("A"), + QT_TR_NOOP("A#/Bb"), + QT_TR_NOOP("B") + }; + + return QString("%1 %2").arg(s_notes[note % 12]).arg((note / 12) - 1); +} + + // end of synthv1_ui.cpp diff -Nru synthv1-0.8.6/src/synthv1_ui.h synthv1-0.9.10+git20190929/src/synthv1_ui.h --- synthv1-0.8.6/src/synthv1_ui.h 2017-12-20 07:56:50.311842973 +0000 +++ synthv1-0.9.10+git20190929/src/synthv1_ui.h 2019-09-28 23:00:43.000000000 +0000 @@ -1,7 +1,7 @@ // synthv1_ui.h // /**************************************************************************** - Copyright (C) 2012-2017, rncbc aka Rui Nuno Capela. All rights reserved. + Copyright (C) 2012-2019, rncbc aka Rui Nuno Capela. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License @@ -59,6 +59,26 @@ void directNoteOn(int note, int vel); + void setTuningEnabled(bool enabled); + bool isTuningEnabled() const; + + void setTuningRefPitch(float refPitch); + float tuningRefPitch() const; + + void setTuningRefNote(int refNote); + int tuningRefNote() const; + + void setTuningScaleFile(const char *pszScaleFile); + const char *tuningScaleFile() const; + + void setTuningKeyMapFile(const char *pszKeyMapFile); + const char *tuningKeyMapFile() const; + + void resetTuning(); + + // MIDI note/octave name helper. + static QString noteName(int note); + private: synthv1 *m_pSynth; diff -Nru synthv1-0.8.6/src/synthv1_wave.cpp synthv1-0.9.10+git20190929/src/synthv1_wave.cpp --- synthv1-0.8.6/src/synthv1_wave.cpp 2017-12-20 07:56:50.311842973 +0000 +++ synthv1-0.9.10+git20190929/src/synthv1_wave.cpp 2019-09-28 23:00:43.000000000 +0000 @@ -1,7 +1,7 @@ // synthv1_wave.cpp // /**************************************************************************** - Copyright (C) 2012-2017, rncbc aka Rui Nuno Capela. All rights reserved. + Copyright (C) 2012-2019, rncbc aka Rui Nuno Capela. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License @@ -38,7 +38,7 @@ // ctor. synthv1_wave_sched (synthv1_wave *wave) - : synthv1_sched(NULL, Wave), m_wave(wave) {} + : synthv1_sched(nullptr, Wave), m_wave(wave) {} // process reset (virtual). void process(int) @@ -59,8 +59,8 @@ synthv1_wave::synthv1_wave ( uint32_t nsize, uint16_t nover, uint16_t ntabs ) : m_nsize(nsize), m_nover(nover), m_ntabs(ntabs), m_shape(Saw), m_width(1.0f), m_bandl(false), - m_srate(44100.0f), m_srand(0), - m_min_freq(0.0f), m_max_freq(0.0f), m_sched(NULL) + m_srate(44100.0f), m_phase0(0.0f), m_srand(0), + m_min_freq(0.0f), m_max_freq(0.0f), m_sched(nullptr) { const uint16_t ntabs1 = m_ntabs + 1; @@ -121,7 +121,7 @@ break; case Noise: reset_noise(); - // thru... + // Fall thru... default: break; } @@ -438,19 +438,25 @@ uint32_t i; float pmax = 0.0f; - float pmin = 0.0f; + float pmid = 0.0f; - for (i = 0; i < m_nsize; ++i) { - const float p = frames[i]; - if (pmax < p) - pmax = p; - else - if (pmin > p) - pmin = p; + if (m_ntabs > 0) { + for (i = 0; i < m_nsize; ++i) + pmid += frames[i]; + pmid /= float(m_nsize); + } else { + for (i = 0; i < m_nsize; ++i) { + const float p = frames[i]; + if (pmax < p) + pmax = p; + else + if (pmid > p) + pmid = p; + } + pmid = 0.5f * (pmax + pmid); + pmax = 0.0f; } - const float pmid = 0.5f * (pmax + pmin); - pmax = 0.0f; for (i = 0; i < m_nsize; ++i) { frames[i] -= pmid; @@ -477,14 +483,14 @@ frames[i] = frames[i - m_nsize]; if (itab == m_ntabs) { - uint32_t pk = 0; + uint32_t k = 0; for (i = 1; i < m_nsize; ++i) { const float p1 = frames[i - 1]; const float p2 = frames[i]; if (p1 < 0.0f && p2 >= 0.0f) - pk = i; + k = i; } - m_phase0 = float(pk); + m_phase0 = float(k) / float(m_nsize); } } diff -Nru synthv1-0.8.6/src/synthv1_wave.h synthv1-0.9.10+git20190929/src/synthv1_wave.h --- synthv1-0.8.6/src/synthv1_wave.h 2017-12-20 07:56:50.311842973 +0000 +++ synthv1-0.9.10+git20190929/src/synthv1_wave.h 2019-09-28 23:00:43.000000000 +0000 @@ -1,7 +1,7 @@ // synthv1_wave.h // /**************************************************************************** - Copyright (C) 2012-2017, rncbc aka Rui Nuno Capela. All rights reserved. + Copyright (C) 2012-2019, rncbc aka Rui Nuno Capela. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License @@ -50,7 +50,7 @@ { return m_shape; } float width() const { return m_width; } - bool bandlimited() const + bool bandl() const { return m_bandl; } // sample rate. @@ -101,15 +101,13 @@ }; // begin. - float start(Phase& phase, float pshift = 0.0f, float freq = 0.0f) + float start(Phase& phase, float pshift = 0.0f, float freq = 0.0f) const { - const float p0 = float(m_nsize); - update(phase, freq); - phase.phase = m_phase0 + pshift * p0; - if (phase.phase >= p0) - phase.phase -= p0; + phase.phase = m_phase0 + pshift; + if (phase.phase >= 1.0f) + phase.phase -= 1.0f; return sample(phase, freq); } @@ -117,13 +115,13 @@ // iterate. float sample(Phase& phase, float freq) const { - const uint32_t i = uint32_t(phase.phase); - const float alpha = phase.phase - float(i); - const float p0 = float(m_nsize); - - phase.phase += p0 * freq / m_srate; - if (phase.phase >= p0) { - phase.phase -= p0; + const float index = phase.phase * float(m_nsize); + const uint32_t i = uint32_t(index); + const float alpha = index - float(i); + + phase.phase += freq / m_srate; + if (phase.phase >= 1.0f) { + phase.phase -= 1.0f; if (phase.slave) phase.slave->phase = phase.slave_phase0; } @@ -163,18 +161,15 @@ // absolute value. float value(float phase) const { - const float p0 = float(m_nsize); - - phase *= p0; phase += m_phase0; - if (phase >= p0) - phase -= p0; + if (phase >= 1.0f) + phase -= 1.0f; - return m_tables[m_ntabs][uint32_t(phase)]; + return m_tables[m_ntabs][uint32_t(phase * float(m_nsize))]; } // post-iter. - void update(Phase& phase, float freq) + void update(Phase& phase, float freq) const { if (freq < m_min_freq) { phase.itab = m_ntabs; @@ -314,6 +309,13 @@ } } + // phase-shift accessor. + float pshift() const + { + const float pshift = m_wave->phase0() + m_phase.phase; + return (pshift >= 1.0f ? pshift - 1.0f : pshift); + } + private: synthv1_wave *m_wave; diff -Nru synthv1-0.8.6/src/synthv1widget_config.cpp synthv1-0.9.10+git20190929/src/synthv1widget_config.cpp --- synthv1-0.8.6/src/synthv1widget_config.cpp 2017-12-20 07:56:50.325842973 +0000 +++ synthv1-0.9.10+git20190929/src/synthv1widget_config.cpp 2019-09-28 23:00:43.000000000 +0000 @@ -1,7 +1,7 @@ // synthv1widget_config.cpp // /**************************************************************************** - Copyright (C) 2012-2017, rncbc aka Rui Nuno Capela. All rights reserved. + Copyright (C) 2012-2019, rncbc aka Rui Nuno Capela. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License @@ -30,7 +30,12 @@ #include "ui_synthv1widget_config.h" #include +#include + #include +#include +#include +#include #include @@ -54,6 +59,22 @@ //m_ui.CustomStyleThemeComboBox->addItem(tr("(default)")); m_ui.CustomStyleThemeComboBox->addItems(QStyleFactory::keys()); + // Note names. + QStringList notes; + for (int note = 0; note < 128; ++note) + notes << synthv1_ui::noteName(note); + m_ui.TuningRefNoteComboBox->insertItems(0, notes); + + // Tuning specifics setup... + m_ui.TuningTabBar->addTab(tr("&Global")); + m_ui.TuningTabBar->addTab(tr("&Instance")); + + // Dialog dirty flags. + m_iDirtyTuning = 0; + m_iDirtyControls = 0; + m_iDirtyPrograms = 0; + m_iDirtyOptions = 0; + // Setup options... synthv1_config *pConfig = synthv1_config::getInstance(); if (pConfig && m_pSynthUi) { @@ -69,6 +90,7 @@ m_ui.CustomStyleThemeComboBox->setCurrentIndex(iCustomStyleTheme); m_ui.CustomStyleThemeTextLabel->setEnabled(!bPlugin); m_ui.CustomStyleThemeComboBox->setEnabled(!bPlugin); + m_ui.RandomizePercentSpinBox->setValue(pConfig->fRandomizePercent); // Load controllers database... synthv1_controls *pControls = m_pSynthUi->controls(); if (pControls) { @@ -84,6 +106,13 @@ m_ui.ProgramsPreviewCheckBox->setEnabled(!bPlugin); m_ui.ProgramsEnabledCheckBox->setChecked(pPrograms->enabled()); } + // Initialize conveniency options... + loadComboBoxHistory(m_ui.TuningScaleFileComboBox); + loadComboBoxHistory(m_ui.TuningKeyMapFileComboBox); + // Micro-tonal tuning settings... + const int iTuningTab = (m_pSynthUi->isTuningEnabled() ? 1 : 0); + m_ui.TuningTabBar->setCurrentIndex(iTuningTab); + tuningTabChanged(iTuningTab); } // Signal/slots connections... @@ -146,6 +175,35 @@ SIGNAL(customContextMenuRequested(const QPoint&)), SLOT(programsContextMenuRequested(const QPoint&))); + // Tuning slots... + QObject::connect(m_ui.TuningTabBar, + SIGNAL(currentChanged(int)), + SLOT(tuningTabChanged(int))); + QObject::connect(m_ui.TuningEnabledCheckBox, + SIGNAL(toggled(bool)), + SLOT(tuningChanged())); + QObject::connect(m_ui.TuningRefNoteComboBox, + SIGNAL(activated(int)), + SLOT(tuningChanged())); + QObject::connect(m_ui.TuningRefPitchSpinBox, + SIGNAL(valueChanged(double)), + SLOT(tuningChanged())); + QObject::connect(m_ui.TuningRefNotePushButton, + SIGNAL(clicked()), + SLOT(tuningRefNoteClicked())); + QObject::connect(m_ui.TuningScaleFileComboBox, + SIGNAL(activated(const QString&)), + SLOT(tuningChanged())); + QObject::connect(m_ui.TuningScaleFileToolButton, + SIGNAL(clicked()), + SLOT(tuningScaleFileClicked())); + QObject::connect(m_ui.TuningKeyMapFileToolButton, + SIGNAL(clicked()), + SLOT(tuningKeyMapFileClicked())); + QObject::connect(m_ui.TuningKeyMapFileComboBox, + SIGNAL(activated(const QString&)), + SLOT(tuningChanged())); + // Options slots... QObject::connect(m_ui.ProgramsPreviewCheckBox, SIGNAL(toggled(bool)), @@ -162,6 +220,9 @@ QObject::connect(m_ui.CustomStyleThemeComboBox, SIGNAL(activated(int)), SLOT(optionsChanged())); + QObject::connect(m_ui.RandomizePercentSpinBox, + SIGNAL(valueChanged(double)), + SLOT(optionsChanged())); // Dialog commands... QObject::connect(m_ui.DialogButtonBox, @@ -171,11 +232,6 @@ SIGNAL(rejected()), SLOT(reject())); - // Dialog dirty flags. - m_iDirtyControls = 0; - m_iDirtyPrograms = 0; - m_iDirtyOptions = 0; - // Done. stabilize(); } @@ -237,7 +293,7 @@ QMenu menu(this); QAction *pAction; - bool bEnabled = (m_pSynthUi && m_pSynthUi->controls() != NULL); + bool bEnabled = (m_pSynthUi && m_pSynthUi->controls() != nullptr); pAction = menu.addAction(QIcon(":/images/synthv1_preset.png"), tr("&Add Controller"), this, SLOT(controlsAddItem())); @@ -245,7 +301,7 @@ menu.addSeparator(); - bEnabled = bEnabled && (pItem != NULL); + bEnabled = bEnabled && (pItem != nullptr); pAction = menu.addAction(QIcon(":/images/presetEdit.png"), tr("&Edit"), this, SLOT(controlsEditItem())); @@ -332,7 +388,7 @@ QMenu menu(this); QAction *pAction; - bool bEnabled = (m_pSynthUi && m_pSynthUi->programs() != NULL); + bool bEnabled = (m_pSynthUi && m_pSynthUi->programs() != nullptr); pAction = menu.addAction(QIcon(":/images/presetBank.png"), tr("Add &Bank"), this, SLOT(programsAddBankItem())); @@ -344,7 +400,7 @@ menu.addSeparator(); - bEnabled = bEnabled && (pItem != NULL); + bEnabled = bEnabled && (pItem != nullptr); pAction = menu.addAction(QIcon(":/images/presetEdit.png"), tr("&Edit"), this, SLOT(programsEditItem())); @@ -392,6 +448,173 @@ } +// tuning command slots +void synthv1widget_config::tuningTabChanged ( int iTuningTab ) +{ + // Prevent loss of some tuning changes here... + if (m_iDirtyTuning > 0 && + QMessageBox::warning(this, + tr("Warning"), + tr("%1 tuning settings have been changed.\n\n" + "Do you want to discard the changes?") + .arg(m_ui.TuningTabBar->tabText(1 - iTuningTab).remove('&')), + QMessageBox::Discard | QMessageBox::Cancel) + == QMessageBox::Cancel) { + const bool bBlockSignals = m_ui.TuningTabBar->blockSignals(true); + m_ui.TuningTabBar->setCurrentIndex(1 - iTuningTab); + m_ui.TuningTabBar->blockSignals(bBlockSignals); + return; + } + + if (iTuningTab == 0) { + // Global (default) scope... + synthv1_config *pConfig = synthv1_config::getInstance(); + if (pConfig) { + m_ui.TuningEnabledCheckBox->setChecked(pConfig->bTuningEnabled); + m_ui.TuningRefNoteComboBox->setCurrentIndex(pConfig->iTuningRefNote); + m_ui.TuningRefPitchSpinBox->setValue(double(pConfig->fTuningRefPitch)); + setComboBoxCurrentItem( + m_ui.TuningScaleFileComboBox, + QFileInfo(pConfig->sTuningScaleFile)); + setComboBoxCurrentItem( + m_ui.TuningKeyMapFileComboBox, + QFileInfo(pConfig->sTuningKeyMapFile)); + } + } + else + if (m_pSynthUi) { + // Instance scope... + m_ui.TuningEnabledCheckBox->setChecked(m_pSynthUi->isTuningEnabled()); + m_ui.TuningRefNoteComboBox->setCurrentIndex(m_pSynthUi->tuningRefNote()); + m_ui.TuningRefPitchSpinBox->setValue(double(m_pSynthUi->tuningRefPitch())); + setComboBoxCurrentItem( + m_ui.TuningScaleFileComboBox, + QFileInfo(QString::fromUtf8(m_pSynthUi->tuningScaleFile()))); + setComboBoxCurrentItem( + m_ui.TuningKeyMapFileComboBox, + QFileInfo(QString::fromUtf8(m_pSynthUi->tuningKeyMapFile()))); + } + + // Reset tuning dirty flag... + m_iDirtyTuning = 0; +} + + +void synthv1widget_config::tuningRefNoteClicked (void) +{ + m_ui.TuningRefNoteComboBox->setCurrentIndex(69); + m_ui.TuningRefPitchSpinBox->setValue(double(440.0f)); + + tuningChanged(); +} + + +void synthv1widget_config::tuningScaleFileClicked (void) +{ + synthv1_config *pConfig = synthv1_config::getInstance(); + if (pConfig == nullptr) + return; + + QString sTuningScaleFile = m_ui.TuningScaleFileComboBox->currentText(); + + const QString sExt("scl"); + const QString& sTitle = tr("Open Scale File"); + + QStringList filters; + filters.append(tr("Scale files (*.%1)").arg(sExt)); + filters.append(tr("All files (*.*)")); + const QString& sFilter = filters.join(";;"); + + QWidget *pParentWidget = nullptr; + QFileDialog::Options options = 0; + if (pConfig->bDontUseNativeDialogs) { + options |= QFileDialog::DontUseNativeDialog; + pParentWidget = QWidget::window(); + } +#if 1//QT_VERSION < QT_VERSION_CHECK(4, 4, 0) + sTuningScaleFile = QFileDialog::getOpenFileName(pParentWidget, + sTitle, pConfig->sTuningScaleDir, sFilter, nullptr, options); +#else + QFileDialog fileDialog(pParentWidget, + sTitle, sTuningScaleFile, sFilter); + fileDialog.setAcceptMode(QFileDialog::AcceptOpen); + fileDialog.setFileMode(QFileDialog::ExistingFiles); + fileDialog.setDefaultSuffix(sExt); + QList urls(fileDialog.sidebarUrls()); + urls.append(QUrl::fromLocalFile(pConfig->sTuningScaleDir)); + fileDialog.setSidebarUrls(urls); + fileDialog.setOptions(options); + if (fileDialog.exec()) + sTuningScaleFile = fileDialog.selectedFiles().first(); +#endif + + if (!sTuningScaleFile.isEmpty()) { + const QFileInfo info(sTuningScaleFile); + if (setComboBoxCurrentItem(m_ui.TuningScaleFileComboBox, info)) { + pConfig->sTuningScaleDir = info.absolutePath(); + tuningChanged(); + } + } +} + + +void synthv1widget_config::tuningKeyMapFileClicked (void) +{ + synthv1_config *pConfig = synthv1_config::getInstance(); + if (pConfig == nullptr) + return; + + QString sTuningKeyMapFile = m_ui.TuningKeyMapFileComboBox->currentText(); + + const QString sExt("kbm"); + const QString& sTitle = tr("Open Key Map File"); + + QStringList filters; + filters.append(tr("Key Map files (*.%1)").arg(sExt)); + filters.append(tr("All files (*.*)")); + const QString& sFilter = filters.join(";;"); + + QWidget *pParentWidget = nullptr; + QFileDialog::Options options = 0; + if (pConfig->bDontUseNativeDialogs) { + options |= QFileDialog::DontUseNativeDialog; + pParentWidget = QWidget::window(); + } +#if 1//QT_VERSION < QT_VERSION_CHECK(4, 4, 0) + sTuningKeyMapFile = QFileDialog::getOpenFileName(pParentWidget, + sTitle, pConfig->sTuningKeyMapDir, sFilter, nullptr, options); +#else + QFileDialog fileDialog(pParentWidget, + sTitle, sTuningScaleFile, sFilter); + fileDialog.setAcceptMode(QFileDialog::AcceptOpen); + fileDialog.setFileMode(QFileDialog::ExistingFiles); + fileDialog.setDefaultSuffix(sExt); + QList urls(fileDialog.sidebarUrls()); + urls.append(QUrl::fromLocalFile(pConfig->sTuningKeyMapDir)); + fileDialog.setSidebarUrls(urls); + fileDialog.setOptions(options); + if (fileDialog.exec()) + sTuningKeyMapFile = fileDialog.selectedFiles().first(); +#endif + + if (!sTuningKeyMapFile.isEmpty()) { + const QFileInfo info(sTuningKeyMapFile); + if (setComboBoxCurrentItem(m_ui.TuningKeyMapFileComboBox, info)) { + pConfig->sTuningKeyMapDir = info.absolutePath(); + tuningChanged(); + } + } +} + + +void synthv1widget_config::tuningChanged (void) +{ + ++m_iDirtyTuning; + + stabilize(); +} + + // options slot. void synthv1widget_config::optionsChanged (void) { @@ -405,24 +628,41 @@ void synthv1widget_config::stabilize (void) { QTreeWidgetItem *pItem = m_ui.ControlsTreeWidget->currentItem(); - bool bEnabled = (m_pSynthUi && m_pSynthUi->controls() != NULL); + bool bEnabled = (m_pSynthUi && m_pSynthUi->controls() != nullptr); m_ui.ControlsAddItemToolButton->setEnabled(bEnabled); - bEnabled = bEnabled && (pItem != NULL); + bEnabled = bEnabled && (pItem != nullptr); m_ui.ControlsEditToolButton->setEnabled(bEnabled); m_ui.ControlsDeleteToolButton->setEnabled(bEnabled); pItem = m_ui.ProgramsTreeWidget->currentItem(); - bEnabled = (m_pSynthUi && m_pSynthUi->programs() != NULL); + bEnabled = (m_pSynthUi && m_pSynthUi->programs() != nullptr); m_ui.ProgramsPreviewCheckBox->setEnabled( bEnabled && m_ui.ProgramsEnabledCheckBox->isChecked()); m_ui.ProgramsAddBankToolButton->setEnabled(bEnabled); m_ui.ProgramsAddItemToolButton->setEnabled(bEnabled); - bEnabled = bEnabled && (pItem != NULL); + bEnabled = bEnabled && (pItem != nullptr); m_ui.ProgramsEditToolButton->setEnabled(bEnabled); m_ui.ProgramsDeleteToolButton->setEnabled(bEnabled); + bEnabled = m_ui.TuningEnabledCheckBox->isChecked(); + const bool bTuningRefEnabled = bEnabled + && comboBoxCurrentItem(m_ui.TuningKeyMapFileComboBox).isEmpty(); + m_ui.TuningRefNoteTextLabel->setEnabled(bTuningRefEnabled); + m_ui.TuningRefNoteComboBox->setEnabled(bTuningRefEnabled); + m_ui.TuningRefPitchSpinBox->setEnabled(bTuningRefEnabled); + m_ui.TuningRefNotePushButton->setEnabled(bTuningRefEnabled); + m_ui.TuningScaleFileTextLabel->setEnabled(bEnabled); + m_ui.TuningScaleFileComboBox->setEnabled(bEnabled); + m_ui.TuningScaleFileToolButton->setEnabled(bEnabled); + m_ui.TuningKeyMapFileTextLabel->setEnabled(bEnabled); + m_ui.TuningKeyMapFileComboBox->setEnabled(bEnabled); + m_ui.TuningKeyMapFileToolButton->setEnabled(bEnabled); + const bool bValid - = (m_iDirtyControls > 0 || m_iDirtyPrograms > 0 || m_iDirtyOptions > 0); + = (m_iDirtyTuning > 0 + || m_iDirtyControls > 0 + || m_iDirtyPrograms > 0 + || m_iDirtyOptions > 0); m_ui.DialogButtonBox->button(QDialogButtonBox::Ok)->setEnabled(bValid); } @@ -432,6 +672,36 @@ { synthv1_config *pConfig = synthv1_config::getInstance(); + if (m_iDirtyTuning > 0 && pConfig && m_pSynthUi) { + // Micro-tonal tuning settings... + if (m_ui.TuningTabBar->currentIndex() == 0) { + // Global (default) scope... + pConfig->bTuningEnabled = m_ui.TuningEnabledCheckBox->isChecked(); + pConfig->iTuningRefNote = m_ui.TuningRefNoteComboBox->currentIndex(); + pConfig->fTuningRefPitch = float(m_ui.TuningRefPitchSpinBox->value()); + pConfig->sTuningScaleFile = comboBoxCurrentItem(m_ui.TuningScaleFileComboBox); + pConfig->sTuningKeyMapFile = comboBoxCurrentItem(m_ui.TuningKeyMapFileComboBox); + } else { + m_pSynthUi->setTuningEnabled( + m_ui.TuningEnabledCheckBox->isChecked()); + m_pSynthUi->setTuningRefNote( + m_ui.TuningRefNoteComboBox->currentIndex()); + m_pSynthUi->setTuningRefPitch( + float(m_ui.TuningRefPitchSpinBox->value())); + m_pSynthUi->setTuningScaleFile(comboBoxCurrentItem( + m_ui.TuningScaleFileComboBox).toUtf8().constData()); + m_pSynthUi->setTuningKeyMapFile(comboBoxCurrentItem( + m_ui.TuningKeyMapFileComboBox).toUtf8().constData()); + } + // Reset/update micro-tonal tuning... + m_pSynthUi->resetTuning(); + // Save other conveniency options... + saveComboBoxHistory(m_ui.TuningScaleFileComboBox); + saveComboBoxHistory(m_ui.TuningKeyMapFileComboBox); + // Reset dirty flag. + m_iDirtyTuning = 0; + } + if (m_iDirtyControls > 0 && pConfig && m_pSynthUi) { // Save controls... synthv1_controls *pControls = m_pSynthUi->controls(); @@ -470,6 +740,7 @@ pConfig->sCustomStyleTheme = m_ui.CustomStyleThemeComboBox->currentText(); else pConfig->sCustomStyleTheme.clear(); + pConfig->fRandomizePercent = float(m_ui.RandomizePercentSpinBox->value()); int iNeedRestart = 0; if (pConfig->sCustomStyleTheme != sOldCustomStyleTheme) { if (pConfig->sCustomStyleTheme.isEmpty()) { @@ -482,7 +753,7 @@ // Show restart message if needed... if (iNeedRestart > 0) { QMessageBox::information(this, - tr("Information") + " - " SYNTHV1_TITLE, + tr("Information"), tr("Some settings may be only effective\n" "next time you start this application.")); } @@ -500,13 +771,16 @@ bool bReject = true; // Check if there's any pending changes... - if (m_iDirtyControls > 0 || m_iDirtyPrograms > 0 || m_iDirtyOptions > 0) { + if (m_iDirtyTuning > 0 || + m_iDirtyControls > 0 || + m_iDirtyPrograms > 0 || + m_iDirtyOptions > 0) { QMessageBox::StandardButtons buttons = QMessageBox::Discard | QMessageBox::Cancel; if (m_ui.DialogButtonBox->button(QDialogButtonBox::Ok)->isEnabled()) buttons |= QMessageBox::Apply; switch (QMessageBox::warning(this, - tr("Warning") + " - " SYNTHV1_TITLE, + tr("Warning"), tr("Some settings have been changed.\n\n" "Do you want to apply the changes?"), buttons)) { @@ -525,4 +799,88 @@ } +// Combo box history persistence helper implementation. +void synthv1widget_config::loadComboBoxHistory ( QComboBox *pComboBox ) +{ + synthv1_config *pConfig = synthv1_config::getInstance(); + if (pConfig == nullptr) + return; + + // Load combobox list from configuration settings file... + const bool bBlockSignals = pComboBox->blockSignals(true); + pConfig->beginGroup("/History"); + const QStringList& history + = pConfig->value('/' + pComboBox->objectName()).toStringList(); + QStringListIterator iter(history); + while (iter.hasNext()) { + const QFileInfo info(iter.next()); + if (info.exists() && info.isReadable()) { + const QString& sPath = info.canonicalFilePath(); + pComboBox->insertItem(0, info.fileName(), sPath); + } + } + pConfig->endGroup(); + pComboBox->blockSignals(bBlockSignals); +} + + +void synthv1widget_config::saveComboBoxHistory ( QComboBox *pComboBox ) +{ + synthv1_config *pConfig = synthv1_config::getInstance(); + if (pConfig == nullptr) + return; + + // Save combobox list to configuration settings file... + const bool bBlockSignals = pComboBox->blockSignals(true); + pConfig->beginGroup("/History"); + QStringList history; + const int iCount = pComboBox->count(); + for (int i = 0; i < iCount; ++i) { + const QString& sData = pComboBox->itemData(i).toString(); + if (!sData.isEmpty()) + history.prepend(sData); + } + pConfig->setValue('/' + pComboBox->objectName(), history); + pConfig->endGroup(); + pComboBox->blockSignals(bBlockSignals); +} + + +// Combo box settter/gettter helper prototypes. +bool synthv1widget_config::setComboBoxCurrentItem ( + QComboBox *pComboBox, const QFileInfo& info ) +{ + const bool bBlockSignals = pComboBox->blockSignals(true); + const bool bResult = info.exists() && info.isReadable(); + if (bResult) { + const QString& sData = info.canonicalFilePath(); + int iIndex = pComboBox->findData(sData); + if (iIndex < 0) { + pComboBox->insertItem(0, info.fileName(), sData); + iIndex = 0; + } + pComboBox->setCurrentIndex(iIndex); + pComboBox->setToolTip(sData); + } else { + pComboBox->setCurrentIndex(pComboBox->count() - 1); + pComboBox->setToolTip(pComboBox->currentText()); + } + pComboBox->blockSignals(bBlockSignals); + + return bResult; +} + + +QString synthv1widget_config::comboBoxCurrentItem ( QComboBox *pComboBox ) +{ + QString sData; + + const int iIndex = pComboBox->currentIndex(); + if (iIndex >= 0) + sData = pComboBox->itemData(iIndex).toString(); + + return sData; +} + + // end of synthv1widget_config.cpp diff -Nru synthv1-0.8.6/src/synthv1widget_config.h synthv1-0.9.10+git20190929/src/synthv1widget_config.h --- synthv1-0.8.6/src/synthv1widget_config.h 2017-12-20 07:56:50.325842973 +0000 +++ synthv1-0.9.10+git20190929/src/synthv1widget_config.h 2019-09-28 23:00:43.000000000 +0000 @@ -1,7 +1,7 @@ // synthv1widget_config.h // /**************************************************************************** - Copyright (C) 2012-2017, rncbc aka Rui Nuno Capela. All rights reserved. + Copyright (C) 2012-2019, rncbc aka Rui Nuno Capela. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License @@ -32,6 +32,9 @@ class synthv1_ui; +class QComboBox; +class QFileInfo; + //---------------------------------------------------------------------------- // synthv1widget_config -- UI wrapper form. @@ -75,6 +78,12 @@ void controlsEnabled(bool); void programsEnabled(bool); + void tuningTabChanged(int); + void tuningRefNoteClicked(); + void tuningScaleFileClicked(); + void tuningKeyMapFileClicked(); + + void tuningChanged(); void controlsChanged(); void programsChanged(); void optionsChanged(); @@ -85,6 +94,14 @@ protected: + // Combo box history persistence helper prototypes. + void loadComboBoxHistory(QComboBox *pComboBox); + void saveComboBoxHistory(QComboBox *pComboBox); + + // Combo box settter/gettter helper prototypes. + bool setComboBoxCurrentItem(QComboBox *pComboBox, const QFileInfo& info); + QString comboBoxCurrentItem(QComboBox *pComboBox); + // stabilizer. void stabilize(); @@ -98,6 +115,7 @@ synthv1_ui *m_pSynthUi; // Dialog dirty flag. + int m_iDirtyTuning; int m_iDirtyControls; int m_iDirtyPrograms; int m_iDirtyOptions; diff -Nru synthv1-0.8.6/src/synthv1widget_config.ui synthv1-0.9.10+git20190929/src/synthv1widget_config.ui --- synthv1-0.8.6/src/synthv1widget_config.ui 2017-12-20 07:56:50.326842973 +0000 +++ synthv1-0.9.10+git20190929/src/synthv1widget_config.ui 2019-09-28 23:00:43.000000000 +0000 @@ -3,7 +3,7 @@ rncbc aka Rui Nuno Capela synthv1 - An old-school polyphonic synthesizer - Copyright (C) 2012-2017, rncbc aka Rui Nuno Capela. All rights reserved. + Copyright (C) 2012-2019, rncbc aka Rui Nuno Capela. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License @@ -31,7 +31,7 @@ - Configure - synthv1 + Configure :/images/synthv1.png @@ -95,7 +95,7 @@ - + Qt::Horizontal @@ -163,7 +163,45 @@ - + + + + &Randomize factor: + + + RandomizePercentSpinBox + + + + + + + Randomizer deviation from current value + + + % + + + true + + + 1 + + + 0.1 + + + 100.0 + + + 0.1 + + + 20.0 + + + + Qt::Vertical @@ -254,7 +292,7 @@ Qt::Horizontal - + 20 20 @@ -312,11 +350,11 @@ - - + + Whether MIDI bank/programs will be enabled - + E&nabled @@ -335,11 +373,11 @@ - - + + Whether to preview the current selected program - + &Preview current program @@ -408,7 +446,7 @@ Qt::Horizontal - + 20 20 @@ -476,11 +514,11 @@ - - + + Whether MIDI controllers will be enabled - + E&nabled @@ -502,6 +540,269 @@ + + + &Tuning + + + Tuning + + + + + + 0 + + + 0 + + + + + QTabBar::RoundedNorth + + + + + + + true + + + QFrame::NoFrame + + + QFrame::Plain + + + + + + Whether to use custom tuning (micro-tonal) + + + &Enable custom tuning (micro-tonal) + + + + + + + Re&ference: + + + TuningRefNoteComboBox + + + + + + + + 64 + 24 + + + + Reference note + + + false + + + + + + + + 96 + 24 + + + + Reference pitch + + + Hz + + + 1 + + + 20.0 + + + 20000.0 + + + 440.0 + + + + + + + Reset reference note and pitch to default (A4@440Hz) + + + &Reset + + + false + + + + + + + Qt::Horizontal + + + + 20 + 8 + + + + + + + + Whether to use an alternate scale definition file (*.scl) + + + &Scale: + + + TuningScaleFileComboBox + + + + + + + + 360 + 0 + + + + Scale definition file (*.scl) + + + false + + + + (default) + + + + + + + + + 22 + 22 + + + + + 24 + 24 + + + + Qt::TabFocus + + + Browse for the scale file location (*.scl) + + + :/images/fileOpen.png + + + + + + + Whether to use an alternate keyboard-map file (*.kbm) + + + &Key map: + + + TuningKeyMapFileComboBox + + + + + + + + 360 + 0 + + + + Keyboard map file (*.kbm) + + + false + + + + (default) + + + + + + + + + 22 + 22 + + + + + 24 + 24 + + + + Qt::TabFocus + + + Browse for the keyboard-map file location (*.kbm) + + + :/images/fileOpen.png + + + + + + + Qt::Vertical + + + + 20 + 20 + + + + + + + + + + + @@ -543,6 +844,14 @@ ControlsDeleteToolButton ControlsTreeWidget ControlsEnabledCheckBox + TuningEnabledCheckBox + TuningRefNoteComboBox + TuningRefPitchSpinBox + TuningRefNotePushButton + TuningScaleFileComboBox + TuningScaleFileToolButton + TuningKeyMapFileComboBox + TuningKeyMapFileToolButton DialogButtonBox diff -Nru synthv1-0.8.6/src/synthv1widget_control.cpp synthv1-0.9.10+git20190929/src/synthv1widget_control.cpp --- synthv1-0.8.6/src/synthv1widget_control.cpp 2017-12-20 07:56:50.326842973 +0000 +++ synthv1-0.9.10+git20190929/src/synthv1widget_control.cpp 2019-09-28 23:00:43.000000000 +0000 @@ -1,7 +1,7 @@ // synthv1widget_control.cpp // /**************************************************************************** - Copyright (C) 2012-2017, rncbc aka Rui Nuno Capela. All rights reserved. + Copyright (C) 2012-2019, rncbc aka Rui Nuno Capela. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License @@ -35,7 +35,7 @@ // synthv1widget_control -- UI wrapper form. // Kind of singleton reference. -synthv1widget_control *synthv1widget_control::g_pInstance = NULL; +synthv1widget_control *synthv1widget_control::g_pInstance = nullptr; // Constructor. @@ -207,7 +207,7 @@ void synthv1widget_control::closeEvent ( QCloseEvent *pCloseEvent ) { // Pseudo-singleton reference setup. - g_pInstance = NULL; + g_pInstance = nullptr; // Sure acceptance and probable destruction (cf. WA_DeleteOnClose). QDialog::closeEvent(pCloseEvent); @@ -276,7 +276,7 @@ // Reset settings (Reset button slot). void synthv1widget_control::reset (void) { - if (m_pControls == NULL) + if (m_pControls == nullptr) return; #ifdef CONFIG_DEBUG_0 @@ -307,7 +307,7 @@ // Accept settings (OK button slot). void synthv1widget_control::accept (void) { - if (m_pControls == NULL) + if (m_pControls == nullptr) return; #ifdef CONFIG_DEBUG_0 diff -Nru synthv1-0.8.6/src/synthv1widget_control.h synthv1-0.9.10+git20190929/src/synthv1widget_control.h --- synthv1-0.8.6/src/synthv1widget_control.h 2017-12-20 07:56:50.327842973 +0000 +++ synthv1-0.9.10+git20190929/src/synthv1widget_control.h 2019-09-28 23:00:43.000000000 +0000 @@ -1,7 +1,7 @@ // synthv1widget_control.h // /**************************************************************************** - Copyright (C) 2012-2017, rncbc aka Rui Nuno Capela. All rights reserved. + Copyright (C) 2012-2019, rncbc aka Rui Nuno Capela. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License diff -Nru synthv1-0.8.6/src/synthv1widget_controls.cpp synthv1-0.9.10+git20190929/src/synthv1widget_controls.cpp --- synthv1-0.8.6/src/synthv1widget_controls.cpp 2017-12-20 07:56:50.328842973 +0000 +++ synthv1-0.9.10+git20190929/src/synthv1widget_controls.cpp 2019-09-28 23:00:43.000000000 +0000 @@ -1,7 +1,7 @@ // synthv1widget_controls.cpp // /**************************************************************************** - Copyright (C) 2012-2015, rncbc aka Rui Nuno Capela. All rights reserved. + Copyright (C) 2012-2019, rncbc aka Rui Nuno Capela. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License @@ -24,14 +24,42 @@ #include "synthv1_controls.h" #include "synthv1_config.h" +#include #include - #include #include #include //---------------------------------------------------------------------------- +// synthv1widget_controls::ItemDelegate -- Custom (tree) list item delegate. + +class synthv1widget_controls::ItemDelegate : public QItemDelegate +{ +public: + + // ctor. + ItemDelegate(QObject *pParent = 0); + + // QItemDelegate interface... + QSize sizeHint( + const QStyleOptionViewItem& option, + const QModelIndex& index) const; + + QWidget *createEditor(QWidget *pParent, + const QStyleOptionViewItem& option, + const QModelIndex& index) const; + + void setEditorData(QWidget *pEditor, + const QModelIndex& index) const; + + void setModelData(QWidget *pEditor, + QAbstractItemModel *pModel, + const QModelIndex& index) const; +}; + + +//---------------------------------------------------------------------------- // MIDI Controller Names - Default controller names hash map. const synthv1widget_controls::Names& synthv1widget_controls::controllerNames (void) @@ -111,7 +139,7 @@ {126, QT_TR_NOOP("Mono Operation") }, {127, QT_TR_NOOP("Poly Operation") }, - { 0, NULL } + { 0, nullptr } }; static Names s_controllerNames; @@ -146,7 +174,7 @@ { 3, QT_TR_NOOP("Tuning Program") }, { 4, QT_TR_NOOP("Tuning Bank") }, - { 0, NULL } + { 0, nullptr } }; static Names s_rpnNames; @@ -197,7 +225,7 @@ { 3840, QT_TR_NOOP("Drum Chorus Send") }, { 3968, QT_TR_NOOP("Drum Variation Send") }, - { 0, NULL } + { 0, nullptr } }; static struct @@ -256,7 +284,7 @@ { 80, QT_TR_NOOP("Mute Triangle") }, { 81, QT_TR_NOOP("Open Triangle") }, - { 0, NULL } + { 0, nullptr } }; static Names s_nrpnNames; @@ -310,7 +338,7 @@ { 18, QT_TR_NOOP("General Purpose Slider 3 (14bit)") }, { 19, QT_TR_NOOP("General Purpose Slider 4 (14bit)") }, - { 0, NULL } + { 0, nullptr } }; static Names s_control14Names; @@ -420,17 +448,17 @@ //---------------------------------------------------------------------------- -// synthv1widget_controls_item_delegate -- Custom (tree) list item delegate. +// synthv1widget_controls::ItemDelegate -- Custom (tree) list item delegate. // ctor. -synthv1widget_controls_item_delegate::synthv1widget_controls_item_delegate ( - QObject *pParent ) : QItemDelegate(pParent) +synthv1widget_controls::ItemDelegate::ItemDelegate ( QObject *pParent ) + : QItemDelegate(pParent) { } // QItemDelegate interface... -QSize synthv1widget_controls_item_delegate::sizeHint ( +QSize synthv1widget_controls::ItemDelegate::sizeHint ( const QStyleOptionViewItem& option, const QModelIndex& index ) const { const int x = (index.column() == 1 ? 32 : 4); // Type is special. @@ -438,10 +466,10 @@ } -QWidget *synthv1widget_controls_item_delegate::createEditor ( QWidget *pParent, +QWidget *synthv1widget_controls::ItemDelegate::createEditor ( QWidget *pParent, const QStyleOptionViewItem& /*option*/, const QModelIndex& index ) const { - QWidget *pEditor = NULL; + QWidget *pEditor = nullptr; switch (index.column()) { case 0: // Channel. @@ -496,7 +524,7 @@ } #ifdef CONFIG_DEBUG_0 - qDebug("synthv1widget_controls_item_delegate::createEditor(%p, %d, %d) = %p", + qDebug("synthv1widget_controls::ItemDelegate::createEditor(%p, %d, %d) = %p", pParent, index.row(), index.column(), pEditor); #endif @@ -504,11 +532,11 @@ } -void synthv1widget_controls_item_delegate::setEditorData ( +void synthv1widget_controls::ItemDelegate::setEditorData ( QWidget *pEditor, const QModelIndex& index ) const { #ifdef CONFIG_DEBUG_0 - qDebug("synthv1widget_controls_item_delegate::setEditorData(%p, %d, %d)", + qDebug("synthv1widget_controls::ItemDelegate::setEditorData(%p, %d, %d)", pEditor, index.row(), index.column()); #endif @@ -567,7 +595,7 @@ } -void synthv1widget_controls_item_delegate::setModelData ( QWidget *pEditor, +void synthv1widget_controls::ItemDelegate::setModelData ( QWidget *pEditor, QAbstractItemModel *pModel, const QModelIndex& index ) const { #ifdef CONFIG_DEBUG_0 @@ -656,14 +684,14 @@ QTreeWidget::setSelectionMode(QAbstractItemView::SingleSelection); QHeaderView *pHeaderView = QTreeWidget::header(); -#if QT_VERSION < 0x050000 +#if QT_VERSION < QT_VERSION_CHECK(5, 0, 0) pHeaderView->setResizeMode(QHeaderView::ResizeToContents); #else pHeaderView->setSectionResizeMode(QHeaderView::ResizeToContents); #endif // pHeaderView->hide(); - QTreeWidget::setItemDelegate(new synthv1widget_controls_item_delegate(this)); + QTreeWidget::setItemDelegate(new ItemDelegate(this)); QObject::connect(this, SIGNAL(itemChanged(QTreeWidgetItem *, int)), diff -Nru synthv1-0.8.6/src/synthv1widget_controls.h synthv1-0.9.10+git20190929/src/synthv1widget_controls.h --- synthv1-0.8.6/src/synthv1widget_controls.h 2017-12-20 07:56:50.328842973 +0000 +++ synthv1-0.9.10+git20190929/src/synthv1widget_controls.h 2019-09-28 23:00:43.000000000 +0000 @@ -1,7 +1,7 @@ // synthv1widget_controls.h // /**************************************************************************** - Copyright (C) 2012-2015, rncbc aka Rui Nuno Capela. All rights reserved. + Copyright (C) 2012-2019, rncbc aka Rui Nuno Capela. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License @@ -22,7 +22,6 @@ #ifndef __synthv1widget_controls_h #define __synthv1widget_controls_h -#include #include #include @@ -33,37 +32,6 @@ //---------------------------------------------------------------------------- -// synthv1widget_controls_item_delegate -- Custom (tree) list item delegate. - -class synthv1widget_controls_item_delegate : public QItemDelegate -{ - Q_OBJECT - -public: - - // ctor. - synthv1widget_controls_item_delegate(QObject *pParent = 0); - - // QItemDelegate interface... - QSize sizeHint( - const QStyleOptionViewItem& option, - const QModelIndex& index) const; - - QWidget *createEditor(QWidget *pParent, - const QStyleOptionViewItem& option, - const QModelIndex& index) const; - - void setEditorData(QWidget *pEditor, - const QModelIndex& index) const; - - void setModelData(QWidget *pEditor, - QAbstractItemModel *pModel, - const QModelIndex& index) const; -}; - - - -//---------------------------------------------------------------------------- // synthv1widget_controls -- Custom (tree) widget. class synthv1widget_controls : public QTreeWidget @@ -101,6 +69,9 @@ protected: + // item delegate decl.. + class ItemDelegate; + // factory methods. QTreeWidgetItem *newControlItem(); }; diff -Nru synthv1-0.8.6/src/synthv1widget_control.ui synthv1-0.9.10+git20190929/src/synthv1widget_control.ui --- synthv1-0.8.6/src/synthv1widget_control.ui 2017-12-20 07:56:50.327842973 +0000 +++ synthv1-0.9.10+git20190929/src/synthv1widget_control.ui 2019-09-28 23:00:43.000000000 +0000 @@ -1,23 +1,23 @@ rncbc aka Rui Nuno Capela - qtractor - An Audio/MIDI multi-track sequencer. + synthv1 - An old-school polyphonic synthesizer - Copyright (C) 2012-2015, rncbc aka Rui Nuno Capela. All rights reserved. + Copyright (C) 2012-2019, rncbc aka Rui Nuno Capela. All rights reserved. - 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 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. + 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. + 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. synthv1widget_control diff -Nru synthv1-0.8.6/src/synthv1widget.cpp synthv1-0.9.10+git20190929/src/synthv1widget.cpp --- synthv1-0.8.6/src/synthv1widget.cpp 2017-12-20 07:56:50.312842973 +0000 +++ synthv1-0.9.10+git20190929/src/synthv1widget.cpp 2019-09-28 23:00:43.000000000 +0000 @@ -1,7 +1,7 @@ // synthv1widget.cpp // /**************************************************************************** - Copyright (C) 2012-2017, rncbc aka Rui Nuno Capela. All rights reserved. + Copyright (C) 2012-2019, rncbc aka Rui Nuno Capela. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License @@ -28,6 +28,8 @@ #include "synthv1widget_config.h" #include "synthv1widget_control.h" +#include "synthv1widget_keybd.h" + #include "synthv1_controls.h" #include "synthv1_programs.h" @@ -40,6 +42,10 @@ #include #include +#include + +#include + //------------------------------------------------------------------------- // synthv1widget - impl. @@ -51,7 +57,7 @@ { Q_INIT_RESOURCE(synthv1); -#if QT_VERSION >= 0x050000 +#if QT_VERSION >= QT_VERSION_CHECK(5, 0, 0) // HACK: Dark themes grayed/disabled color group fix... QPalette pal; if (pal.base().color().value() < 0x7f) { @@ -73,7 +79,7 @@ m_ui.setupUi(this); // Init sched notifier. - m_sched_notifier = NULL; + m_sched_notifier = nullptr; // Init swapable params A/B to default. for (uint32_t i = 0; i < synthv1::NUM_PARAMS; ++i) @@ -338,6 +344,7 @@ m_ui.Dco1Width2Knob, SLOT(setValue(float))); // DCF1 + setParamKnob(synthv1::DCF1_ENABLED, m_ui.Dcf1GroupBox->param()); setParamKnob(synthv1::DCF1_CUTOFF, m_ui.Dcf1CutoffKnob); setParamKnob(synthv1::DCF1_RESO, m_ui.Dcf1ResoKnob); setParamKnob(synthv1::DCF1_TYPE, m_ui.Dcf1TypeKnob); @@ -398,6 +405,7 @@ m_ui.Dcf1Env, SLOT(setRelease(float))); // LFO1 + setParamKnob(synthv1::LFO1_ENABLED, m_ui.Lfo1GroupBox->param()); setParamKnob(synthv1::LFO1_SHAPE, m_ui.Lfo1ShapeKnob); setParamKnob(synthv1::LFO1_WIDTH, m_ui.Lfo1WidthKnob); setParamKnob(synthv1::LFO1_BPM, m_ui.Lfo1BpmKnob); @@ -552,6 +560,7 @@ m_ui.Dco2Width2Knob, SLOT(setValue(float))); // DCF2 + setParamKnob(synthv1::DCF2_ENABLED, m_ui.Dcf2GroupBox->param()); setParamKnob(synthv1::DCF2_CUTOFF, m_ui.Dcf2CutoffKnob); setParamKnob(synthv1::DCF2_RESO, m_ui.Dcf2ResoKnob); setParamKnob(synthv1::DCF2_TYPE, m_ui.Dcf2TypeKnob); @@ -612,6 +621,7 @@ m_ui.Dcf2Env, SLOT(setRelease(float))); // LFO2 + setParamKnob(synthv1::LFO2_ENABLED, m_ui.Lfo2GroupBox->param()); setParamKnob(synthv1::LFO2_SHAPE, m_ui.Lfo2ShapeKnob); setParamKnob(synthv1::LFO2_WIDTH, m_ui.Lfo2WidthKnob); setParamKnob(synthv1::LFO2_BPM, m_ui.Lfo2BpmKnob); @@ -755,6 +765,8 @@ setParamKnob(synthv1::DYN1_COMPRESS, m_ui.Dyn1CompressKnob); setParamKnob(synthv1::DYN1_LIMITER, m_ui.Dyn1LimiterKnob); + // Make status-bar keyboard range active. + m_ui.StatusBar->keybd()->setNoteRange(true); // Preset management QObject::connect(m_ui.Preset, @@ -771,6 +783,11 @@ SLOT(resetParams())); + // Randomize params... + QObject::connect(m_ui.RandomParamsButton, + SIGNAL(clicked()), + SLOT(randomParams())); + // Swap params A/B QObject::connect(m_ui.SwapParamsAButton, SIGNAL(toggled(bool)), @@ -783,6 +800,14 @@ QObject::connect(m_ui.TabBar, SIGNAL(currentChanged(int)), m_ui.StackedWidget, SLOT(setCurrentIndex(int))); + // Direct status-bar keyboard input + QObject::connect(m_ui.StatusBar->keybd(), + SIGNAL(noteOnClicked(int, int)), + SLOT(directNoteOn(int, int))); + QObject::connect(m_ui.StatusBar->keybd(), + SIGNAL(noteRangeChanged()), + SLOT(noteRangeChanged())); + // Menu actions QObject::connect(m_ui.helpConfigureAction, SIGNAL(triggered(bool)), @@ -829,7 +854,7 @@ return; synthv1_ui *pSynthUi = ui_instance(); - if (pSynthUi == NULL) + if (pSynthUi == nullptr) return; m_sched_notifier = new synthv1widget_sched(pSynthUi->instance(), this); @@ -846,7 +871,7 @@ { if (m_sched_notifier) { delete m_sched_notifier; - m_sched_notifier = NULL; + m_sched_notifier = nullptr; } synthv1_ui *pSynthUi = ui_instance(); @@ -893,19 +918,18 @@ synthv1widget_param *synthv1widget::paramKnob ( synthv1::ParamIndex index ) const { - return m_paramKnobs.value(index, NULL); + return m_paramKnobs.value(index, nullptr); } // Param port accessors. -void synthv1widget::setParamValue ( - synthv1::ParamIndex index, float fValue, bool bDefault ) +void synthv1widget::setParamValue ( synthv1::ParamIndex index, float fValue ) { ++m_iUpdate; synthv1widget_param *pParam = paramKnob(index); if (pParam) - pParam->setValue(fValue, bDefault); + pParam->setValue(fValue); updateParamEx(index, fValue); @@ -955,10 +979,12 @@ switch (index) { case synthv1::DCO1_SHAPE1: + m_ui.Dco1Wave1->setWaveShape(fValue); m_ui.Dco1Bandl1Knob->setEnabled( synthv1_wave::Shape(int(fValue)) != synthv1_wave::Noise); break; case synthv1::DCO1_SHAPE2: + m_ui.Dco1Wave2->setWaveShape(fValue); m_ui.Dco1Bandl2Knob->setEnabled( synthv1_wave::Shape(int(fValue)) != synthv1_wave::Noise); break; @@ -975,10 +1001,12 @@ } break; case synthv1::DCO2_SHAPE1: + m_ui.Dco2Wave1->setWaveShape(fValue); m_ui.Dco2Bandl1Knob->setEnabled( synthv1_wave::Shape(int(fValue)) != synthv1_wave::Noise); break; case synthv1::DCO2_SHAPE2: + m_ui.Dco2Wave2->setWaveShape(fValue); m_ui.Dco2Bandl2Knob->setEnabled( synthv1_wave::Shape(int(fValue)) != synthv1_wave::Noise); break; @@ -994,12 +1022,59 @@ updateParam(synthv1::DCO1_SYNC1, 0.0f); } break; + case synthv1::DCF1_ENABLED: + if (m_ui.Lfo1GroupBox->isChecked()) { + const bool bDcf1Enabled = (fValue > 0.5f); + m_ui.Lfo1CutoffKnob->setEnabled(bDcf1Enabled); + m_ui.Lfo1ResoKnob->setEnabled(bDcf1Enabled); + } + break; + case synthv1::LFO1_ENABLED: + if (fValue > 0.5f) { + const bool bDcf1Enabled = m_ui.Dcf1GroupBox->isChecked(); + m_ui.Lfo1CutoffKnob->setEnabled(bDcf1Enabled); + m_ui.Lfo1ResoKnob->setEnabled(bDcf1Enabled); + } + break; + case synthv1::DCF2_ENABLED: + if (m_ui.Lfo2GroupBox->isChecked()) { + const bool bDcf2Enabled = (fValue > 0.5f); + m_ui.Lfo2CutoffKnob->setEnabled(bDcf2Enabled); + m_ui.Lfo2ResoKnob->setEnabled(bDcf2Enabled); + } + break; + case synthv1::LFO2_ENABLED: + if (fValue > 0.5f) { + const bool bDcf2Enabled = m_ui.Dcf2GroupBox->isChecked(); + m_ui.Lfo2CutoffKnob->setEnabled(bDcf2Enabled); + m_ui.Lfo2ResoKnob->setEnabled(bDcf2Enabled); + } + break; case synthv1::DCF1_SLOPE: - m_ui.Dcf1TypeKnob->setEnabled(int(fValue) != 3); // !Formant + if (m_ui.Dcf1GroupBox->isChecked()) + m_ui.Dcf1TypeKnob->setEnabled(int(fValue) != 3); // !Formant break; case synthv1::DCF2_SLOPE: - m_ui.Dcf2TypeKnob->setEnabled(int(fValue) != 3); // !Formant - // Fall thru... + if (m_ui.Dcf2GroupBox->isChecked()) + m_ui.Dcf2TypeKnob->setEnabled(int(fValue) != 3); // !Formant + break; + case synthv1::LFO1_SHAPE: + m_ui.Lfo1Wave->setWaveShape(fValue); + break; + case synthv1::LFO2_SHAPE: + m_ui.Lfo2Wave->setWaveShape(fValue); + break; + case synthv1::KEY1_LOW: + m_ui.StatusBar->keybd()->setNoteLow(int(fValue)); + break; + case synthv1::KEY1_HIGH: + m_ui.StatusBar->keybd()->setNoteHigh(int(fValue)); + break; + case synthv1::DEF1_VELOCITY: { + const int vel = int(79.375f * fValue + 47.625f) & 0x7f; + m_ui.StatusBar->keybd()->setVelocity(vel); + break; + } default: break; } @@ -1015,7 +1090,7 @@ synthv1widget_param *pParam = paramKnob(index); if (pParam) { - pParam->setValue(fValue, false); + pParam->setValue(fValue); updateParam(index, fValue); updateParamEx(index, fValue); m_ui.StatusBar->showMessage(QString("%1: %2") @@ -1032,7 +1107,7 @@ void synthv1widget::resetParams (void) { synthv1_ui *pSynthUi = ui_instance(); - if (pSynthUi == NULL) + if (pSynthUi == nullptr) return; pSynthUi->reset(); @@ -1055,6 +1130,72 @@ } +// Randomize params (partial). +void synthv1widget::randomParams (void) +{ + synthv1_ui *pSynthUi = ui_instance(); + if (pSynthUi == nullptr) + return; + + float p = 1.0f; + + synthv1_config *pConfig = synthv1_config::getInstance(); + if (pConfig) + p = 0.01f * pConfig->fRandomizePercent; + + if (QMessageBox::warning(this, + tr("Warning"), + tr("About to randomize current parameter values:\n\n" + "-/+ %1%.\n\n" + "Are you sure?").arg(100.0f * p), + QMessageBox::Ok | QMessageBox::Cancel) == QMessageBox::Cancel) + return; + + std::default_random_engine re(::time(nullptr)); + + for (uint32_t i = 0; i < synthv1::NUM_PARAMS; ++i) { + const synthv1::ParamIndex index = synthv1::ParamIndex(i); + // Filter out some non-randomizable parameters!... + if (index == synthv1::DCO1_OCTAVE || + index == synthv1::DCO1_TUNING || + index == synthv1::DCO1_ENVTIME || + index == synthv1::DCF1_ENABLED || + index == synthv1::LFO1_ENABLED) + continue; + if (index >= synthv1::OUT1_WIDTH && index < synthv1::DCO2_SHAPE1) + continue; + if (index == synthv1::DCO2_OCTAVE || + index == synthv1::DCO2_TUNING || + index == synthv1::DCO2_ENVTIME || + index == synthv1::DCF2_ENABLED || + index == synthv1::LFO2_ENABLED) + continue; + if (index >= synthv1::OUT2_WIDTH) + break; + synthv1widget_param *pParam = paramKnob(index); + if (pParam) { + std::normal_distribution nd; + const float q = p * (pParam->maximum() - pParam->minimum()); + float fValue = pParam->value(); + if (synthv1_param::paramFloat(index)) + fValue += 0.5f * q * nd(re); + else + fValue = std::round(fValue + q * nd(re)); + if (fValue < pParam->minimum()) + fValue = pParam->minimum(); + else + if (fValue > pParam->maximum()) + fValue = pParam->maximum(); + setParamValue(index, fValue); + updateParam(index, fValue); + } + } + + m_ui.StatusBar->showMessage(tr("Randomize"), 5000); + updateDirtyPreset(true); +} + + // Swap params A/B. void synthv1widget::swapParams ( bool bOn ) { @@ -1064,7 +1205,6 @@ #ifdef CONFIG_DEBUG qDebug("synthv1widget::swapParams(%d)", int(bOn)); #endif -// resetParamKnobs(); for (uint32_t i = 0; i < synthv1::NUM_PARAMS; ++i) { const synthv1::ParamIndex index = synthv1::ParamIndex(i); @@ -1105,7 +1245,7 @@ const float fValue = (pSynthUi ? pSynthUi->paramValue(index) : synthv1_param::paramDefaultValue(index)); - setParamValue(index, fValue, true); + setParamValue(index, fValue); updateParam(index, fValue); // updateParamEx(index, fValue); m_params_ab[i] = fValue; @@ -1121,7 +1261,7 @@ for (uint32_t i = 0; i < synthv1::NUM_PARAMS; ++i) { const synthv1::ParamIndex index = synthv1::ParamIndex(i); const float fValue = synthv1_param::paramDefaultValue(index); - setParamValue(index, fValue, true); + setParamValue(index, fValue); updateParam(index, fValue); // updateParamEx(index, fValue); m_params_ab[i] = fValue; @@ -1215,6 +1355,7 @@ // Preset status updater. void synthv1widget::updateLoadPreset ( const QString& sPreset ) { + resetParamKnobs(); updateParamValues(); m_ui.Preset->setPreset(sPreset); @@ -1227,15 +1368,21 @@ void synthv1widget::updateSchedNotify ( int stype, int sid ) { synthv1_ui *pSynthUi = ui_instance(); - if (pSynthUi == NULL) + if (pSynthUi == nullptr) return; #ifdef CONFIG_DEBUG_0 - qDebug("samplv1widget::updateSchedNotify(%d, 0x%04x)", stype, sid); + qDebug("synthv1widget::updateSchedNotify(%d, 0x%04x)", stype, sid); #endif switch (synthv1_sched::Type(stype)) { case synthv1_sched::MidiIn: + if (sid >= 0) { + const int key = (sid & 0x7f); + const int vel = (sid >> 7) & 0x7f; + m_ui.StatusBar->midiInNote(key, vel); + } + else if (pSynthUi->midiInCount() > 0) { m_ui.StatusBar->midiInLed(true); QTimer::singleShot(200, this, SLOT(midiInLedTimeout())); @@ -1262,12 +1409,52 @@ break; } case synthv1_sched::Wave: + if (sid > 0) { + updateParamValues(); + resetParamKnobs(); + updateDirtyPreset(false); + } + // fall thru... default: break; } } +// Direct note-on/off slot. +void synthv1widget::directNoteOn ( int iNote, int iVelocity ) +{ +#ifdef CONFIG_DEBUG + qDebug("synthv1widget::directNoteOn(%d, %d)", iNote, iVelocity); +#endif + + synthv1_ui *pSynthUi = ui_instance(); + if (pSynthUi) + pSynthUi->directNoteOn(iNote, iVelocity); // note-on! +} + + +// Keyboard note range change. +void synthv1widget::noteRangeChanged (void) +{ + const int iNoteLow = m_ui.StatusBar->keybd()->noteLow(); + const int iNoteHigh = m_ui.StatusBar->keybd()->noteHigh(); + +#ifdef CONFIG_DEBUG + qDebug("padthv1widget::noteRangeChanged(%d, %d)", iNoteLow, iNoteHigh); +#endif + + updateParam(synthv1::KEY1_LOW, float(iNoteLow)); + updateParam(synthv1::KEY1_HIGH, float(iNoteHigh)); + + m_ui.StatusBar->showMessage(QString("KEY Low: %1 (%2) High: %3 (%4)") + .arg(synthv1_ui::noteName(iNoteLow)).arg(iNoteLow) + .arg(synthv1_ui::noteName(iNoteHigh)).arg(iNoteHigh), 5000); + + updateDirtyPreset(true); +} + + // MIDI In LED timeout. void synthv1widget::midiInLedTimeout (void) { @@ -1279,7 +1466,7 @@ void synthv1widget::helpConfigure (void) { synthv1_ui *pSynthUi = ui_instance(); - if (pSynthUi == NULL) + if (pSynthUi == nullptr) return; synthv1widget_config(pSynthUi, this).exec(); @@ -1330,7 +1517,7 @@ sText += ""; sText += "

    \n"; - QMessageBox::about(this, tr("About") + " " SYNTHV1_TITLE, sText); + QMessageBox::about(this, tr("About"), sText); } @@ -1358,15 +1545,15 @@ { synthv1widget_param *pParam = qobject_cast (sender()); - if (pParam == NULL) + if (pParam == nullptr) return; synthv1_ui *pSynthUi = ui_instance(); - if (pSynthUi == NULL) + if (pSynthUi == nullptr) return; synthv1_controls *pControls = pSynthUi->controls(); - if (pControls == NULL) + if (pControls == nullptr) return; if (!pControls->enabled()) diff -Nru synthv1-0.8.6/src/synthv1widget.h synthv1-0.9.10+git20190929/src/synthv1widget.h --- synthv1-0.8.6/src/synthv1widget.h 2017-12-20 07:56:50.312842973 +0000 +++ synthv1-0.9.10+git20190929/src/synthv1widget.h 2019-09-28 23:00:43.000000000 +0000 @@ -1,7 +1,7 @@ // synthv1widget.h // /**************************************************************************** - Copyright (C) 2012-2017, rncbc aka Rui Nuno Capela. All rights reserved. + Copyright (C) 2012-2019, rncbc aka Rui Nuno Capela. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License @@ -58,8 +58,7 @@ void closeSchedNotifier(); // Param port accessors. - void setParamValue( - synthv1::ParamIndex index, float fValue, bool bDefault = false); + void setParamValue(synthv1::ParamIndex index, float fValue); float paramValue(synthv1::ParamIndex index) const; // Param kbob (widget) mapper. @@ -80,6 +79,9 @@ void loadPreset(const QString& sFilename); void savePreset(const QString& sFilename); + // Direct note-on/off slot. + void directNoteOn(int iNote, int iVelocity); + protected slots: // Preset renewal. @@ -91,6 +93,9 @@ // Reset param knobs to default value. void resetParams(); + // Randomize params (partial). + void randomParams(); + // Swap params A/B. void swapParams(bool bOn); @@ -100,6 +105,9 @@ // MIDI In LED timeout. void midiInLedTimeout(); + // Keyboard note range change. + void noteRangeChanged(); + // Param knob context menu. void paramContextMenu(const QPoint& pos); @@ -171,7 +179,7 @@ public: // ctor. - synthv1widget_sched(synthv1 *pSynth, QObject *pParent = NULL) + synthv1widget_sched(synthv1 *pSynth, QObject *pParent = nullptr) : QObject(pParent), m_notifier(pSynth, this) {} signals: @@ -182,12 +190,12 @@ protected: // Notififier visitor. - class Notifier : public synthv1_sched_notifier + class Notifier : public synthv1_sched::Notifier { public: Notifier(synthv1 *pSynth, synthv1widget_sched *pSched) - : synthv1_sched_notifier(pSynth), m_pSched(pSched) {} + : synthv1_sched::Notifier(pSynth), m_pSched(pSched) {} void notify(synthv1_sched::Type stype, int sid) const { m_pSched->emit_notify(stype, sid); } diff -Nru synthv1-0.8.6/src/synthv1widget_jack.cpp synthv1-0.9.10+git20190929/src/synthv1widget_jack.cpp --- synthv1-0.8.6/src/synthv1widget_jack.cpp 2017-12-20 07:56:50.328842973 +0000 +++ synthv1-0.9.10+git20190929/src/synthv1widget_jack.cpp 2019-09-28 23:00:43.000000000 +0000 @@ -1,7 +1,7 @@ // synthv1widget_jack.cpp // /**************************************************************************** - Copyright (C) 2012-2017, rncbc aka Rui Nuno Capela. All rights reserved. + Copyright (C) 2012-2019, rncbc aka Rui Nuno Capela. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License @@ -43,7 +43,7 @@ #endif #endif -#if QT_VERSION < 0x050000 +#if QT_VERSION < QT_VERSION_CHECK(5, 0, 0) #define CONFIG_PLUGINSDIR CONFIG_LIBDIR "/qt4/plugins" #else #define CONFIG_PLUGINSDIR CONFIG_LIBDIR "/qt5/plugins" @@ -58,7 +58,7 @@ synthv1widget_jack::synthv1widget_jack ( synthv1_jack *pSynth ) : synthv1widget(), m_pSynth(pSynth) #ifdef CONFIG_NSM - , m_pNsmClient(NULL) + , m_pNsmClient(nullptr) #endif { // Special style paths... @@ -73,12 +73,15 @@ // Initialize (user) interface stuff... m_pSynthUi = new synthv1_ui(m_pSynth, false); + // Initialise preset stuff... + clearPreset(); + + // Initial update, always... + resetParamValues(); + resetParamKnobs(); + // May initialize the scheduler/work notifier. openSchedNotifier(); - - // Initialize preset stuff... - // initPreset(); - updateParamValues(); } @@ -101,10 +104,6 @@ void synthv1widget_jack::setNsmClient ( synthv1_nsm *pNsmClient ) { m_pNsmClient = pNsmClient; - - synthv1_config *pConfig = synthv1_config::getInstance(); - if (pConfig) - pConfig->bDontUseNativeDialogs = true; } synthv1_nsm *synthv1widget_jack::nsmClient (void) const @@ -130,7 +129,7 @@ #ifdef CONFIG_NSM if (m_pNsmClient && m_pNsmClient->is_active()) - m_pNsmClient->dirty(bDirtyPreset); + m_pNsmClient->dirty(true); // as far as NSM goes, we're always filthy! #endif } @@ -158,7 +157,7 @@ // Optional GUI handlers. void synthv1widget_jack::showEvent ( QShowEvent *pShowEvent ) { - QWidget::showEvent(pShowEvent); + synthv1widget::showEvent(pShowEvent); if (m_pNsmClient) m_pNsmClient->visible(true); @@ -169,7 +168,7 @@ if (m_pNsmClient) m_pNsmClient->visible(false); - QWidget::hideEvent(pHideEvent); + synthv1widget::hideEvent(pHideEvent); } #endif // CONFIG_NSM diff -Nru synthv1-0.8.6/src/synthv1widget_jack.h synthv1-0.9.10+git20190929/src/synthv1widget_jack.h --- synthv1-0.8.6/src/synthv1widget_jack.h 2017-12-20 07:56:50.328842973 +0000 +++ synthv1-0.9.10+git20190929/src/synthv1widget_jack.h 2019-09-28 23:00:43.000000000 +0000 @@ -1,7 +1,7 @@ // synthv1widget_jack.h // /**************************************************************************** - Copyright (C) 2012-2017, rncbc aka Rui Nuno Capela. All rights reserved. + Copyright (C) 2012-2019, rncbc aka Rui Nuno Capela. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License diff -Nru synthv1-0.8.6/src/synthv1widget_keybd.cpp synthv1-0.9.10+git20190929/src/synthv1widget_keybd.cpp --- synthv1-0.8.6/src/synthv1widget_keybd.cpp 1970-01-01 00:00:00.000000000 +0000 +++ synthv1-0.9.10+git20190929/src/synthv1widget_keybd.cpp 2019-09-28 23:00:43.000000000 +0000 @@ -0,0 +1,733 @@ +// synthv1widget_keybd.cpp +// +/**************************************************************************** + Copyright (C) 2012-2019, rncbc aka Rui Nuno Capela. All rights reserved. + + 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. + +*****************************************************************************/ + +#include "synthv1widget_keybd.h" + +#include "synthv1_ui.h" + +#include +#include + +#include + +#include +#include +#include +#include + +#include + +#include + + +//------------------------------------------------------------------------- +// synthv1widget_keybd - A horizontal piano keyboard widget. + + +// Constructor. +synthv1widget_keybd::synthv1widget_keybd ( QWidget *pParent ) + : QWidget(pParent) +{ + const QFont& font = QWidget::font(); + QWidget::setFont(QFont(font.family(), font.pointSize() - 3)); + QWidget::setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred); + QWidget::setMinimumSize(QSize(440, 22)); + QWidget::setMouseTracking(true); + + for (int n = 0; n < NUM_NOTES; ++n) + m_notes[n].on = false; + + m_dragCursor = DragNone; + + m_bNoteRange = false; + + m_iNoteLow = MIN_NOTE; + m_iNoteLowX = 0; + + m_iNoteHigh = MAX_NOTE; + m_iNoteHighX = 0; + + m_iNoteOn = -1; + m_iTimeout = 0; + m_iVelocity = (MIN_VELOCITY + MAX_VELOCITY) / 2; + + m_iNoteKey = -1; + + resetDragState(); + + // Trap for help/tool-tips and leave events. + QWidget::installEventFilter(this); +} + + +// Note range predicate. +void synthv1widget_keybd::setNoteRange ( bool bNoteRange ) +{ + m_bNoteRange = bNoteRange; + + QWidget::update(); +} + + +bool synthv1widget_keybd::isNoteRange (void) const +{ + return m_bNoteRange; +} + + +// Default note-on velocity. +void synthv1widget_keybd::setVelocity ( int iVelocity ) +{ + if (iVelocity < MIN_VELOCITY) + iVelocity = MIN_VELOCITY; + if (iVelocity > MAX_VELOCITY) + iVelocity = MAX_VELOCITY; + + m_iVelocity = iVelocity; +} + + +int synthv1widget_keybd::velocity (void) const +{ + return m_iVelocity; +} + + +// Keyboard note range sanitizers. +int synthv1widget_keybd::safeNoteLow ( int iNoteLow ) const +{ + if (iNoteLow < MIN_NOTE) + iNoteLow = MIN_NOTE; + if (iNoteLow > m_iNoteHigh) + iNoteLow = m_iNoteHigh; + + return iNoteLow; +} + + +int synthv1widget_keybd::safeNoteHigh ( int iNoteHigh ) const +{ + if (iNoteHigh > MAX_NOTE) + iNoteHigh = MAX_NOTE; + if (iNoteHigh < m_iNoteLow) + iNoteHigh = m_iNoteLow; + + return iNoteHigh; +} + + +// Keyboard note range setters/getters. +void synthv1widget_keybd::setNoteLow ( int iNoteLow ) +{ + m_iNoteLow = safeNoteLow(iNoteLow); + m_iNoteLowX = noteRect(m_iNoteLow).left(); + + QWidget::update(); +} + + +int synthv1widget_keybd::noteLow (void) const +{ + return m_iNoteLow; +} + + +void synthv1widget_keybd::setNoteHigh ( int iNoteHigh ) +{ + m_iNoteHigh = safeNoteHigh(iNoteHigh); + m_iNoteHighX = noteRect(m_iNoteHigh).right(); + + QWidget::update(); +} + + +int synthv1widget_keybd::noteHigh (void) const +{ + return m_iNoteHigh; +} + + +void synthv1widget_keybd::setNoteKey ( int iNoteKey ) +{ + if (iNoteKey >= MIN_NOTE && MAX_NOTE >= iNoteKey) { + m_notes[iNoteKey].rect = noteRect(iNoteKey, true); + m_iNoteKey = iNoteKey; + } else { + m_iNoteKey = -1; + } + + QWidget::update(); +} + + +int synthv1widget_keybd::noteKey (void) const +{ + return m_iNoteKey; +} + + +// Piano key rectangle finder. +QRect synthv1widget_keybd::noteRect ( int iNote, bool bOn ) const +{ + const int w = QWidget::width(); + const int h = QWidget::height(); + + const float wn = float(w - 4) / float(NUM_NOTES); + const float wk = 12.0f * wn / 7.0f; + + int k = (iNote % 12); + if (k >= 5) ++k; + + const int nk = (iNote / 12) * 7 + (k >> 1); + int x2 = int(wk * float(nk)); + int w2 = int(wn + 0.5f); + int h2 = h; + if (k & 1) { + x2 += int(wk - float(w2 >> 1)); + h2 = (h << 1) / 3; + ++w2; + } else if (bOn) { + x2 += (w2 >> 1); + --w2; + } else { + w2 <<= 1; + } + + return QRect(x2, 0, w2, h2); +} + + +// Piano keyboard note/key actions. +void synthv1widget_keybd::noteOn ( int iNote ) +{ + if (iNote < m_iNoteLow || iNote > m_iNoteHigh) + return; + + // If it ain't changed we won't change it ;) + Note& note = m_notes[iNote]; + if (note.on) + return; + + // Now for the sounding new one... + note.on = true; + note.rect = noteRect(iNote, true); + + QWidget::update(note.rect); +} + + +void synthv1widget_keybd::noteOff ( int iNote ) +{ + if (iNote < m_iNoteLow || iNote > m_iNoteHigh) + return; + + // Turn off old note... + Note& note = m_notes[iNote]; + if (!note.on) + return; + + // Now for the sounding new one... + note.on = false; + + QWidget::update(note.rect); +} + + +void synthv1widget_keybd::allNotesOff (void) +{ + for (int n = 0; n < NUM_NOTES; ++n) + noteOff(n); +} + + +// Kill dangling notes, if any... +void synthv1widget_keybd::allNotesTimeout (void) +{ + if (m_iTimeout < 1) + return; + + if (m_iNoteOn >= 0) { + ++m_iTimeout; + QTimer::singleShot(1200, this, SLOT(allNotesTimeout())); // +3sec. + return; + } + + for (int n = 0; n < NUM_NOTES; ++n) { + Note& note = m_notes[n]; + if (note.on) { + note.on = false; + QWidget::update(note.rect); + emit noteOnClicked(n, 0); + } + } + + m_iTimeout = 0; +} + + +// Piano keyboard note-on handler. +void synthv1widget_keybd::dragNoteOn ( const QPoint& pos ) +{ + // Compute new key cordinates... + const int iNote = (NUM_NOTES * pos.x() / QWidget::width()); + + if (iNote < m_iNoteLow || iNote > m_iNoteHigh || iNote == m_iNoteOn) + return; + + // Were we pending on some sounding note? + dragNoteOff(); + + // Now for the sounding new one... + m_iNoteOn = iNote; + +// noteOn(iNote); + + emit noteOnClicked(iNote, m_iVelocity); + + if (++m_iTimeout == 1) + QTimer::singleShot(1200, this, SLOT(allNotesTimeout())); // +3sec. +} + + +// Piano keyboard note-off handler. +void synthv1widget_keybd::dragNoteOff (void) +{ + if (m_iNoteOn < 0) + return; + + // Turn off old note... + const int iNote = m_iNoteOn; + + m_iNoteOn = -1; + +// noteOff(iNote); + + emit noteOnClicked(iNote, 0); +} + + +// (Re)create the complete view pixmap. +void synthv1widget_keybd::updatePixmap (void) +{ + const int w = QWidget::width(); + const int h = QWidget::height(); + if (w < 4 || h < 4) + return; + + const QPalette& pal = QWidget::palette(); + const bool bDark = (pal.base().color().value() < 128); + const QColor& rgbLine = pal.mid().color(); + const QColor& rgbLight = QColor(Qt::white).darker(bDark ? 240 : 160); + const QColor& rgbDark = QColor(Qt::black).lighter(bDark ? 120 : 180); + + m_pixmap = QPixmap(w, h); + m_pixmap.fill(pal.window().color()); + + QPainter painter(&m_pixmap); +// painter.initFrom(this); + + const float wn = float(w - 4) / float(NUM_NOTES); + const float wk = 12.0f * wn / 7.0f; + const int w2 = int(wn + 0.5f); + const int h3 = (h << 1) / 3; + + QLinearGradient gradLight(0, 0, 0, h); + gradLight.setColorAt(0.0, rgbLight); + gradLight.setColorAt(0.1, rgbLight.lighter()); + painter.fillRect(0, 0, w, h, gradLight); + painter.setPen(rgbLine); + + int n, k; + + for (n = 0; n < NUM_NOTES; ++n) { + k = (n % 12); + if (k >= 5) ++k; + if ((k & 1) == 0) { + const int nk = (n / 12) * 7 + (k >> 1); + const int x1 = int(wk * float(nk)); + painter.drawLine(x1, 0, x1, h); + if (k == 0 && w2 > 10) + painter.drawText(x1 + 4, h - 4, noteName(n)); + } + } + + QLinearGradient gradDark(0, 0, 0, h3); + gradDark.setColorAt(0.0, rgbLight); + gradDark.setColorAt(0.4, rgbDark); + gradDark.setColorAt(0.92, rgbDark); + gradDark.setColorAt(0.96, rgbLight); + gradDark.setColorAt(1.0, rgbDark); + painter.setBrush(gradDark); + + for (n = 0; n < NUM_NOTES; ++n) { + k = (n % 12); + if (k >= 5) ++k; + if (k & 1) { + const int nk = (n / 12) * 7 + (k >> 1); + const int x1 = int(wk * float(nk + 1) - float(w2 >> 1)); + painter.drawRect(x1, 0, w2, h3); + } + } + + m_iNoteLowX = noteRect(m_iNoteLow).left(); + m_iNoteHighX = noteRect(m_iNoteHigh).right(); + + if (m_iNoteKey >= MIN_NOTE && MAX_NOTE >= m_iNoteKey) + m_notes[m_iNoteKey].rect = noteRect(m_iNoteKey, true); +} + + +// Paint event handler. +void synthv1widget_keybd::paintEvent ( QPaintEvent *pPaintEvent ) +{ + QPainter painter(this); + + // Render the pixmap region... + const QRect& rect = pPaintEvent->rect(); + painter.drawPixmap(rect, m_pixmap, rect); + + const QPalette& pal = QWidget::palette(); + QColor rgbOver; + + // Are we enabled still? + if (!QWidget::isEnabled()) { + rgbOver = pal.mid().color(); + rgbOver.setAlpha(120); + painter.fillRect(rect, rgbOver); + return; + } + + // Are we sticking in some note? + rgbOver = pal.highlight().color().darker(120); + rgbOver.setAlpha(180); + for (int n = 0; n < NUM_NOTES; ++n) { + Note& note = m_notes[n]; + if (note.on) + painter.fillRect(note.rect, rgbOver); + } + + // Keyboard range lines... + if (m_bNoteRange) { + const int w = QWidget::width(); + const int h = QWidget::height(); + const int x1 = m_iNoteLowX; + const int x2 = m_iNoteHighX; + rgbOver = pal.dark().color().darker(); + rgbOver.setAlpha(120); + if (x1 > 0) + painter.fillRect(0, 0, x1, h, rgbOver); + if (x2 < w) + painter.fillRect(x2, 0, w, h, rgbOver); + } + + // Current highlighted note. + if (m_iNoteKey >= MIN_NOTE && MAX_NOTE >= m_iNoteKey) { + rgbOver = pal.highlight().color().lighter(); + rgbOver.setAlpha(120); + painter.fillRect(m_notes[m_iNoteKey].rect, rgbOver); + } +} + + +// Resize event handler. +void synthv1widget_keybd::resizeEvent ( QResizeEvent *pResizeEvent ) +{ + updatePixmap(); + + return QWidget::resizeEvent(pResizeEvent); +} + + +// Alternate mouse behavior event handlers. +void synthv1widget_keybd::mousePressEvent ( QMouseEvent *pMouseEvent ) +{ + const QPoint& pos = pMouseEvent->pos(); + + switch (pMouseEvent->button()) { + case Qt::LeftButton: + if (m_dragCursor == DragNone) { + // Are we keying in some keyboard? + if ((pMouseEvent->modifiers() + & (Qt::ShiftModifier | Qt::ControlModifier)) == 0) { + dragNoteOn(pos); + noteToolTip(pos); + } + // Maybe we'll start something... + m_dragState = DragStart; + m_posDrag = pos; + } else { + m_dragState = m_dragCursor; + } + // Fall thru... + default: + break; + } + +// QWidget::mousePressEvent(pMouseEvent); +} + + +void synthv1widget_keybd::mouseMoveEvent ( QMouseEvent *pMouseEvent ) +{ + const QPoint& pos = pMouseEvent->pos(); + + switch (m_dragState) { + case DragNone: + if (m_bNoteRange) { + // Are we already moving/dragging something? + const int dx = 4; + const int x1 = m_iNoteLowX; + const int x2 = m_iNoteHighX; + if (::abs(x2 - pos.x()) < dx) { + m_dragCursor = DragNoteHigh; + QWidget::setCursor(QCursor(Qt::SizeHorCursor)); + QToolTip::showText( + QWidget::mapToGlobal(pos), + tr("High: %1 (%2)") + .arg(noteName(m_iNoteHigh)).arg(m_iNoteHigh), this); + } + else + if (::abs(x1 - pos.x()) < dx) { + m_dragCursor = DragNoteLow; + QWidget::setCursor(QCursor(Qt::SizeHorCursor)); + QToolTip::showText( + QWidget::mapToGlobal(pos), + tr("Low: %1 (%2)") + .arg(noteName(m_iNoteLow)).arg(m_iNoteLow), this); + } + else + if (m_dragCursor != DragNone) { + m_dragCursor = DragNone; + QWidget::unsetCursor(); + } + } + break; + case DragNoteLow: + if (m_bNoteRange) { + const int w = QWidget::width(); + if (w > 0) { + const int iNoteLow = safeNoteLow((NUM_NOTES * pos.x()) / w); + m_iNoteLowX = noteRect(iNoteLow).left(); + QWidget::update(); + QToolTip::showText( + QCursor::pos(), + tr("Low: %1 (%2)") + .arg(noteName(iNoteLow)).arg(iNoteLow), this); + } + } + break; + case DragNoteHigh: + if (m_bNoteRange) { + const int w = QWidget::width(); + if (w > 0) { + const int iNoteHigh = safeNoteHigh((NUM_NOTES * pos.x()) / w); + m_iNoteHighX = noteRect(iNoteHigh).right(); + QWidget::update(); + QToolTip::showText( + QCursor::pos(), + tr("High: %1 (%2)") + .arg(noteName(iNoteHigh)).arg(iNoteHigh), this); + } + } + break; + case DragNoteRange: + if (m_bNoteRange) { + const int w = QWidget::width(); + if (w > 0) { + // Rubber-band offset selection... + const QRect& rect = QRect(m_posDrag, pos).normalized(); + int iNoteLow = (NUM_NOTES * rect.left()) / w; + int iNoteHigh = (NUM_NOTES * rect.right()) / w; + if (iNoteLow < MIN_NOTE) + iNoteLow = MIN_NOTE; + if (iNoteLow > iNoteHigh) + iNoteLow = iNoteHigh; + if (iNoteHigh > MAX_NOTE) + iNoteHigh = MAX_NOTE; + if (iNoteHigh < iNoteLow) + iNoteHigh = iNoteLow; + m_iNoteLowX = noteRect(iNoteLow).left(); + m_iNoteHighX = noteRect(iNoteHigh).right(); + QWidget::update(); + QToolTip::showText( + QWidget::mapToGlobal(pos), + tr("Low: %1 (%2) High: %3 (%4)") + .arg(noteName(iNoteLow)).arg(iNoteLow) + .arg(noteName(iNoteHigh)).arg(iNoteHigh), this); + } + } + break; + case DragStart: + if (m_bNoteRange) { + if ((m_posDrag - pos).manhattanLength() + > QApplication::startDragDistance()) { + // Start dragging alright... + if (m_dragCursor != DragNone) + m_dragState = m_dragCursor; + else + if (pMouseEvent->modifiers() + & (Qt::ShiftModifier | Qt::ControlModifier)) { + // Rubber-band starting... + m_dragState = m_dragCursor = DragNoteRange; + QWidget::setCursor(QCursor(Qt::SizeHorCursor)); + } + } + } + // Are we still hovering the keyboard? + if (m_dragState == DragStart) { + dragNoteOn(pos); + noteToolTip(pos); + } + // Fall thru... + default: + break; + } + +// QWidget::mouseMoveEvent(pMouseEvent); +} + + +void synthv1widget_keybd::mouseReleaseEvent ( QMouseEvent *pMouseEvent ) +{ + const QPoint& pos = pMouseEvent->pos(); + + switch (m_dragState) { + case DragNoteLow: + if (m_bNoteRange) { + const int w = QWidget::width(); + if (w > 0) { + setNoteLow((NUM_NOTES * pos.x()) / w); + emit noteRangeChanged(); + } + } + break; + case DragNoteHigh: + if (m_bNoteRange) { + const int w = QWidget::width(); + if (w > 0) { + setNoteHigh((NUM_NOTES * pos.x()) / w); + emit noteRangeChanged(); + } + } + break; + case DragNoteRange: + if (m_bNoteRange) { + const int w = QWidget::width(); + if (w > 0) { + const QRect& rect = QRect(m_posDrag, pos).normalized(); + int iNoteLow = (NUM_NOTES * rect.left()) / w; + int iNoteHigh = (NUM_NOTES * rect.right()) / w; + if (iNoteLow < MIN_NOTE) + iNoteLow = MIN_NOTE; + if (iNoteHigh > MAX_NOTE) + iNoteHigh = MAX_NOTE; + if (iNoteLow > iNoteHigh) + iNoteLow = iNoteHigh; + if (iNoteHigh < iNoteLow) + iNoteHigh = iNoteLow; + m_iNoteLow = iNoteLow; + m_iNoteLowX = noteRect(iNoteLow).left(); + m_iNoteHigh = iNoteHigh; + m_iNoteHighX = noteRect(iNoteHigh).right(); + QWidget::update(); + emit noteRangeChanged(); + } + } + break; + // Fall thru... + default: + break; + } + + // Were we stuck on some keyboard note? + resetDragState(); + +// QWidget::mouseReleaseEvent(pMouseEvent); +} + + +// Keyboard event handler. +void synthv1widget_keybd::keyPressEvent ( QKeyEvent *pKeyEvent ) +{ + switch (pKeyEvent->key()) { + case Qt::Key_Escape: + resetDragState(); + QWidget::update(); + break; + default: + QWidget::keyPressEvent(pKeyEvent); + break; + } +} + + + // Trap for help/tool-tip events. +bool synthv1widget_keybd::eventFilter ( QObject *pObject, QEvent *pEvent ) +{ + if (static_cast (pObject) == this) { + if (pEvent->type() == QEvent::ToolTip) { + QHelpEvent *pHelpEvent = static_cast (pEvent); + if (pHelpEvent && m_dragCursor == DragNone) { + noteToolTip(pHelpEvent->pos()); + return true; + } + } + else + if (pEvent->type() == QEvent::Leave) { + dragNoteOff(); + return true; + } + } + + // Not handled here. + return QWidget::eventFilter(pObject, pEvent); +} + + +// Present a tooltip for a note. +void synthv1widget_keybd::noteToolTip ( const QPoint& pos ) const +{ + const int iNote = (NUM_NOTES * pos.x() / QWidget::width()); + QToolTip::showText(QWidget::mapToGlobal(pos), + QString("%1 (%2)").arg(noteName(iNote)).arg(iNote)); +} + + +// Default note name map accessor. +QString synthv1widget_keybd::noteName ( int iNote ) const +{ + return synthv1_ui::noteName(iNote); +} + + +// Reset drag/select state. +void synthv1widget_keybd::resetDragState (void) +{ + dragNoteOff(); + + if (m_dragCursor != DragNone) + QWidget::unsetCursor(); + + m_dragState = m_dragCursor = DragNone; +} + + +// end of synthv1widget_keybd.cpp diff -Nru synthv1-0.8.6/src/synthv1widget_keybd.h synthv1-0.9.10+git20190929/src/synthv1widget_keybd.h --- synthv1-0.8.6/src/synthv1widget_keybd.h 1970-01-01 00:00:00.000000000 +0000 +++ synthv1-0.9.10+git20190929/src/synthv1widget_keybd.h 2019-09-28 23:00:43.000000000 +0000 @@ -0,0 +1,181 @@ +// synthv1widget_keybd.h +// +/**************************************************************************** + Copyright (C) 2012-2019, rncbc aka Rui Nuno Capela. All rights reserved. + + 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. + +*****************************************************************************/ + +#ifndef __synthv1widget_keybd_h +#define __synthv1widget_keybd_h + +#include +#include + + +//------------------------------------------------------------------------- +// synthv1widget_keybd - A horizontal piano keyboard widget. + +class synthv1widget_keybd : public QWidget +{ + Q_OBJECT + +public: + + // Constructor. + synthv1widget_keybd(QWidget *pParent = 0); + + // Note range predicate. + void setNoteRange(bool bNoteRange); + bool isNoteRange() const; + + // Default note-on velocity. + void setVelocity(int iVelocity); + int velocity() const; + + // Keyboard note range getters. + int noteLow() const; + int noteHigh() const; + + // Highlighted note getter. + int noteKey() const; + +public slots: + + // Keyboard note range setters. + void setNoteLow(int iNoteLow); + void setNoteHigh(int iNoteHigh); + + // Keyboard note/key actions. + void noteOn(int iNote); + void noteOff(int iNote); + + void allNotesOff(); + + // Highlighted note setter. + void setNoteKey(int iNoteKey); + +signals: + + // Piano keyboard note-on/off signal. + void noteOnClicked(int iNote, int iVelocity); + + // Keyboard note range changed signal. + void noteRangeChanged(); + +protected slots: + + // Kill dangling notes, if any... + void allNotesTimeout(); + +protected: + + // Keyboard note range sanitizers. + int safeNoteLow(int iNoteLow) const; + int safeNoteHigh(int iNoteHigh) const; + + // Piano key rectangle finder. + QRect noteRect(int iNote, bool bOn = false) const; + + // Piano keyboard note-on/off handlers. + void dragNoteOn(const QPoint& pos); + void dragNoteOff(); + + // (Re)create the complete view pixmap. + void updatePixmap(); + + // Paint event handler. + void paintEvent(QPaintEvent *pPaintEvent); + + // Resize event handler. + void resizeEvent(QResizeEvent *pResizeEvent); + + // Alternate mouse behavior event handlers. + void mousePressEvent(QMouseEvent *pMouseEvent); + void mouseMoveEvent(QMouseEvent *pMouseEvent); + void mouseReleaseEvent(QMouseEvent *pMouseEvent); + + // Keyboard event handler. + void keyPressEvent(QKeyEvent *pKeyEvent); + + // Trap for help/tool-tip events. + bool eventFilter(QObject *pObject, QEvent *pEvent); + + // Present a tooltip for a note. + void noteToolTip(const QPoint& pos) const; + + // Default note name map accessor. + QString noteName(int iNote) const; + + // Reset drag/select state. + void resetDragState(); + +protected: + + // Constants + static const int NUM_NOTES = 128; + + static const int MIN_NOTE = 0; + static const int MAX_NOTE = 127; + + static const int MIN_VELOCITY = 1; + static const int MAX_VELOCITY = 127; + + // Local double-buffering pixmap. + QPixmap m_pixmap; + + // Current notes being keyed on. + struct Note + { + bool on; + QRect rect; + + } m_notes[NUM_NOTES]; + + // Keyboard note range state. + enum DragState { + DragNone = 0, DragStart, + DragNoteRange, DragNoteLow, DragNoteHigh + } m_dragState, m_dragCursor; + + QPoint m_posDrag; + + // Piano keyboard note range. + bool m_bNoteRange; + + int m_iNoteLow; + int m_iNoteLowX; + + int m_iNoteHigh; + int m_iNoteHighX; + + // Current note being keyed on. + int m_iNoteOn; + + // Current note-on timeout. + int m_iTimeout; + + // Default note-on velocity. + int m_iVelocity; + + // Current highlighted note. + int m_iNoteKey; +}; + + +#endif // __synthv1widget_keybd_h + +// end of synthv1widget_keybd.h diff -Nru synthv1-0.8.6/src/synthv1widget_lv2.cpp synthv1-0.9.10+git20190929/src/synthv1widget_lv2.cpp --- synthv1-0.8.6/src/synthv1widget_lv2.cpp 2017-12-20 07:56:50.328842973 +0000 +++ synthv1-0.9.10+git20190929/src/synthv1widget_lv2.cpp 2019-09-28 23:00:43.000000000 +0000 @@ -1,7 +1,7 @@ // synthv1widget_lv2.cpp // /**************************************************************************** - Copyright (C) 2012-2017, rncbc aka Rui Nuno Capela. All rights reserved. + Copyright (C) 2012-2019, rncbc aka Rui Nuno Capela. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License @@ -37,20 +37,22 @@ { m_pSynthUi = new synthv1_lv2ui(pSynth, controller, write_function); -#ifdef CONFIG_LV2_EXTERNAL_UI - m_external_host = NULL; +#ifdef CONFIG_LV2_UI_EXTERNAL + m_external_host = nullptr; #endif #ifdef CONFIG_LV2_UI_IDLE m_bIdleClosed = false; #endif - for (uint32_t i = 0; i < synthv1::NUM_PARAMS; ++i) - m_params_def[i] = true; + // Initialise preset stuff... + clearPreset(); + + // Initial update, always... + //resetParamValues(); + resetParamKnobs(); // May initialize the scheduler/work notifier. openSchedNotifier(); - - clearPreset(); } @@ -68,7 +70,7 @@ } -#ifdef CONFIG_LV2_EXTERNAL_UI +#ifdef CONFIG_LV2_UI_EXTERNAL void synthv1widget_lv2::setExternalHost ( LV2_External_UI_Host *external_host ) { @@ -83,7 +85,7 @@ return m_external_host; } -#endif // CONFIG_LV2_EXTERNAL_UI +#endif // CONFIG_LV2_UI_EXTERNAL #ifdef CONFIG_LV2_UI_IDLE @@ -105,7 +107,7 @@ if (pCloseEvent->isAccepted()) m_bIdleClosed = true; #endif -#ifdef CONFIG_LV2_EXTERNAL_UI +#ifdef CONFIG_LV2_UI_EXTERNAL if (m_external_host && m_external_host->ui_closed) { if (pCloseEvent->isAccepted()) m_external_host->ui_closed(m_pSynthUi->controller()); @@ -122,8 +124,7 @@ const synthv1::ParamIndex index = synthv1::ParamIndex(port_index - synthv1_lv2::ParamBase); const float fValue = *(float *) buffer; - setParamValue(index, fValue, m_params_def[index]); - m_params_def[index] = false; + setParamValue(index, fValue); } } diff -Nru synthv1-0.8.6/src/synthv1widget_lv2.h synthv1-0.9.10+git20190929/src/synthv1widget_lv2.h --- synthv1-0.8.6/src/synthv1widget_lv2.h 2017-12-20 07:56:50.328842973 +0000 +++ synthv1-0.9.10+git20190929/src/synthv1widget_lv2.h 2019-09-28 23:00:43.000000000 +0000 @@ -1,7 +1,7 @@ // synthv1widget_lv2.h // /**************************************************************************** - Copyright (C) 2012-2017, rncbc aka Rui Nuno Capela. All rights reserved. + Copyright (C) 2012-2019, rncbc aka Rui Nuno Capela. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License @@ -45,7 +45,7 @@ void port_event(uint32_t port_index, uint32_t buffer_size, uint32_t format, const void *buffer); -#ifdef CONFIG_LV2_EXTERNAL_UI +#ifdef CONFIG_LV2_UI_EXTERNAL void setExternalHost(LV2_External_UI_Host *external_host); const LV2_External_UI_Host *externalHost() const; #endif @@ -70,9 +70,7 @@ // Instance variables. synthv1_lv2ui *m_pSynthUi; - bool m_params_def[synthv1::NUM_PARAMS]; - -#ifdef CONFIG_LV2_EXTERNAL_UI +#ifdef CONFIG_LV2_UI_EXTERNAL LV2_External_UI_Host *m_external_host; #endif #ifdef CONFIG_LV2_UI_IDLE diff -Nru synthv1-0.8.6/src/synthv1widget_param.cpp synthv1-0.9.10+git20190929/src/synthv1widget_param.cpp --- synthv1-0.8.6/src/synthv1widget_param.cpp 2017-12-20 07:56:50.329842973 +0000 +++ synthv1-0.9.10+git20190929/src/synthv1widget_param.cpp 2019-09-28 23:00:43.000000000 +0000 @@ -1,7 +1,7 @@ // synthv1widget_param.cpp // /**************************************************************************** - Copyright (C) 2012-2017, rncbc aka Rui Nuno Capela. All rights reserved. + Copyright (C) 2012-2019, rncbc aka Rui Nuno Capela. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License @@ -38,102 +38,95 @@ //------------------------------------------------------------------------- -// synthv1widget_dial - A better QDial widget. - -synthv1widget_dial::DialMode -synthv1widget_dial::g_dialMode = synthv1widget_dial::DefaultMode; - -// Set knob dial mode behavior. -void synthv1widget_dial::setDialMode ( DialMode dialMode ) - { g_dialMode = dialMode; } +// synthv1widget_param_style - Custom widget style. +// -synthv1widget_dial::DialMode synthv1widget_dial::dialMode (void) - { return g_dialMode; } +#include +#include +#include -// Constructor. -synthv1widget_dial::synthv1widget_dial ( QWidget *pParent ) - : QDial(pParent), m_bMousePressed(false), m_fLastDragValue(0.0f) +class synthv1widget_param_style : public QProxyStyle { -} - +public: -// Mouse angle determination. -float synthv1widget_dial::mouseAngle ( const QPoint& pos ) -{ - const float dx = pos.x() - (width() >> 1); - const float dy = (height() >> 1) - pos.y(); - return 180.0f * ::atan2f(dx, dy) / float(M_PI); -} + // Constructor. + synthv1widget_param_style() : QProxyStyle() + { + m_icon.addPixmap( + QPixmap(":/images/ledOff.png"), QIcon::Normal, QIcon::Off); + m_icon.addPixmap( + QPixmap(":/images/ledOn.png"), QIcon::Normal, QIcon::On); + } -// Alternate mouse behavior event handlers. -void synthv1widget_dial::mousePressEvent ( QMouseEvent *pMouseEvent ) -{ - if (g_dialMode == DefaultMode) { - QDial::mousePressEvent(pMouseEvent); - } else if (pMouseEvent->button() == Qt::LeftButton) { - m_bMousePressed = true; - m_posMouse = pMouseEvent->pos(); - m_fLastDragValue = float(value()); - emit sliderPressed(); + // Hints override. + int styleHint(StyleHint hint, const QStyleOption *option, + const QWidget *widget, QStyleHintReturn *retdata) const + { + if (hint == QStyle::SH_UnderlineShortcut) + return 0; + else + return QProxyStyle::styleHint(hint, option, widget, retdata); } -} + // Paint job. + void drawPrimitive(PrimitiveElement element, + const QStyleOption *option, + QPainter *painter, const QWidget *widget) const + { + if (element == PE_IndicatorRadioButton || + element == PE_IndicatorCheckBox) { + const QRect& rect = option->rect; + if (option->state & State_Enabled) { + if (option->state & State_On) + m_icon.paint(painter, rect, + Qt::AlignCenter, QIcon::Normal, QIcon::On); + else + // if (option->state & State_Off) + m_icon.paint(painter, rect, + Qt::AlignCenter, QIcon::Normal, QIcon::Off); + } else { + m_icon.paint(painter, rect, + Qt::AlignCenter, QIcon::Disabled, QIcon::Off); + } + } + else + QProxyStyle::drawPrimitive(element, option, painter, widget); + } -void synthv1widget_dial::mouseMoveEvent ( QMouseEvent *pMouseEvent ) -{ - if (g_dialMode == DefaultMode) { - QDial::mouseMoveEvent(pMouseEvent); - return; + // Spiced up text margins + void drawItemText(QPainter *painter, const QRect& rectangle, + int alignment, const QPalette& palette, bool enabled, + const QString& text, QPalette::ColorRole textRole) const + { + QRect rect = rectangle; + rect.setLeft(rect.left() - 4); + rect.setRight(rect.right() + 4); + QProxyStyle::drawItemText(painter, rect, + alignment, palette, enabled, text, textRole); } - if (!m_bMousePressed) - return; + static void addRef () + { if (++g_iRefCount == 1) g_pStyle = new synthv1widget_param_style(); } - const QPoint& pos = pMouseEvent->pos(); - const int dx = pos.x() - m_posMouse.x(); - const int dy = pos.y() - m_posMouse.y(); - float fAngleDelta = mouseAngle(pos) - mouseAngle(m_posMouse); - int iNewValue = value(); + static void releaseRef () + { if (--g_iRefCount == 0) { delete g_pStyle; g_pStyle = nullptr; } } - switch (g_dialMode) { - case LinearMode: - iNewValue = int(m_fLastDragValue) + dx - dy; - break; - case AngularMode: - default: - // Forget about the drag origin to be robust on full rotations - if (fAngleDelta > +180.0f) fAngleDelta -= 360.0f; - else - if (fAngleDelta < -180.0f) fAngleDelta += 360.0f; - m_fLastDragValue += float(maximum() - minimum()) * fAngleDelta / 270.0f; - if (m_fLastDragValue > float(maximum())) - m_fLastDragValue = float(maximum()); - else - if (m_fLastDragValue < float(minimum())) - m_fLastDragValue = float(minimum()); - m_posMouse = pos; - iNewValue = int(m_fLastDragValue + 0.5f); - break; - } + static synthv1widget_param_style *getRef () + { return g_pStyle; } - setValue(iNewValue); - update(); +private: - emit sliderMoved(value()); -} + QIcon m_icon; + + static synthv1widget_param_style *g_pStyle; + static unsigned int g_iRefCount; +}; -void synthv1widget_dial::mouseReleaseEvent ( QMouseEvent *pMouseEvent ) -{ - if (g_dialMode == DefaultMode - && pMouseEvent->button() != Qt::MidButton) { - QDial::mouseReleaseEvent(pMouseEvent); - } else if (m_bMousePressed) { - m_bMousePressed = false; - } -} +synthv1widget_param_style *synthv1widget_param_style::g_pStyle = nullptr; +unsigned int synthv1widget_param_style::g_iRefCount = 0; //------------------------------------------------------------------------- @@ -178,11 +171,11 @@ } -void synthv1widget_param::setValue ( float fValue, bool bDefault ) +void synthv1widget_param::setValue ( float fValue ) { QPalette pal; - if (bDefault) { + if (m_iDefaultValue == 0) { m_fDefaultValue = fValue; m_iDefaultValue++; } @@ -306,6 +299,105 @@ //------------------------------------------------------------------------- +// synthv1widget_dial - A better QDial widget. + +synthv1widget_dial::DialMode +synthv1widget_dial::g_dialMode = synthv1widget_dial::DefaultMode; + +// Set knob dial mode behavior. +void synthv1widget_dial::setDialMode ( DialMode dialMode ) + { g_dialMode = dialMode; } + +synthv1widget_dial::DialMode synthv1widget_dial::dialMode (void) + { return g_dialMode; } + + +// Constructor. +synthv1widget_dial::synthv1widget_dial ( QWidget *pParent ) + : QDial(pParent), m_bMousePressed(false), m_fLastDragValue(0.0f) +{ +} + + +// Mouse angle determination. +float synthv1widget_dial::mouseAngle ( const QPoint& pos ) +{ + const float dx = pos.x() - (width() >> 1); + const float dy = (height() >> 1) - pos.y(); + return 180.0f * ::atan2f(dx, dy) / float(M_PI); +} + + +// Alternate mouse behavior event handlers. +void synthv1widget_dial::mousePressEvent ( QMouseEvent *pMouseEvent ) +{ + if (g_dialMode == DefaultMode) { + QDial::mousePressEvent(pMouseEvent); + } else if (pMouseEvent->button() == Qt::LeftButton) { + m_bMousePressed = true; + m_posMouse = pMouseEvent->pos(); + m_fLastDragValue = float(value()); + emit sliderPressed(); + } +} + + +void synthv1widget_dial::mouseMoveEvent ( QMouseEvent *pMouseEvent ) +{ + if (g_dialMode == DefaultMode) { + QDial::mouseMoveEvent(pMouseEvent); + return; + } + + if (!m_bMousePressed) + return; + + const QPoint& pos = pMouseEvent->pos(); + const int dx = pos.x() - m_posMouse.x(); + const int dy = pos.y() - m_posMouse.y(); + float fAngleDelta = mouseAngle(pos) - mouseAngle(m_posMouse); + int iNewValue = value(); + + switch (g_dialMode) { + case LinearMode: + iNewValue = int(m_fLastDragValue) + dx - dy; + break; + case AngularMode: + default: + // Forget about the drag origin to be robust on full rotations + if (fAngleDelta > +180.0f) fAngleDelta -= 360.0f; + else + if (fAngleDelta < -180.0f) fAngleDelta += 360.0f; + m_fLastDragValue += float(maximum() - minimum()) * fAngleDelta / 270.0f; + if (m_fLastDragValue > float(maximum())) + m_fLastDragValue = float(maximum()); + else + if (m_fLastDragValue < float(minimum())) + m_fLastDragValue = float(minimum()); + m_posMouse = pos; + iNewValue = int(m_fLastDragValue + 0.5f); + break; + } + + setValue(iNewValue); + update(); + + emit sliderMoved(value()); +} + + +void synthv1widget_dial::mouseReleaseEvent ( QMouseEvent *pMouseEvent ) +{ + if (g_dialMode == DefaultMode + && pMouseEvent->button() != Qt::MidButton) { + QDial::mouseReleaseEvent(pMouseEvent); + } else if (m_bMousePressed) { + m_bMousePressed = false; + } +} + + +//------------------------------------------------------------------------- // synthv1widget_knob - Custom knob/dial widget. // @@ -343,10 +435,10 @@ } -void synthv1widget_knob::setValue ( float fValue, bool bDefault ) +void synthv1widget_knob::setValue ( float fValue ) { const bool bDialBlock = m_pDial->blockSignals(true); - synthv1widget_param::setValue(fValue, bDefault); + synthv1widget_param::setValue(fValue); m_pDial->setValue(scaleFromValue(fValue)); m_pDial->blockSignals(bDialBlock); } @@ -404,7 +496,7 @@ synthv1widget_edit::synthv1widget_edit ( QWidget *pParent ) : QDoubleSpinBox(pParent), m_iTextChanged(0) { - QObject::connect(lineEdit(), + QObject::connect(QDoubleSpinBox::lineEdit(), SIGNAL(textChanged(const QString&)), SLOT(lineEditTextChanged(const QString&))); QObject::connect(this, @@ -428,7 +520,7 @@ { if (g_editMode == DeferredMode) { m_iTextChanged = 0; - emit valueChangedEx(value()); + emit valueChangedEx(QDoubleSpinBox::value()); } } @@ -440,6 +532,21 @@ } +// Inherited/override methods. +QValidator::State synthv1widget_edit::validate ( QString& sText, int& iPos ) const +{ + const QValidator::State state + = QDoubleSpinBox::validate(sText, iPos); + + if (state == QValidator::Acceptable + && g_editMode == DeferredMode + && m_iTextChanged == 0) + return QValidator::Intermediate; + + return state; +} + + //------------------------------------------------------------------------- // synthv1widget_spin - Custom knob/spin-box widget. // @@ -473,10 +580,10 @@ // Virtual accessors. -void synthv1widget_spin::setValue ( float fValue, bool bDefault ) +void synthv1widget_spin::setValue ( float fValue ) { const bool bSpinBlock = m_pSpinBox->blockSignals(true); - synthv1widget_knob::setValue(fValue, bDefault); + synthv1widget_knob::setValue(fValue); m_pSpinBox->setValue(scaleFromValue(fValue)); m_pSpinBox->blockSignals(bSpinBlock); } @@ -569,10 +676,10 @@ // Virtual accessors. -void synthv1widget_combo::setValue ( float fValue, bool bDefault ) +void synthv1widget_combo::setValue ( float fValue ) { const bool bComboBlock = m_pComboBox->blockSignals(true); - synthv1widget_knob::setValue(fValue, bDefault); + synthv1widget_knob::setValue(fValue); m_pComboBox->setCurrentIndex(iroundf(fValue)); m_pComboBox->blockSignals(bComboBlock); } @@ -637,98 +744,6 @@ //------------------------------------------------------------------------- -// synthv1widget_param_style - Custom widget style. -// - -#include -#include -#include - - -class synthv1widget_param_style : public QProxyStyle -{ -public: - - // Constructor. - synthv1widget_param_style() : QProxyStyle() - { - m_icon.addPixmap( - QPixmap(":/images/ledOff.png"), QIcon::Normal, QIcon::Off); - m_icon.addPixmap( - QPixmap(":/images/ledOn.png"), QIcon::Normal, QIcon::On); - } - - - // Hints override. - int styleHint(StyleHint hint, const QStyleOption *option, - const QWidget *widget, QStyleHintReturn *retdata) const - { - if (hint == QStyle::SH_UnderlineShortcut) - return 0; - else - return QProxyStyle::styleHint(hint, option, widget, retdata); - } - - // Paint job. - void drawPrimitive(PrimitiveElement element, - const QStyleOption *option, - QPainter *painter, const QWidget *widget) const - { - if (element == PE_IndicatorRadioButton || - element == PE_IndicatorCheckBox) { - const QRect& rect = option->rect; - if (option->state & State_Enabled) { - if (option->state & State_On) - m_icon.paint(painter, rect, - Qt::AlignCenter, QIcon::Normal, QIcon::On); - else - // if (option->state & State_Off) - m_icon.paint(painter, rect, - Qt::AlignCenter, QIcon::Normal, QIcon::Off); - } else { - m_icon.paint(painter, rect, - Qt::AlignCenter, QIcon::Disabled, QIcon::Off); - } - } - else - QProxyStyle::drawPrimitive(element, option, painter, widget); - } - - // Spiced up text margins - void drawItemText(QPainter *painter, const QRect& rectangle, - int alignment, const QPalette& palette, bool enabled, - const QString& text, QPalette::ColorRole textRole) const - { - QRect rect = rectangle; - rect.setLeft(rect.left() - 4); - rect.setRight(rect.right() + 4); - QProxyStyle::drawItemText(painter, rect, - alignment, palette, enabled, text, textRole); - } - - static void addRef () - { if (++g_iRefCount == 1) g_pStyle = new synthv1widget_param_style(); } - - static void releaseRef () - { if (--g_iRefCount == 0) { delete g_pStyle; g_pStyle = NULL; } } - - static synthv1widget_param_style *getRef () - { return g_pStyle; } - -private: - - QIcon m_icon; - - static synthv1widget_param_style *g_pStyle; - static unsigned int g_iRefCount; -}; - - -synthv1widget_param_style *synthv1widget_param_style::g_pStyle = NULL; -unsigned int synthv1widget_param_style::g_iRefCount = 0; - - -//------------------------------------------------------------------------- // synthv1widget_radio - Custom radio/button widget. // @@ -759,14 +774,14 @@ // Virtual accessors. -void synthv1widget_radio::setValue ( float fValue, bool bDefault ) +void synthv1widget_radio::setValue ( float fValue ) { const int iRadioValue = iroundf(fValue); QRadioButton *pRadioButton = static_cast (m_group.button(iRadioValue)); if (pRadioButton) { const bool bRadioBlock = pRadioButton->blockSignals(true); - synthv1widget_param::setValue(float(iRadioValue), bDefault); + synthv1widget_param::setValue(float(iRadioValue)); pRadioButton->setChecked(true); pRadioButton->blockSignals(bRadioBlock); } @@ -910,11 +925,11 @@ // Virtual accessors. -void synthv1widget_check::setValue ( float fValue, bool bDefault ) +void synthv1widget_check::setValue ( float fValue ) { const bool bCheckValue = (fValue > 0.5f * (maximum() + minimum())); const bool bCheckBlock = m_pCheckBox->blockSignals(true); - synthv1widget_param::setValue(bCheckValue ? maximum() : minimum(), bDefault); + synthv1widget_param::setValue(bCheckValue ? maximum() : minimum()); m_pCheckBox->setChecked(bCheckValue); m_pCheckBox->blockSignals(bCheckBlock); } @@ -926,4 +941,85 @@ } +//------------------------------------------------------------------------- +// synthv1widget_group - Custom checkable group-box widget. +// + +// Constructor. +synthv1widget_group::synthv1widget_group ( QWidget *pParent ) + : QGroupBox(pParent) +{ + synthv1widget_param_style::addRef(); +#if 0 + QGroupBox::setStyleSheet( + // "QGroupBox::indicator { width: 16px; height: 16px; }" + "QGroupBox::indicator::unchecked { image: url(:/images/ledOff.png); }" + "QGroupBox::indicator::checked { image: url(:/images/ledOn.png); }" + ); +#endif + QGroupBox::setStyle(synthv1widget_param_style::getRef()); + + m_pParam = new synthv1widget_param(this); + m_pParam->setToolTip(QGroupBox::toolTip()); + + QObject::connect(m_pParam, + SIGNAL(valueChanged(float)), + SLOT(paramValueChanged(float))); + + QObject::connect(this, + SIGNAL(toggled(bool)), + SLOT(groupBoxValueChanged(bool))); +} + + +// Destructor. +synthv1widget_group::~synthv1widget_group (void) +{ + synthv1widget_param_style::releaseRef(); + + delete m_pParam; +} + + +// Accessors. +void synthv1widget_group::setToolTip ( const QString& sToolTip ) +{ + m_pParam->setToolTip(sToolTip); +} + + +QString synthv1widget_group::toolTip (void) const +{ + return m_pParam->toolTip(); +} + + +synthv1widget_param *synthv1widget_group::param (void) const +{ + return m_pParam; +} + + +// Virtual accessors. +void synthv1widget_group::paramValueChanged ( float fValue ) +{ + const float fMaximum = m_pParam->maximum(); + const float fMinimum = m_pParam->minimum(); + + const bool bGroupValue = (fValue > 0.5f * (fMaximum + fMinimum)); + const bool bGroupBlock = QGroupBox::blockSignals(true); + QGroupBox::setChecked(bGroupValue); + QGroupBox::blockSignals(bGroupBlock); +} + + +void synthv1widget_group::groupBoxValueChanged ( bool bGroupValue ) +{ + const float fMaximum = m_pParam->maximum(); + const float fMinimum = m_pParam->minimum(); + + m_pParam->setValue(bGroupValue ? fMaximum : fMinimum); +} + + // end of synthv1widget_param.cpp diff -Nru synthv1-0.8.6/src/synthv1widget_param.h synthv1-0.9.10+git20190929/src/synthv1widget_param.h --- synthv1-0.8.6/src/synthv1widget_param.h 2017-12-20 07:56:50.329842973 +0000 +++ synthv1-0.9.10+git20190929/src/synthv1widget_param.h 2019-09-28 23:00:43.000000000 +0000 @@ -1,7 +1,7 @@ // synthv1widget_param.h // /**************************************************************************** - Copyright (C) 2012-2017, rncbc aka Rui Nuno Capela. All rights reserved. + Copyright (C) 2012-2019, rncbc aka Rui Nuno Capela. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License @@ -26,6 +26,7 @@ #include #include #include +#include // Forward declarations. @@ -35,52 +36,6 @@ //------------------------------------------------------------------------- -// synthv1widget_dial - A better QDial widget. - -class synthv1widget_dial : public QDial -{ - Q_OBJECT - -public: - - // Constructor. - synthv1widget_dial(QWidget *pParent = 0); - - // Dial mode behavior: - // DefaultMode - default (old) QDial behavior. - // LinearMode - proportionally to distance in one ortogonal axis. - // AngularMode - angularly relative to widget center. - enum DialMode { DefaultMode = 0, LinearMode, AngularMode }; - - // Set knob dial mode behavior. - static void setDialMode(DialMode dialMode); - static DialMode dialMode(); - -protected: - - // Mouse angle determination. - float mouseAngle(const QPoint& pos); - - // Alternate mouse behavior event handlers. - void mousePressEvent(QMouseEvent *pMouseEvent); - void mouseMoveEvent(QMouseEvent *pMouseEvent); - void mouseReleaseEvent(QMouseEvent *pMouseEvent); - -private: - - // Alternate mouse behavior tracking. - bool m_bMousePressed; - QPoint m_posMouse; - - // Just for more precission on the movement - float m_fLastDragValue; - - // Knob dial mode behavior. - static DialMode g_dialMode; -}; - - -//------------------------------------------------------------------------- // synthv1widget_param - Custom composite widget. class synthv1widget_param : public QWidget @@ -117,7 +72,7 @@ public slots: // Virtual accessor. - virtual void setValue(float fValue, bool bDefault = false); + virtual void setValue(float fValue); signals: @@ -152,6 +107,52 @@ //------------------------------------------------------------------------- +// synthv1widget_dial - A better QDial widget. + +class synthv1widget_dial : public QDial +{ + Q_OBJECT + +public: + + // Constructor. + synthv1widget_dial(QWidget *pParent = 0); + + // Dial mode behavior: + // DefaultMode - default (old) QDial behavior. + // LinearMode - proportionally to distance in one ortogonal axis. + // AngularMode - angularly relative to widget center. + enum DialMode { DefaultMode = 0, LinearMode, AngularMode }; + + // Set knob dial mode behavior. + static void setDialMode(DialMode dialMode); + static DialMode dialMode(); + +protected: + + // Mouse angle determination. + float mouseAngle(const QPoint& pos); + + // Alternate mouse behavior event handlers. + void mousePressEvent(QMouseEvent *pMouseEvent); + void mouseMoveEvent(QMouseEvent *pMouseEvent); + void mouseReleaseEvent(QMouseEvent *pMouseEvent); + +private: + + // Alternate mouse behavior tracking. + bool m_bMousePressed; + QPoint m_posMouse; + + // Just for more precission on the movement + float m_fLastDragValue; + + // Knob dial mode behavior. + static DialMode g_dialMode; +}; + + +//------------------------------------------------------------------------- // synthv1widget_knob - Custom knob/dial widget. class synthv1widget_knob : public synthv1widget_param @@ -173,7 +174,7 @@ public slots: // Virtual accessor. - void setValue(float fValue, bool bDefault = false); + void setValue(float fValue); protected slots: @@ -228,6 +229,11 @@ // Alternate value change signal. void valueChangedEx(double); +protected: + + // Inherited/override methods. + QValidator::State validate(QString& sText, int& iPos) const; + private: // Alternate edit behavior tracking. @@ -268,7 +274,7 @@ public slots: // Virtual accessor. - void setValue(float fValue, bool bDefault = false); + void setValue(float fValue); protected slots: @@ -304,7 +310,7 @@ public slots: // Virtual accessor. - void setValue(float fValue, bool bDefault = false); + void setValue(float fValue); protected slots: @@ -348,7 +354,7 @@ public slots: // Virtual accessor. - void setValue(float fValue, bool bDefault = false); + void setValue(float fValue); protected slots: @@ -387,7 +393,7 @@ public slots: // Virtual accessor. - void setValue(float fValue, bool bDefault = false); + void setValue(float fValue); protected slots: @@ -403,6 +409,40 @@ }; +//------------------------------------------------------------------------- +// synthv1widget_group - Custom checkable group-box widget. + +class synthv1widget_group : public QGroupBox +{ + Q_OBJECT + +public: + + // Constructor. + synthv1widget_group(QWidget *pParent = 0); + + // Desstructor. + ~synthv1widget_group(); + + // Accessors. + void setToolTip(const QString& sToolTip); + QString toolTip() const; + + synthv1widget_param *param() const; + +protected slots: + + // Change slot. + void paramValueChanged(float); + void groupBoxValueChanged(bool); + +private: + + // Widget members. + synthv1widget_param *m_pParam; +}; + + #endif // __synthv1widget_param_h // end of synthv1widget_param.h diff -Nru synthv1-0.8.6/src/synthv1widget_preset.cpp synthv1-0.9.10+git20190929/src/synthv1widget_preset.cpp --- synthv1-0.8.6/src/synthv1widget_preset.cpp 2017-12-20 07:56:50.329842973 +0000 +++ synthv1-0.9.10+git20190929/src/synthv1widget_preset.cpp 2019-09-28 23:00:43.000000000 +0000 @@ -1,7 +1,7 @@ // synthv1widget_preset.cpp // /**************************************************************************** - Copyright (C) 2012-2017, rncbc aka Rui Nuno Capela. All rights reserved. + Copyright (C) 2012-2019, rncbc aka Rui Nuno Capela. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License @@ -52,8 +52,8 @@ m_pOpenButton->setIcon(QIcon(":/images/presetOpen.png")); m_pComboBox->setEditable(true); m_pComboBox->setMinimumWidth(240); -#if QT_VERSION >= 0x040200 - m_pComboBox->setCompleter(NULL); +#if QT_VERSION >= QT_VERSION_CHECK(4, 2, 0) + m_pComboBox->setCompleter(nullptr); #endif m_pComboBox->setInsertPolicy(QComboBox::NoInsert); m_pSaveButton->setIcon(QIcon(":/images/presetSave.png")); @@ -114,10 +114,6 @@ { ++m_iInitPreset; - synthv1_config *pConfig = synthv1_config::getInstance(); - if (pConfig) - pConfig->sPreset.clear(); - const bool bBlockSignals = m_pComboBox->blockSignals(true); m_pComboBox->clearEditText(); m_pComboBox->blockSignals(bBlockSignals); @@ -126,10 +122,6 @@ void synthv1widget_preset::setPreset ( const QString& sPreset ) { - synthv1_config *pConfig = synthv1_config::getInstance(); - if (pConfig) - pConfig->sPreset = sPreset; - const bool bBlockSignals = m_pComboBox->blockSignals(true); m_pComboBox->setEditText(sPreset); m_pComboBox->blockSignals(bBlockSignals); @@ -148,14 +140,14 @@ return true; synthv1_config *pConfig = synthv1_config::getInstance(); - if (pConfig == NULL) + if (pConfig == nullptr) return false; if (m_iDirtyPreset > 0) { - const QString sPreset(pConfig->sPreset); + const QString& sPreset(pConfig->sPreset); if (sPreset.isEmpty()) { if (QMessageBox::warning(this, - tr("Warning") + " - " SYNTHV1_TITLE, + tr("Warning"), tr("Some parameters have been changed.\n\n" "Do you want to discard the changes?"), QMessageBox::Discard | @@ -163,7 +155,7 @@ return false; } else { switch (QMessageBox::warning(this, - tr("Warning") + " - " SYNTHV1_TITLE, + tr("Warning"), tr("Some preset parameters have been changed:\n\n" "\"%1\".\n\nDo you want to save the changes?") .arg(sPreset), @@ -203,8 +195,8 @@ if (pConfig) { emit loadPresetFile(pConfig->presetFile(sPreset)); ++m_iInitPreset; - // pConfig->sPreset = sPreset; - // setPreset(sPreset); + pConfig->sPreset = sPreset; + setPreset(sPreset); refreshPreset(); } @@ -214,8 +206,13 @@ void synthv1widget_preset::newPreset (void) { - if (queryPreset()) { + if (!queryPreset()) + return; + + synthv1_config *pConfig = synthv1_config::getInstance(); + if (pConfig) { emit newPresetFile(); + pConfig->sPreset.clear(); clearPreset(); refreshPreset(); } @@ -227,24 +224,24 @@ void synthv1widget_preset::openPreset (void) { synthv1_config *pConfig = synthv1_config::getInstance(); - if (pConfig == NULL) + if (pConfig == nullptr) return; QStringList files; const QString sExt(SYNTHV1_TITLE); - const QString& sTitle = tr("Open Preset") + " - " SYNTHV1_TITLE; + const QString& sTitle = tr("Open Preset"); const QString& sFilter = tr("Preset files (*.%1)").arg(sExt); - QWidget *pParentWidget = NULL; + QWidget *pParentWidget = nullptr; QFileDialog::Options options = 0; if (pConfig->bDontUseNativeDialogs) { options |= QFileDialog::DontUseNativeDialog; - pParentWidget = parentWidget(); + pParentWidget = QWidget::window(); } -#if 1//QT_VERSION < 0x040400 +#if 1//QT_VERSION < QT_VERSION_CHECK(4, 4, 0) files = QFileDialog::getOpenFileNames(pParentWidget, - sTitle, pConfig->sPresetDir, sFilter, NULL, options); + sTitle, pConfig->sPresetDir, sFilter, nullptr, options); #else QFileDialog fileDialog(pParentWidget, sTitle, pConfig->sPresetDir, sFilter); @@ -271,7 +268,7 @@ if (++iPreset == 1) { ++m_iInitPreset; emit loadPresetFile(sFilename); - // pConfig->sPreset = sPreset; + pConfig->sPreset = sPreset; pConfig->sPresetDir = fi.absolutePath(); setPreset(sPreset); } @@ -295,24 +292,24 @@ return; synthv1_config *pConfig = synthv1_config::getInstance(); - if (pConfig == NULL) + if (pConfig == nullptr) return; const QString sExt(SYNTHV1_TITLE); QFileInfo fi(QDir(pConfig->sPresetDir), sPreset + '.' + sExt); QString sFilename = fi.absoluteFilePath(); if (!fi.exists()) { - const QString& sTitle = tr("Save Preset") + " - " SYNTHV1_TITLE; + const QString& sTitle = tr("Save Preset"); const QString& sFilter = tr("Preset files (*.%1)").arg(sExt); - QWidget *pParentWidget = NULL; + QWidget *pParentWidget = nullptr; QFileDialog::Options options = 0; if (pConfig->bDontUseNativeDialogs) { options |= QFileDialog::DontUseNativeDialog; - pParentWidget = parentWidget(); + pParentWidget = QWidget::window(); } - #if 1//QT_VERSION < 0x040400 + #if 1//QT_VERSION < QT_VERSION_CHECK(4, 4, 0) sFilename = QFileDialog::getSaveFileName(pParentWidget, - sTitle, sFilename, sFilter, NULL, options); + sTitle, sFilename, sFilter, nullptr, options); #else QFileDialog fileDialog(pParentWidget, sTitle, sFilename, sFilter); @@ -327,8 +324,8 @@ sFilename = fileDialog.selectedFiles().first(); #endif } else { - if (QMessageBox::warning(parentWidget(), - tr("Warning") + " - " SYNTHV1_TITLE, + if (QMessageBox::warning(QWidget::window(), + tr("Warning"), tr("About to replace preset:\n\n" "\"%1\"\n\n" "Are you sure?") @@ -361,11 +358,10 @@ return; synthv1_config *pConfig = synthv1_config::getInstance(); - if (pConfig == NULL) + if (pConfig == nullptr) return; - - if (QMessageBox::warning(parentWidget(), - tr("Warning") + " - " SYNTHV1_TITLE, + if (QMessageBox::warning(QWidget::window(), + tr("Warning"), tr("About to remove preset:\n\n" "\"%1\"\n\n" "Are you sure?") @@ -375,6 +371,7 @@ return; pConfig->removePreset(sPreset); + pConfig->sPreset.clear(); clearPreset(); refreshPreset(); diff -Nru synthv1-0.8.6/src/synthv1widget_preset.h synthv1-0.9.10+git20190929/src/synthv1widget_preset.h --- synthv1-0.8.6/src/synthv1widget_preset.h 2017-12-20 07:56:50.329842973 +0000 +++ synthv1-0.9.10+git20190929/src/synthv1widget_preset.h 2019-09-28 23:00:43.000000000 +0000 @@ -1,7 +1,7 @@ // synthv1widget_preset.h // /**************************************************************************** - Copyright (C) 2012-2017, rncbc aka Rui Nuno Capela. All rights reserved. + Copyright (C) 2012-2019, rncbc aka Rui Nuno Capela. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License diff -Nru synthv1-0.8.6/src/synthv1widget_programs.cpp synthv1-0.9.10+git20190929/src/synthv1widget_programs.cpp --- synthv1-0.8.6/src/synthv1widget_programs.cpp 2017-12-20 07:56:50.329842973 +0000 +++ synthv1-0.9.10+git20190929/src/synthv1widget_programs.cpp 2019-09-28 23:00:43.000000000 +0000 @@ -1,7 +1,7 @@ // synthv1widget_programs.cpp // /**************************************************************************** - Copyright (C) 2012-2015, rncbc aka Rui Nuno Capela. All rights reserved. + Copyright (C) 2012-2019, rncbc aka Rui Nuno Capela. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License @@ -24,35 +24,63 @@ #include "synthv1_programs.h" #include "synthv1_config.h" +#include #include - #include #include #include //---------------------------------------------------------------------------- +// synthv1widget_programs::ItemDelegate -- Custom (tree) list item delegate. + +class synthv1widget_programs::ItemDelegate : public QItemDelegate +{ +public: + + // ctor. + ItemDelegate(QObject *pParent = 0); + + // QItemDelegate interface... + QSize sizeHint( + const QStyleOptionViewItem& option, + const QModelIndex& index) const; + + QWidget *createEditor(QWidget *pParent, + const QStyleOptionViewItem& option, + const QModelIndex& index) const; + + void setEditorData(QWidget *pEditor, + const QModelIndex& index) const; + + void setModelData(QWidget *pEditor, + QAbstractItemModel *pModel, + const QModelIndex& index) const; +}; + + +//---------------------------------------------------------------------------- // synthv1widget_programs_item_delegate -- Custom (tree) list item delegate. // ctor. -synthv1widget_programs_item_delegate::synthv1widget_programs_item_delegate ( - QObject *pParent ) : QItemDelegate(pParent) +synthv1widget_programs::ItemDelegate::ItemDelegate ( QObject *pParent ) + : QItemDelegate(pParent) { } // QItemDelegate interface... -QSize synthv1widget_programs_item_delegate::sizeHint ( +QSize synthv1widget_programs::ItemDelegate::sizeHint ( const QStyleOptionViewItem& option, const QModelIndex& index ) const { return QItemDelegate::sizeHint(option, index) + QSize(4, 4); } -QWidget *synthv1widget_programs_item_delegate::createEditor ( QWidget *pParent, +QWidget *synthv1widget_programs::ItemDelegate::createEditor ( QWidget *pParent, const QStyleOptionViewItem& /*option*/, const QModelIndex& index ) const { - QWidget *pEditor = NULL; + QWidget *pEditor = nullptr; switch (index.column()) { case 0: // Data. @@ -88,7 +116,7 @@ } #ifdef CONFIG_DEBUG_0 - qDebug("synthv1widget_programs_item_delegate::createEditor(%p, %d, %d) = %p", + qDebug("synthv1widget_programs::ItemDelegate::createEditor(%p, %d, %d) = %p", pParent, index.row(), index.column(), pEditor); #endif @@ -96,11 +124,11 @@ } -void synthv1widget_programs_item_delegate::setEditorData ( +void synthv1widget_programs::ItemDelegate::setEditorData ( QWidget *pEditor, const QModelIndex& index ) const { #ifdef CONFIG_DEBUG_0 - qDebug("synthv1widget_programs_item_delegate::setEditorData(%p, %d, %d)", + qDebug("synthv1widget_programs::ItemDelegate::setEditorData(%p, %d, %d)", pEditor, index.row(), index.column()); #endif @@ -137,11 +165,11 @@ } -void synthv1widget_programs_item_delegate::setModelData ( QWidget *pEditor, +void synthv1widget_programs::ItemDelegate::setModelData ( QWidget *pEditor, QAbstractItemModel *pModel, const QModelIndex& index ) const { #ifdef CONFIG_DEBUG_0 - qDebug("synthv1widget_programs_item_delegate::setModelData(%p, %d, %d)", + qDebug("synthv1widget_programs::ItemDelegate::setModelData(%p, %d, %d)", pEditor, index.row(), index.column()); #endif @@ -203,14 +231,14 @@ QTreeWidget::setSelectionMode(QAbstractItemView::SingleSelection); QHeaderView *pHeaderView = QTreeWidget::header(); -#if QT_VERSION < 0x050000 +#if QT_VERSION < QT_VERSION_CHECK(5, 0, 0) pHeaderView->setResizeMode(QHeaderView::ResizeToContents); #else pHeaderView->setSectionResizeMode(QHeaderView::ResizeToContents); #endif pHeaderView->hide(); - QTreeWidget::setItemDelegate(new synthv1widget_programs_item_delegate(this)); + QTreeWidget::setItemDelegate(new ItemDelegate(this)); QObject::connect(this, SIGNAL(itemChanged(QTreeWidgetItem *, int)), @@ -237,7 +265,7 @@ QTreeWidget::clear(); QList items; - QTreeWidgetItem *pCurrentItem = NULL; + QTreeWidgetItem *pCurrentItem = nullptr; const synthv1_programs::Banks& banks = pPrograms->banks(); synthv1_programs::Banks::ConstIterator bank_iter = banks.constBegin(); const synthv1_programs::Banks::ConstIterator& bank_end = banks.constEnd(); @@ -342,8 +370,8 @@ QTreeWidgetItem *synthv1widget_programs::newBankItem (void) { QTreeWidgetItem *pItem = QTreeWidget::currentItem(); - QTreeWidgetItem *pBankItem = (pItem ? pItem->parent() : NULL); - if (pBankItem == NULL) + QTreeWidgetItem *pBankItem = (pItem ? pItem->parent() : nullptr); + if (pBankItem == nullptr) pBankItem = pItem; int iBank = 0; @@ -362,7 +390,7 @@ if (iBankData < pBankItem->data(0, Qt::UserRole).toInt()) break; if (++iBankData > 16383) - return NULL; + return nullptr; } pBankItem = new QTreeWidgetItem(QStringList() @@ -379,18 +407,18 @@ QTreeWidgetItem *synthv1widget_programs::newProgramItem (void) { QTreeWidgetItem *pItem = QTreeWidget::currentItem(); - QTreeWidgetItem *pBankItem = (pItem ? pItem->parent() : NULL); - QTreeWidgetItem *pProgItem = NULL; - if (pBankItem == NULL) + QTreeWidgetItem *pBankItem = (pItem ? pItem->parent() : nullptr); + QTreeWidgetItem *pProgItem = nullptr; + if (pBankItem == nullptr) pBankItem = pItem; else pProgItem = pItem; - if (pBankItem == NULL) + if (pBankItem == nullptr) pBankItem = QTreeWidget::topLevelItem(0); - if (pBankItem == NULL) + if (pBankItem == nullptr) pBankItem = newBankItem(); - if (pBankItem == NULL) - return NULL; + if (pBankItem == nullptr) + return nullptr; const int iBankData = pBankItem->data(0, Qt::UserRole).toInt(); @@ -411,7 +439,7 @@ if (iProgData < pProgItem->data(0, Qt::UserRole).toInt()) break; if (++iProgData > 127) - return NULL; + return nullptr; } pProgItem = new QTreeWidgetItem(QStringList() @@ -484,14 +512,14 @@ void synthv1widget_programs::itemExpandedSlot ( QTreeWidgetItem *pItem ) { - if (pItem->parent() == NULL) + if (pItem->parent() == nullptr) pItem->setIcon(0, QIcon(":/images/presetBankOpen.png")); } void synthv1widget_programs::itemCollapsedSlot ( QTreeWidgetItem *pItem ) { - if (pItem->parent() == NULL) + if (pItem->parent() == nullptr) pItem->setIcon(0, QIcon(":/images/presetBank.png")); } diff -Nru synthv1-0.8.6/src/synthv1widget_programs.h synthv1-0.9.10+git20190929/src/synthv1widget_programs.h --- synthv1-0.8.6/src/synthv1widget_programs.h 2017-12-20 07:56:50.329842973 +0000 +++ synthv1-0.9.10+git20190929/src/synthv1widget_programs.h 2019-09-28 23:00:43.000000000 +0000 @@ -1,7 +1,7 @@ // synthv1widget_programs.h // /**************************************************************************** - Copyright (C) 2012-2015, rncbc aka Rui Nuno Capela. All rights reserved. + Copyright (C) 2012-2019, rncbc aka Rui Nuno Capela. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License @@ -22,7 +22,6 @@ #ifndef __synthv1widget_programs_h #define __synthv1widget_programs_h -#include #include @@ -31,37 +30,6 @@ //---------------------------------------------------------------------------- -// synthv1widget_programs_item_delegate -- Custom (tree) list item delegate. - -class synthv1widget_programs_item_delegate : public QItemDelegate -{ - Q_OBJECT - -public: - - // ctor. - synthv1widget_programs_item_delegate(QObject *pParent = 0); - - // QItemDelegate interface... - QSize sizeHint( - const QStyleOptionViewItem& option, - const QModelIndex& index) const; - - QWidget *createEditor(QWidget *pParent, - const QStyleOptionViewItem& option, - const QModelIndex& index) const; - - void setEditorData(QWidget *pEditor, - const QModelIndex& index) const; - - void setModelData(QWidget *pEditor, - QAbstractItemModel *pModel, - const QModelIndex& index) const; -}; - - - -//---------------------------------------------------------------------------- // synthv1widget_programs -- Custom (tree) widget. class synthv1widget_programs : public QTreeWidget @@ -97,6 +65,9 @@ protected: + // item delegate decl.. + class ItemDelegate; + // factory methods. QTreeWidgetItem *newBankItem(); QTreeWidgetItem *newProgramItem(); diff -Nru synthv1-0.8.6/src/synthv1widget_status.cpp synthv1-0.9.10+git20190929/src/synthv1widget_status.cpp --- synthv1-0.8.6/src/synthv1widget_status.cpp 2017-12-20 07:56:50.329842973 +0000 +++ synthv1-0.9.10+git20190929/src/synthv1widget_status.cpp 2019-09-28 23:00:43.000000000 +0000 @@ -1,7 +1,7 @@ // synthv1widget_status.cpp // /**************************************************************************** - Copyright (C) 2012-2017, rncbc aka Rui Nuno Capela. All rights reserved. + Copyright (C) 2012-2019, rncbc aka Rui Nuno Capela. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License @@ -21,11 +21,17 @@ #include "synthv1widget_status.h" +#include "synthv1widget_keybd.h" + #include #include #include #include +#if QT_VERSION < QT_VERSION_CHECK(5, 11, 0) +#define horizontalAdvance width +#endif + //------------------------------------------------------------------------- // synthv1widget_status - Custom status-bar widget. @@ -73,10 +79,14 @@ pMidiInWidget->setLayout(pMidiInLayout); QStatusBar::addWidget(pMidiInWidget); + m_pKeybd = new synthv1widget_keybd(); + m_pKeybd->setMinimumWidth(760); + QStatusBar::addPermanentWidget(m_pKeybd); + const QFontMetrics fm(QStatusBar::font()); m_pModifiedLabel = new QLabel(); m_pModifiedLabel->setAlignment(Qt::AlignHCenter); - m_pModifiedLabel->setMinimumSize(QSize(fm.width("MOD") + 4, fm.height())); + m_pModifiedLabel->setMinimumSize(QSize(fm.horizontalAdvance("MOD") + 4, fm.height())); m_pModifiedLabel->setToolTip(tr("Modification status")); m_pModifiedLabel->setAutoFillBackground(true); QStatusBar::addPermanentWidget(m_pModifiedLabel); @@ -92,12 +102,27 @@ // Permanent widgets accessors. +synthv1widget_keybd *synthv1widget_status::keybd (void) const +{ + return m_pKeybd; +} + + void synthv1widget_status::midiInLed ( bool bMidiInLed ) { m_pMidiInLedLabel->setPixmap(*m_midiInLed[bMidiInLed ? 1 : 0]); } +void synthv1widget_status::midiInNote ( int iNote, int iVelocity ) +{ + if (iVelocity > 0) + m_pKeybd->noteOn(iNote); + else + m_pKeybd->noteOff(iNote); +} + + void synthv1widget_status::modified ( bool bModified ) { if (bModified) diff -Nru synthv1-0.8.6/src/synthv1widget_status.h synthv1-0.9.10+git20190929/src/synthv1widget_status.h --- synthv1-0.8.6/src/synthv1widget_status.h 2017-12-20 07:56:50.329842973 +0000 +++ synthv1-0.9.10+git20190929/src/synthv1widget_status.h 2019-09-28 23:00:43.000000000 +0000 @@ -1,7 +1,7 @@ // synthv1widget_status.h // /**************************************************************************** - Copyright (C) 2012-2017, rncbc aka Rui Nuno Capela. All rights reserved. + Copyright (C) 2012-2019, rncbc aka Rui Nuno Capela. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License @@ -26,6 +26,8 @@ // Forward declarations. +class synthv1widget_keybd; + class QLabel; class QPixmap; @@ -46,7 +48,10 @@ ~synthv1widget_status(); // Permanent widgets accessors. + synthv1widget_keybd *keybd() const; + void midiInLed(bool bMidiInLed); + void midiInNote(int iNote, int iVelocity); void modified(bool bModified); private: @@ -56,6 +61,8 @@ QLabel *m_pMidiInLedLabel; QLabel *m_pModifiedLabel; + + synthv1widget_keybd *m_pKeybd; }; diff -Nru synthv1-0.8.6/src/synthv1widget.ui synthv1-0.9.10+git20190929/src/synthv1widget.ui --- synthv1-0.8.6/src/synthv1widget.ui 2017-12-20 07:56:50.325842973 +0000 +++ synthv1-0.9.10+git20190929/src/synthv1widget.ui 2019-09-28 23:00:43.000000000 +0000 @@ -3,7 +3,7 @@ rncbc aka Rui Nuno Capela synthv1 - An old-school polyphonic synthesizer - Copyright (C) 2012-2017, rncbc aka Rui Nuno Capela. All rights reserved. + Copyright (C) 2012-2019, rncbc aka Rui Nuno Capela. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License @@ -22,9 +22,6 @@ synthv1widget - - synthv1 - :/images/synthv1.png @@ -41,6 +38,16 @@
    + + + Randomize + + + Random + + + + Swap A @@ -68,6 +75,9 @@ + + QTabBar::RoundedNorth + @@ -183,7 +193,7 @@
    - + @@ -260,7 +270,7 @@ - + @@ -424,10 +434,16 @@ - + + + DCF1 Enabled + DCF1 + + true + @@ -545,10 +561,16 @@ - + + + LFO1 Enabled + LFO1 + + true + @@ -1095,7 +1117,7 @@ - + @@ -1172,7 +1194,7 @@ - + @@ -1336,10 +1358,16 @@ - + + + DCF2 Enabled + DCF2 + + true + @@ -1457,10 +1485,16 @@ - + + + LFO2 Enabled + LFO2 + + true + @@ -1902,7 +1936,7 @@ OUT2 FX Send - FX + Effects @@ -2422,6 +2456,11 @@
    synthv1widget_param.h
    + synthv1widget_group + QGroupBox +
    synthv1widget_param.h
    +
    + synthv1widget_env QFrame
    synthv1widget_env.h
    diff -Nru synthv1-0.8.6/synthv1_lv2.pro synthv1-0.9.10+git20190929/synthv1_lv2.pro --- synthv1-0.8.6/synthv1_lv2.pro 2017-12-20 07:56:50.330842973 +0000 +++ synthv1-0.9.10+git20190929/synthv1_lv2.pro 2019-09-28 23:05:55.000000000 +0000 @@ -1,8 +1,6 @@ # synthv1_lv2.pro # TEMPLATE = subdirs -SUBDIRS = src_lv2 src_lv2ui +SUBDIRS = src_lv2 src_lv2.file = src/src_lv2.pro -src_lv2ui.file = src/src_lv2ui.pro -src_lv2ui.depends = src_lv2 diff -Nru synthv1-0.8.6/synthv1.spec.in synthv1-0.9.10+git20190929/synthv1.spec.in --- synthv1-0.8.6/synthv1.spec.in 2017-12-20 07:56:50.330842973 +0000 +++ synthv1-0.9.10+git20190929/synthv1.spec.in 2019-09-28 23:05:55.000000000 +0000 @@ -1,6 +1,6 @@ %define name @PACKAGE_TARNAME@ %define version @PACKAGE_VERSION@ -%define release 36 +%define release 47 %define _prefix @ac_prefix@ @@ -8,7 +8,7 @@ %define debug_package %{nil} %endif -Summary: An old-school polyphonic synthesizer +#Summary: An old-school polyphonic subtractive synthesizer Name: %{name} Version: %{version} Release: %{release} @@ -20,23 +20,41 @@ BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-buildroot -#BuildRequires: libqt4-devel >= 4.4 %if %{defined fedora} BuildRequires: pkgconfig -BuildRequires: qt5-qtbase-devel >= 5.1, qt5-linguist BuildRequires: alsa-lib-devel %else BuildRequires: pkg-config -BuildRequires: libqt5-qtbase-devel >= 5.1, libqt5-linguist BuildRequires: alsa-devel %endif -BuildRequires: libjack-devel >= 0.100.0 +BuildRequires: qtbase-static >= 5.13.1 +BuildRequires: libjack-devel BuildRequires: liblo-devel BuildRequires: lv2-devel -%description - An old-school all-digital 4-oscillator subtractive polyphonic - synthesizer with stereo fx. +#package -n %{name} +Summary: An old-school polyphonic subtractive synthesizer - JACK standalone +Provides: %{name}_jack +Requires: %{name}-common = %{version} + +%description -n %{name} + An old-school all-digital 4-oscillator subtractive polyphonic synthesizer + with stereo fx. + . + This package provides the standalone JACK client application (synthv1_jack) + + +%package -n %{name}-lv2 +Summary: An old-school polyphonic subtractive synthesizer - LV2 plugin +Provides: %{name}_lv2, %{name}_lv2ui +Requires: %{name}-common = %{version} + +%description -n %{name}-lv2 + An old-school all-digital 4-oscillator subtractive polyphonic synthesizer + with stereo fx. + . + This package provides the LV2 plugin (http://synthv1.sourceforge.net/lv2) + %prep %setup @@ -52,28 +70,14 @@ %clean [ -d "%{buildroot}" -a "%{buildroot}" != "/" ] && %__rm -rf "%{buildroot}" -%post -/sbin/ldconfig - -%postun -/sbin/ldconfig -%files +%files -n %{name} %defattr(-,root,root) %doc AUTHORS COPYING ChangeLog README TODO -%{_libdir}/lib%{name}.so* -%{_libdir}/lib%{name}_ui.so* -%dir %{_libdir}/lv2 -%dir %{_libdir}/lv2/%{name}.lv2 -%{_libdir}/lv2/%{name}.lv2/manifest.ttl -%{_libdir}/lv2/%{name}.lv2/%{name}.ttl -%{_libdir}/lv2/%{name}.lv2/%{name}.so -%{_libdir}/lv2/%{name}.lv2/%{name}_ui.ttl -%{_libdir}/lv2/%{name}.lv2/%{name}_ui.so +#dir %{_datadir}/applications %dir %{_datadir}/metainfo #dir %{_datadir}/mime #dir %{_datadir}/mime/packages -#dir %{_datadir}/applications %dir %{_datadir}/icons/hicolor %dir %{_datadir}/icons/hicolor/32x32 %dir %{_datadir}/icons/hicolor/32x32/apps @@ -85,17 +89,47 @@ #dir %{_datadir}/man/man1 %{_bindir}/%{name}_jack %{_datadir}/metainfo/%{name}.appdata.xml -%{_datadir}/mime/packages/%{name}.xml %{_datadir}/applications/%{name}.desktop +%{_datadir}/mime/packages/%{name}.xml %{_datadir}/icons/hicolor/32x32/apps/%{name}.png %{_datadir}/icons/hicolor/32x32/mimetypes/application-x-%{name}*.png %{_datadir}/icons/hicolor/scalable/apps/%{name}.svg %{_datadir}/icons/hicolor/scalable/mimetypes/application-x-%{name}*.svg %{_datadir}/man/man1/%{name}*.1.gz +%files -n %{name}-lv2 +%defattr(-,root,root) +%dir %{_libdir}/lv2 +%dir %{_libdir}/lv2/%{name}.lv2 +%{_libdir}/lv2/%{name}.lv2/manifest.ttl +%{_libdir}/lv2/%{name}.lv2/%{name}.ttl +%{_libdir}/lv2/%{name}.lv2/%{name}.so +%{_libdir}/lv2/%{name}.lv2/%{name}_ui.ttl + + %changelog -* Wed Dec 20 2017 Rui Nuno Capela 0.8.6 -- The End of Autumn'17 release. +* Tue Sep 24 2019 Rui Nuno Capela 0.9.10 +- An Early-Fall'19 release. +* Thu Jul 18 2019 Rui Nuno Capela 0.9.9 +- A Summer'19 release. +* Thu Jun 6 2019 Rui Nuno Capela 0.9.8 +- A Spring'19 release. +* Sun Apr 14 2019 Rui Nuno Capela 0.9.7 +- A Spring-Break'19 release. +* Mon Mar 18 2019 Rui Nuno Capela 0.9.6 +- Pre-LAC2019 release frenzy. +* Mon Mar 4 2019 Rui Nuno Capela 0.9.5 +- The End of Winter'19 release. +* Wed Dec 12 2018 Rui Nuno Capela 0.9.4 +- A Late Autumn'18 release. +* Mon Oct 22 2018 Rui Nuno Capela 0.9.3 +- An Autumn'18 release. +* Tue Jul 24 2018 Rui Nuno Capela 0.9.2 +- A Summer'18 release. +* Tue Jun 26 2018 Rui Nuno Capela 0.9.1 +- An Early Summer'18 release. +* Wed Mar 7 2018 Rui Nuno Capela 0.9.0 +- The End of Winter'18 release. * Sun Oct 29 2017 Rui Nuno Capela 0.8.5 - An Autumn'17 release. * Tue Aug 22 2017 Rui Nuno Capela 0.8.4 diff -Nru synthv1-0.8.6/.travis.yml synthv1-0.9.10+git20190929/.travis.yml --- synthv1-0.8.6/.travis.yml 1970-01-01 00:00:00.000000000 +0000 +++ synthv1-0.9.10+git20190929/.travis.yml 2019-09-28 23:00:43.000000000 +0000 @@ -0,0 +1,33 @@ +language: cpp + +sudo: required +dist: xenial + +notifications: + email: + recipients: + - rncbc@rncbc.org + on_success: change + on_failure: always + +branches: + only: + - master + +before_install: +- sudo add-apt-repository --yes ppa:ubuntu-sdk-team/ppa +- sudo add-apt-repository --yes ppa:beineri/opt-qt-5.12.3-xenial +- sudo apt-get update -qq + +install: +- sudo apt-get install -qq qt512base qt512tools libgl-dev; source /opt/qt512/bin/qt512-env.sh +- sudo apt-get install -qq libjack-dev libasound2-dev liblo-dev lv2-dev + +before_script: +- git fetch --unshallow --tags -q +- ./autogen.sh + +script: +- ./configure +- make +- sudo make install