From 86763cba906dba3fdbc0c99a42a3f7123eaa380d Mon Sep 17 00:00:00 2001 From: Robin Gareus Date: Sun, 26 Jun 2016 16:43:07 +0200 Subject: [PATCH] Enable build for FreeBSD (part 1/2) Adopted from Michael Beer -- GH pull-request #232 with minor changes: * rebased on master, * removed trailing whitespace, * don't explicitly change saved configuration defaults (wscript) * moved sys/wait (WNOHANG) to header include * separate changes in GUI and lib --- libs/ardour/route_group.cc | 1 + libs/ardour/session.cc | 2 +- libs/ardour/session_state.cc | 4 ++-- libs/midi++2/midi++/ipmidi_port.h | 2 +- libs/pbd/cpus.cc | 6 +++++- libs/pbd/pbd/floating.h | 1 + libs/pbd/pbd/system_exec.h | 3 +++ libs/ptformat/ptfformat.cc | 1 + tools/gccabicheck/wscript | 5 ++++- wscript | 8 +++++++- 10 files changed, 26 insertions(+), 7 deletions(-) diff --git a/libs/ardour/route_group.cc b/libs/ardour/route_group.cc index f258e9f14d..91303af07e 100644 --- a/libs/ardour/route_group.cc +++ b/libs/ardour/route_group.cc @@ -32,6 +32,7 @@ #include "ardour/route.h" #include "ardour/route_group.h" #include "ardour/session.h" +#include "ardour/debug.h" #include "i18n.h" diff --git a/libs/ardour/session.cc b/libs/ardour/session.cc index 0005584403..6ef78eacb6 100644 --- a/libs/ardour/session.cc +++ b/libs/ardour/session.cc @@ -3459,7 +3459,7 @@ Session::add_routes_inner (RouteList& new_routes, bool input_auto_connect, bool } } -#ifndef __APPLE__ +#if !defined(__APPLE__) && !defined(__FreeBSD__) /* clang complains: 'operator<<' should be declared prior to the call site or in an associated namespace of one of its * arguments std::ostream& operator<<(std::ostream& o, ARDOUR::PresentationInfo const& rid)" */ diff --git a/libs/ardour/session_state.cc b/libs/ardour/session_state.cc index a9d7828d8b..0075799a16 100644 --- a/libs/ardour/session_state.cc +++ b/libs/ardour/session_state.cc @@ -39,7 +39,7 @@ #include #endif -#ifdef __APPLE__ +#if defined(__APPLE__) || defined(__FreeBSD__) #include #include #endif @@ -2262,7 +2262,7 @@ Session::save_template (string template_name, bool replace_existing) void Session::refresh_disk_space () { -#if __APPLE__ || (HAVE_SYS_VFS_H && HAVE_SYS_STATVFS_H) +#if __APPLE__ || __FreeBSD__ || (HAVE_SYS_VFS_H && HAVE_SYS_STATVFS_H) Glib::Threads::Mutex::Lock lm (space_lock); diff --git a/libs/midi++2/midi++/ipmidi_port.h b/libs/midi++2/midi++/ipmidi_port.h index 313208892f..d870c79ef0 100644 --- a/libs/midi++2/midi++/ipmidi_port.h +++ b/libs/midi++2/midi++/ipmidi_port.h @@ -23,7 +23,7 @@ #include #if defined(PLATFORM_WINDOWS) #include -#elif defined(__FREE_BSD__) +#elif defined(__FreeBSD__) #include #include #include diff --git a/libs/pbd/cpus.cc b/libs/pbd/cpus.cc index fb94b475de..69421e5e92 100644 --- a/libs/pbd/cpus.cc +++ b/libs/pbd/cpus.cc @@ -43,10 +43,14 @@ hardware_concurrency() { #if defined(PTW32_VERSION) || defined(__hpux) return pthread_num_processors_np(); -#elif defined(__APPLE__) || defined(__FreeBSD__) +#elif defined(__APPLE__) int count; size_t size=sizeof(count); return sysctlbyname("hw.physicalcpu",&count,&size,NULL,0)?0:count; +#elif defined(__FreeBSD__) + int count; + size_t size=sizeof(count); + return sysctlbyname("hw.ncpu",&count,&size,NULL,0)?0:count; #elif defined(HAVE_UNISTD) && defined(_SC_NPROCESSORS_ONLN) int const count=sysconf(_SC_NPROCESSORS_ONLN); return (count>0)?count:0; diff --git a/libs/pbd/pbd/floating.h b/libs/pbd/pbd/floating.h index 86ab4a68f0..d7d6349a34 100644 --- a/libs/pbd/pbd/floating.h +++ b/libs/pbd/pbd/floating.h @@ -28,6 +28,7 @@ #include +#include // abs(int) #include #include "pbd/libpbd_visibility.h" diff --git a/libs/pbd/pbd/system_exec.h b/libs/pbd/pbd/system_exec.h index d5b14c8273..a8a30ba18d 100644 --- a/libs/pbd/pbd/system_exec.h +++ b/libs/pbd/pbd/system_exec.h @@ -37,6 +37,9 @@ #undef interface // VKamyshniy: to avoid "include/giomm-2.4/giomm/dbusmessage.h:270:94: error: expected ',' or '...' before 'struct'" #endif +#else // posix +#include +#include /* WNOHANG is part of the exposed API */ #endif #include diff --git a/libs/ptformat/ptfformat.cc b/libs/ptformat/ptfformat.cc index caf2c2f42a..3d66ec025e 100644 --- a/libs/ptformat/ptfformat.cc +++ b/libs/ptformat/ptfformat.cc @@ -15,6 +15,7 @@ */ #include +#include #include #include #include diff --git a/tools/gccabicheck/wscript b/tools/gccabicheck/wscript index ecef5c6aa7..afdb99f506 100644 --- a/tools/gccabicheck/wscript +++ b/tools/gccabicheck/wscript @@ -2,6 +2,8 @@ from waflib.extras import autowaf as autowaf from waflib import Options import os +import re +import sys # Mandatory variables top = '.' @@ -19,5 +21,6 @@ def build(bld): obj.source = [ 'abicheck.c' ] obj.target = 'gcc-glibmm-abi-check' obj.name = 'gcc-glibmm-abi-check' - obj.lib = 'dl' + if re.search ("freebsd", sys.platform) == None: + obj.lib = 'dl' obj.install_path = None diff --git a/wscript b/wscript index 352c9cda2c..f23a987b3c 100644 --- a/wscript +++ b/wscript @@ -568,6 +568,9 @@ int main() { return 0; }''', if opt.stl_debug: cxx_flags.append("-D_GLIBCXX_DEBUG") + if re.search ("freebsd", sys.platform) != None: + linker_flags.append('-lexecinfo') + if conf.env['DEBUG_RT_ALLOC']: compiler_flags.append('-DDEBUG_RT_ALLOC') linker_flags.append('-ldl') @@ -940,7 +943,10 @@ def configure(conf): # executing a test program is n/a when cross-compiling if Options.options.dist_target != 'mingw': if Options.options.dist_target != 'msvc': - conf.check_cc(function_name='dlopen', header_name='dlfcn.h', lib='dl', uselib_store='DL') + if re.search ("freebsd", sys.platform) != None: + conf.check_cc(function_name='dlopen', header_name='dlfcn.h', uselib_store='DL') + else: + conf.check_cc(function_name='dlopen', header_name='dlfcn.h', lib='dl', uselib_store='DL') conf.check_cxx(fragment = "#include \nint main(void) { return (BOOST_VERSION >= 103900 ? 0 : 1); }\n", execute = "1", mandatory = True,