diff --git a/recipes/ohpipeline/all/conandata.yml b/recipes/ohpipeline/cmake/conandata.yml
similarity index 100%
rename from recipes/ohpipeline/all/conandata.yml
rename to recipes/ohpipeline/cmake/conandata.yml
diff --git a/recipes/ohpipeline/all/conanfile.py b/recipes/ohpipeline/cmake/conanfile.py
similarity index 100%
rename from recipes/ohpipeline/all/conanfile.py
rename to recipes/ohpipeline/cmake/conanfile.py
diff --git a/recipes/ohpipeline/all/patches/001-missing-include.patch b/recipes/ohpipeline/cmake/patches/001-missing-include.patch
similarity index 100%
rename from recipes/ohpipeline/all/patches/001-missing-include.patch
rename to recipes/ohpipeline/cmake/patches/001-missing-include.patch
diff --git a/recipes/ohpipeline/all/test_package/CMakeLists.txt b/recipes/ohpipeline/cmake/test_package/CMakeLists.txt
similarity index 100%
rename from recipes/ohpipeline/all/test_package/CMakeLists.txt
rename to recipes/ohpipeline/cmake/test_package/CMakeLists.txt
diff --git a/recipes/ohpipeline/all/test_package/conanfile.py b/recipes/ohpipeline/cmake/test_package/conanfile.py
similarity index 100%
rename from recipes/ohpipeline/all/test_package/conanfile.py
rename to recipes/ohpipeline/cmake/test_package/conanfile.py
diff --git a/recipes/ohpipeline/all/test_package/test_package.cpp b/recipes/ohpipeline/cmake/test_package/test_package.cpp
similarity index 100%
rename from recipes/ohpipeline/all/test_package/test_package.cpp
rename to recipes/ohpipeline/cmake/test_package/test_package.cpp
diff --git a/recipes/ohpipeline/config.yml b/recipes/ohpipeline/config.yml
index 4948dbd895802..aee1740661ccb 100644
--- a/recipes/ohpipeline/config.yml
+++ b/recipes/ohpipeline/config.yml
@@ -1,3 +1,5 @@
versions:
"1.139.1000":
- folder: all
+ folder: cmake
+ "1.155.1133":
+ folder: waf
diff --git a/recipes/ohpipeline/waf/conandata.yml b/recipes/ohpipeline/waf/conandata.yml
new file mode 100644
index 0000000000000..dee95e7b522db
--- /dev/null
+++ b/recipes/ohpipeline/waf/conandata.yml
@@ -0,0 +1,22 @@
+sources:
+ "1.155.1133":
+ source:
+ url: "https://github.com/openhome/ohPipeline/archive/refs/tags/ohMediaPlayer_1.155.1133.tar.gz"
+ sha256: "507bdf70fc6b9bf8e4605546a5c7ae99abbe537cce4b74b3e091764323939fae"
+ helpers:
+ url: "https://github.com/openhome/ohWafHelpers/archive/refs/tags/ohWafHelpers_0.2.127.tar.gz"
+ sha256: "4d2365622eb6ccf883a14c1c02687d7f0560e0bbac31cbf48382b3e1c8ae6b60"
+patches:
+ "1.155.1133":
+ - patch_file: "patches/0001-disable-raat.patch"
+ patch_type: "build"
+ patch_description: "Disable proprietary SDK"
+ - patch_file: "patches/0002-remove-msvs.patch"
+ patch_type: "build"
+ patch_description: "Remove msvs"
+ - patch_file: "patches/0003-fix-ohwafhelpers.patch"
+ patch_type: "build"
+ patch_description: "Fix ohWafHelpers"
+ - patch_file: "patches/0004-link-to-atomic.patch"
+ patch_type: "build"
+ patch_description: "Link to atomic"
diff --git a/recipes/ohpipeline/waf/conanfile.py b/recipes/ohpipeline/waf/conanfile.py
new file mode 100755
index 0000000000000..080bddf92ed68
--- /dev/null
+++ b/recipes/ohpipeline/waf/conanfile.py
@@ -0,0 +1,129 @@
+from conan import ConanFile
+from conan.tools.build import check_min_cppstd
+from conan.tools.env import VirtualBuildEnv
+from conan.tools.files import chdir, copy, get, export_conandata_patches, apply_conandata_patches, rm, unzip
+from conan.tools.layout import basic_layout
+from conan.tools.scm import Version
+from conan.errors import ConanInvalidConfiguration
+import os
+
+required_conan_version = ">=1.53.0"
+
+
+class OhPipelineConan(ConanFile):
+ name = "ohpipeline"
+ description = "OpenHome audio pipeline"
+ license = "MIT"
+ url = "https://github.com/conan-io/conan-center-index"
+ homepage = "https://github.com/openhome/ohPipeline"
+ topics = ("openhome", "ohnet", "ohpipeline", "upnp")
+
+ package_type = "static-library"
+ settings = "os", "arch", "compiler", "build_type"
+ options = {
+ "fPIC": [True, False],
+ }
+ default_options = {
+ "fPIC": True,
+ }
+
+ @property
+ def _min_cppstd(self):
+ return 11
+
+ @property
+ def _compilers_minimum_version(self):
+ return {
+ "gcc": "7",
+ }
+
+ def config_options(self):
+ if self.settings.os == "Windows":
+ del self.options.fPIC
+
+ def export_sources(self):
+ export_conandata_patches(self)
+
+ def build_requirements(self):
+ self.tool_requires("waf/[>=2.0.19]")
+ self.tool_requires("cpython/[>=3.0.0]")
+
+ def requirements(self):
+ self.requires("ohnet/[>=1.36.5182]", transitive_headers=True, transitive_libs=True)
+ self.requires("openssl/[>=1.1 <4]")
+ self.requires("libmad/[>=0.15.1b]")
+ self.requires("alac/[>=cci.20121212]")
+ self.requires("libfdk_aac/[>=2.0.3]")
+ self.requires("faac/[>=1.30]")
+ self.requires("flac/[>=1.4.3]")
+ self.requires("ogg/[>=1.3.5]")
+ self.requires("vorbis/[>=1.3.7]")
+
+ def layout(self):
+ basic_layout(self, src_folder="src")
+
+ def validate(self):
+ if self.settings.compiler.cppstd:
+ check_min_cppstd(self, self._min_cppstd)
+ minimum_version = self._compilers_minimum_version.get(str(self.settings.compiler), False)
+ if minimum_version and Version(self.settings.compiler.version) < minimum_version:
+ raise ConanInvalidConfiguration(
+ f"{self.ref} requires C++{self._min_cppstd}, which your compiler does not support."
+ )
+
+ def generate(self):
+ venv = VirtualBuildEnv(self)
+ venv.generate()
+
+ def source(self):
+ get(self, **self.conan_data["sources"][self.version]["source"], strip_root=True)
+ get(self, **self.conan_data["sources"][self.version]["helpers"], destination='dependencies/AnyPlatform/ohWafHelpers', strip_root=True)
+
+ def build(self):
+ apply_conandata_patches(self)
+ with chdir(self, self.source_folder):
+ self.run(f"LDFLAGS=-L{self.dependencies['zlib'].cpp_info.libdirs[0]} waf configure --ohnet-include-dir={self.dependencies['ohnet'].cpp_info.includedirs[0]} --ohnet-lib-dir={self.dependencies['ohnet'].cpp_info.libdirs[0]} --ohnet={self.dependencies['ohnet'].cpp_info.libdirs[0]}/.. --ssl={self.dependencies['openssl'].cpp_info.libdirs[0]}/.. --with-default-fpm")
+ self.run("waf build")
+
+ def package(self):
+ copy(self, "License.txt", src=self.source_folder, dst=os.path.join(self.package_folder, "licenses"))
+ with chdir(self, self.source_folder):
+ self.run("waf bundle")
+ unzip(self, "build/ohMediaPlayer.tar.gz", self.package_folder, strip_root=True)
+ rm(self, "dependencies.json", self.package_folder)
+
+ def package_info(self):
+ self.cpp_info.libs = [
+ 'ohPipeline',
+ 'ohMediaPlayer',
+ 'ohMediaPlayerTestUtils',
+ 'SourcePlaylist',
+ 'SourceRadio',
+ 'SourceSongcast',
+ 'SourceRaop',
+ 'SourceScd',
+ 'SourceUpnpAv',
+ 'CodecAacFdk',
+ 'CodecAacFdkAdts',
+ 'CodecAacFdkBase',
+ 'CodecAacFdkMp4',
+ 'CodecAifc',
+ 'CodecAiff',
+ 'CodecAiffBase',
+ 'CodecAlacAppleBase',
+ 'CodecAlacApple',
+ 'CodecDsdDsf',
+ 'CodecDsdDff',
+ 'CodecDsdRaw',
+ 'CodecFlac',
+ 'CodecMp3',
+ 'CodecVorbis',
+ 'CodecWav',
+ 'CodecPcm',
+ 'libOgg',
+ 'WebAppFramework',
+ 'ConfigUi',
+ 'ConfigUiTestUtils',
+ 'Odp',
+ 'Podcast'
+ ]
diff --git a/recipes/ohpipeline/waf/patches/0001-disable-raat.patch b/recipes/ohpipeline/waf/patches/0001-disable-raat.patch
new file mode 100644
index 0000000000000..4b2a6253d0b71
--- /dev/null
+++ b/recipes/ohpipeline/waf/patches/0001-disable-raat.patch
@@ -0,0 +1,63 @@
+diff --git a/wscript b/wscript
+index 616b3329..4d3e7f82 100755
+--- a/wscript
++++ b/wscript
+@@ -7,35 +7,34 @@ import shutil
+
+ from waflib.Node import Node
+
+ from wafmodules.filetasks import (
+ find_resource_or_fail)
+
+ import os.path, sys
+ sys.path[0:0] = [os.path.join('dependencies', 'AnyPlatform', 'ohWafHelpers')]
+
+ from filetasks import gather_files, build_tree, copy_task, find_dir_or_fail, create_copy_task
+-from utilfuncs import invoke_test, guess_dest_platform, configure_toolchain, guess_ohnet_location, guess_location, guess_ssl_location, guess_raat_location, guess_libplatform_location, guess_libosa_location, is_core_platform
++from utilfuncs import invoke_test, guess_dest_platform, configure_toolchain, guess_ohnet_location, guess_location, guess_ssl_location, guess_libplatform_location, guess_libosa_location, is_core_platform
+
+ def options(opt):
+ opt.load('msvs')
+ opt.load('msvc')
+ opt.load('compiler_cxx')
+ opt.load('compiler_c')
+ opt.add_option('--ohnet-include-dir', action='store', default=None)
+ opt.add_option('--ohnet-lib-dir', action='store', default=None)
+ opt.add_option('--testharness-dir', action='store', default=os.path.join('dependencies', 'AnyPlatform', 'testharness'))
+ opt.add_option('--ohnet', action='store', default=None)
+ opt.add_option('--ssl', action='store', default=None)
+ opt.add_option('--libplatform', action='store', default=None)
+ opt.add_option('--libosa', action='store', default=None)
+- opt.add_option('--raat', action='store', default=None)
+ opt.add_option('--debug', action='store_const', dest="debugmode", const="Debug", default="Release")
+ opt.add_option('--release', action='store_const', dest="debugmode", const="Release", default="Release")
+ opt.add_option('--dest-platform', action='store', default=None)
+ opt.add_option('--cross', action='store', default=None)
+ opt.add_option('--with-default-fpm', action='store_true', default=False)
+
+ def configure(conf):
+
+ def set_env(conf, varname, value):
+ conf.msg(
+@@ -53,21 +52,20 @@ def configure(conf):
+ except KeyError:
+ conf.fatal('Specify --dest-platform')
+
+ if is_core_platform(conf):
+ guess_libosa_location(conf)
+ guess_libplatform_location(conf)
+
+ configure_toolchain(conf)
+ guess_ohnet_location(conf)
+ guess_ssl_location(conf)
+- guess_raat_location(conf)
+
+ conf.env.dest_platform = conf.options.dest_platform
+ conf.env.testharness_dir = os.path.abspath(conf.options.testharness_dir)
+
+ if conf.options.dest_platform.startswith('Windows'):
+ conf.env.LIB_OHNET=['ws2_32', 'iphlpapi', 'dbghelp', 'psapi', 'userenv']
+ conf.env.STLIB_OHNET=['TestFramework', 'ohNetCore']
+
+ if is_core_platform(conf):
+ conf.env.prepend_value('STLIB_OHNET', ['target', 'platform'])
diff --git a/recipes/ohpipeline/waf/patches/0002-remove-msvs.patch b/recipes/ohpipeline/waf/patches/0002-remove-msvs.patch
new file mode 100644
index 0000000000000..3136fe16b5d17
--- /dev/null
+++ b/recipes/ohpipeline/waf/patches/0002-remove-msvs.patch
@@ -0,0 +1,26 @@
+diff --git a/wscript b/wscript
+index ee7adbba..38ef5b01 100755
+--- a/wscript
++++ b/wscript
+@@ -10,21 +10,20 @@ from waflib.Node import Node
+ from wafmodules.filetasks import (
+ find_resource_or_fail)
+
+ import os.path, sys
+ sys.path[0:0] = [os.path.join('dependencies', 'AnyPlatform', 'ohWafHelpers')]
+
+ from filetasks import gather_files, build_tree, copy_task, find_dir_or_fail, create_copy_task
+ from utilfuncs import invoke_test, guess_dest_platform, configure_toolchain, guess_ohnet_location, guess_location, guess_ssl_location, guess_libplatform_location, guess_libosa_location, is_core_platform
+
+ def options(opt):
+- opt.load('msvs')
+ opt.load('msvc')
+ opt.load('compiler_cxx')
+ opt.load('compiler_c')
+ opt.add_option('--ohnet-include-dir', action='store', default=None)
+ opt.add_option('--ohnet-lib-dir', action='store', default=None)
+ opt.add_option('--testharness-dir', action='store', default=os.path.join('dependencies', 'AnyPlatform', 'testharness'))
+ opt.add_option('--ohnet', action='store', default=None)
+ opt.add_option('--ssl', action='store', default=None)
+ opt.add_option('--libplatform', action='store', default=None)
+ opt.add_option('--libosa', action='store', default=None)
diff --git a/recipes/ohpipeline/waf/patches/0003-fix-ohwafhelpers.patch b/recipes/ohpipeline/waf/patches/0003-fix-ohwafhelpers.patch
new file mode 100644
index 0000000000000..ce35c455fc695
--- /dev/null
+++ b/recipes/ohpipeline/waf/patches/0003-fix-ohwafhelpers.patch
@@ -0,0 +1,202 @@
+diff --git a/dependencies/AnyPlatform/ohWafHelpers/utilfuncs.py b/dependencies/AnyPlatform/ohWafHelpers/utilfuncs.py
+index c7e860f..37ea6f7 100644
+--- a/dependencies/AnyPlatform/ohWafHelpers/utilfuncs.py
++++ b/dependencies/AnyPlatform/ohWafHelpers/utilfuncs.py
+@@ -55,25 +55,29 @@ def invoke_test(tsk):
+
+ def guess_dest_platform():
+ # literally copied (for consistency) from default_platform.py in ohdevtools
+ import platform
+ if platform.system() == 'Windows':
+ return 'Windows-x86'
+ if platform.system() == 'Linux' and platform.architecture()[0] == '32bit' and platform.machine()[0:3] == 'ppc':
+ return 'Linux-ppc32'
+ if platform.system() == 'Linux' and platform.architecture()[0] == '32bit':
+ return 'Linux-x86'
+- if platform.system() == 'Linux' and platform.architecture()[0] == '64bit':
++ if platform.system() == 'Linux' and platform.architecture()[0] == '64bit' and platform.machine() in ['AMD64', 'x86_64']:
+ return 'Linux-x64'
+- if platform.system() == 'Darwin':
++ if platform.system() == 'Linux' and platform.architecture()[0] == '64bit' and platform.machine() in ['arm64', 'aarch64']:
++ return 'Linux-arm64'
++ if platform.system() == 'Darwin' and platform.architecture()[0] == '64bit' and platform.machine() in ['AMD64', 'x86_64']:
+ # 32bit Mac support no longer supported on Apple platforms
+ return 'Mac-x64'
++ if platform.system() == 'Darwin' and platform.architecture()[0] == '64bit' and platform.machine() in ['arm64', 'aarch64']:
++ return 'Mac-arm64'
+ return None
+
+ def is_core_platform(conf):
+ return conf.options.dest_platform in ['Core-ppc32', 'Core-armv5', 'Core-armv6']
+
+ def configure_toolchain(conf):
+ import os, sys
+ import platform as platform_arch
+ platform_info = get_platform_info(conf.options.dest_platform)
+ if platform_info['build_platform'] != sys.platform:
+@@ -100,31 +104,31 @@ def configure_toolchain(conf):
+ conf.env.append_value('CXXFLAGS', [
+ '-pipe', '-D_GNU_SOURCE', '-D_REENTRANT', '-DDEFINE_TRACE',
+ '-DDEFINE_'+platform_info['endian']+'_ENDIAN', '-fvisibility=hidden',])
+ if conf.options.debugmode == 'Debug':
+ conf.env.append_value('CXXFLAGS',['-O0', '-DDEFINE_DEBUG'])
+ else:
+ conf.env.append_value('CXXFLAGS',['-O2'])
+ conf.env.append_value('CFLAGS', conf.env['CXXFLAGS'])
+ # C++11 support is only relevant to C++ code.
+ # ...but does seem to have some effect on the level of C supported by C++ files.
+- if conf.options.dest_platform in ['Mac-x64']:
++ if conf.options.dest_platform in ['Mac-x64', 'Mac-arm64']:
+ conf.env.append_value('CFLAGS', ['-std=gnu89'])
+ conf.env.append_value('CXXFLAGS', ['-std=c++11', '-D_POSIX_C_SOURCE=199309', '-stdlib=libc++'])
+ else:
+ conf.env.append_value('CXXFLAGS', ['-std=c++0x'])
+ conf.env.append_value('LINKFLAGS', '-Wl,--fatal-warnings')
+ # Enable exceptions for all C code
+ conf.env.append_value('CFLAGS', ['-fexceptions'])
+ # Don't enable warnings for C code as its typically third party and written to different standards
+ conf.env.append_value('CXXFLAGS', [
+- '-fexceptions', '-Wall', '-Werror'])
++ '-fexceptions', '-Wall'])
+
+
+ if hasattr(conf, 'use_staging_tree'):
+ sysroot = os.path.abspath('./dependencies/' + conf.options.dest_platform + '/staging/')
+ conf.env.append_value('CFLAGS', '--sysroot='+sysroot)
+ conf.env.append_value('CXXFLAGS', '--sysroot='+sysroot)
+ conf.env.append_value('LINKFLAGS', '--sysroot='+sysroot)
+
+ if conf.options.dest_platform == 'Linux-mipsel':
+ conf.env.append_value('LINKFLAGS', '-EL')
+@@ -148,20 +152,27 @@ def configure_toolchain(conf):
+ else:
+ conf.env.append_value('CXXFLAGS',['-Wno-psabi', '-fPIC'])
+ conf.env.append_value('CFLAGS',['-fPIC'])
+ elif conf.options.dest_platform in ['Mac-x64']:
+ conf.env.append_value('CXXFLAGS', ['-arch', 'x86_64'])
+ conf.env.append_value('CFLAGS', ['-arch', 'x86_64'])
+ conf.env.append_value('LINKFLAGS', ['-arch', 'x86_64'])
+ conf.env.append_value('CXXFLAGS',['-fPIC', '-mmacosx-version-min=10.7', '-DPLATFORM_MACOSX_GNU'])
+ conf.env.append_value('CFLAGS',['-fPIC'])
+ conf.env.append_value('LINKFLAGS',['-stdlib=libc++', '-framework', 'CoreFoundation', '-framework', 'SystemConfiguration', '-framework', 'IOKit'])
++ elif conf.options.dest_platform in ['Mac-arm64']:
++ conf.env.append_value('CXXFLAGS', ['-arch', 'arm64'])
++ conf.env.append_value('CFLAGS', ['-arch', 'arm64'])
++ conf.env.append_value('LINKFLAGS', ['-arch', 'arm64'])
++ conf.env.append_value('CXXFLAGS',['-fPIC', '-mmacosx-version-min=10.7', '-DPLATFORM_MACOSX_GNU'])
++ conf.env.append_value('CFLAGS',['-fPIC'])
++ conf.env.append_value('LINKFLAGS',['-stdlib=libc++', '-framework', 'CoreFoundation', '-framework', 'SystemConfiguration', '-framework', 'IOKit'])
+ # Options for Core-ppc32 and Core-armv5 / Core-armv6
+ if conf.options.dest_platform in ['Core-ppc32', 'Core-armv5', 'Core-armv6']:
+
+ platform = conf.options.dest_platform
+
+ if platform == 'Core-ppc32':
+ default_cross = '/opt/rtems-4.11-rsb/bin/powerpc-rtems4.11-'
+ cpu = '405'
+ if platform == 'Core-armv5':
+ default_cross = '/opt/rtems-4.11-rsb/bin/arm-rtems4.11-'
+@@ -295,40 +306,25 @@ def guess_ohnet_location(conf):
+ set_env_verbose(conf, 'STLIBPATH_OHNET', match_path(
+ conf,
+ [
+ '{options.ohnet_lib_dir}',
+ '{options.ohnet}/Build/Obj/{platform_info[ohnet_plat_dir]}/{options.debugmode}',
+ 'dependencies/{options.dest_platform}/ohNet-{options.dest_platform}-{debugmode_lc}-dev/lib',
+ 'dependencies/{options.dest_platform}/ohNet-{options.dest_platform}-{debugmode_tc}/lib',
+ ],
+ message='Specify --ohnet-lib-dir or --ohnet')
+ )
+- set_env_verbose(conf, 'TEXT_TRANSFORM_PATH', match_path(
+- conf,
+- [
+- '{options.ohnet}/Build/Tools',
+- 'dependencies/{options.dest_platform}/ohNet-{options.dest_platform}-{debugmode_tc}/lib/t4',
+- ],
+- message='Specify --ohnet')
+- )
+- set_env_verbose(conf, 'T4_TEMPLATE_PATH', match_path(
+- conf,
+- [
+- '{options.ohnet}/OpenHome/Net/T4/Templates',
+- 'dependencies/{options.dest_platform}/ohNet-{options.dest_platform}-{debugmode_tc}/lib/t4',
+- ],
+- message='Specify --ohnet')
+- )
+ set_env_verbose(conf, 'SERVICE_GEN_DIR', match_path(
+ conf,
+ [
+ '{options.ohnet}/OpenHome/Net/ServiceGen',
++ '{options.ohnet}/lib/ServiceGen',
+ 'dependencies/{options.dest_platform}/ohNet-{options.dest_platform}-{debugmode_tc}/lib/ServiceGen',
+ ],
+ message='Specify --ohnet')
+ )
+
+ def guess_location(conf, repo):
+ set_env_verbose(conf, 'INCLUDES_' + repo.upper(), match_path(
+ conf,
+ [
+ '{options.' + repo.lower() + '_include_dir}',
+@@ -377,21 +373,21 @@ def guess_ssl_location(conf):
+ )
+ set_env_verbose(conf, 'STLIBPATH_SSL', match_path(
+ conf,
+ [
+ '{options.ssl}/build/{options.dest_platform}/lib',
+ '{options.ssl}/lib',
+ 'dependencies/{options.dest_platform}/libressl/lib',
+ ],
+ message='Specify --ssl')
+ )
+- conf.env.STLIB_SSL = ['ssl', 'crypto']
++ conf.env.STLIB_SSL = ['ssl', 'crypto', 'z']
+ if conf.options.dest_platform in ['Windows-x86', 'Windows-x64']:
+ conf.env.LIB_SSL = ['advapi32']
+ elif conf.options.dest_platform.startswith('Linux-'):
+ conf.env.LIB_SSL = ['dl']
+
+ def get_ros_tool_path(ctx):
+ import os
+ from filetasks import find_resource_or_fail
+
+ host_platform = guess_dest_platform()
+@@ -437,26 +433,28 @@ def create_ros_from_dir_tree(bld, src_path, ros_name):
+ key = key_path + '/' + f
+ src_file = os.path.join(rel_path, f)
+ line = ' {1}\n'.format(key, src_file)
+ fh.write(line)
+ fh.write('')
+ fh.close()
+ create_ros(bld, ros_src, ros_name + '.ros')
+
+ def get_platform_info(dest_platform):
+ platforms = {
+- 'Linux-x86': dict(endian='LITTLE', build_platform='linux2', ohnet_plat_dir='Posix'),
+- 'Linux-x64': dict(endian='LITTLE', build_platform='linux2', ohnet_plat_dir='Posix'),
+- 'Linux-ARM': dict(endian='LITTLE', build_platform='linux2', ohnet_plat_dir='Posix'),
+- 'Linux-armhf': dict(endian='LITTLE', build_platform='linux2', ohnet_plat_dir='Posix'),
+- 'Linux-rpi': dict(endian='LITTLE', build_platform='linux2', ohnet_plat_dir='Posix'),
+- 'Linux-mipsel': dict(endian='LITTLE',build_platform='linux2', ohnet_plat_dir='Posix'),
+- 'Linux-ppc32': dict(endian='BIG', build_platform='linux2', ohnet_plat_dir='Posix'),
++ 'Linux-x86': dict(endian='LITTLE', build_platform='linux', ohnet_plat_dir='Posix'),
++ 'Linux-x64': dict(endian='LITTLE', build_platform='linux', ohnet_plat_dir='Posix'),
++ 'Linux-ARM': dict(endian='LITTLE', build_platform='linux', ohnet_plat_dir='Posix'),
++ 'Linux-arm64': dict(endian='LITTLE', build_platform='linux', ohnet_plat_dir='Posix'),
++ 'Linux-armhf': dict(endian='LITTLE', build_platform='linux', ohnet_plat_dir='Posix'),
++ 'Linux-rpi': dict(endian='LITTLE', build_platform='linux', ohnet_plat_dir='Posix'),
++ 'Linux-mipsel': dict(endian='LITTLE',build_platform='linux', ohnet_plat_dir='Posix'),
++ 'Linux-ppc32': dict(endian='BIG', build_platform='linux', ohnet_plat_dir='Posix'),
+ 'Windows-x86': dict(endian='LITTLE', build_platform='win32', ohnet_plat_dir='Windows'),
+ 'Windows-x64': dict(endian='LITTLE', build_platform='win32', ohnet_plat_dir='Windows'),
+- 'Core-ppc32': dict(endian='BIG', build_platform='linux2', ohnet_plat_dir='Core-ppc32'),
+- 'Core-armv5': dict(endian='LITTLE', build_platform='linux2', ohnet_plat_dir='Core-armv5'),
+- 'Core-armv6': dict(endian='LITTLE', build_platform='linux2', ohnet_plat_dir='Core-armv6'),
++ 'Core-ppc32': dict(endian='BIG', build_platform='linux', ohnet_plat_dir='Core-ppc32'),
++ 'Core-armv5': dict(endian='LITTLE', build_platform='linux', ohnet_plat_dir='Core-armv5'),
++ 'Core-armv6': dict(endian='LITTLE', build_platform='linux', ohnet_plat_dir='Core-armv6'),
+ 'Mac-x64': dict(endian='LITTLE', build_platform='darwin', ohnet_plat_dir='Mac-x64'),
++ 'Mac-arm64': dict(endian='LITTLE', build_platform='darwin', ohnet_plat_dir='Mac-arm64'),
+ 'iOs-ARM': dict(endian='LITTLE', build_platform='darwin', ohnet_plat_dir='Mac/arm'),
+ }
+ return platforms[dest_platform]
diff --git a/recipes/ohpipeline/waf/patches/0004-link-to-atomic.patch b/recipes/ohpipeline/waf/patches/0004-link-to-atomic.patch
new file mode 100644
index 0000000000000..69ef810000dec
--- /dev/null
+++ b/recipes/ohpipeline/waf/patches/0004-link-to-atomic.patch
@@ -0,0 +1,27 @@
+diff --git a/wscript b/wscript
+index d83690c0..3d9977cb 100755
+--- a/wscript
++++ b/wscript
+@@ -58,20 +58,22 @@ def configure(conf):
+ configure_toolchain(conf)
+ guess_ohnet_location(conf)
+ guess_ssl_location(conf)
+
+ conf.env.dest_platform = conf.options.dest_platform
+ conf.env.testharness_dir = os.path.abspath(conf.options.testharness_dir)
+
+ if conf.options.dest_platform.startswith('Windows'):
+ conf.env.LIB_OHNET=['ws2_32', 'iphlpapi', 'dbghelp', 'psapi', 'userenv']
+ conf.env.STLIB_OHNET=['TestFramework', 'ohNetCore']
++ if conf.options.dest_platform.startswith('Linux') and 'clang' in conf.env.CC[0]:
++ conf.env.append_value('STLIB_OHNET', ['atomic'])
+
+ if is_core_platform(conf):
+ conf.env.prepend_value('STLIB_OHNET', ['target', 'platform'])
+ conf.env.append_value('DEFINES', ['DEFINE_TRACE', 'NETWORK_NTOHL_LOCAL', 'NOTERMIOS']) # Tell FLAC to use local ntohl implementation
+
+ conf.env.INCLUDES = [
+ '.',
+ conf.path.find_node('.').abspath()
+ ]
+
diff --git a/recipes/ohpipeline/waf/test_package/CMakeLists.txt b/recipes/ohpipeline/waf/test_package/CMakeLists.txt
new file mode 100644
index 0000000000000..bd868ecdf5a63
--- /dev/null
+++ b/recipes/ohpipeline/waf/test_package/CMakeLists.txt
@@ -0,0 +1,8 @@
+cmake_minimum_required(VERSION 3.15)
+
+project(test_package CXX)
+
+find_package(ohpipeline REQUIRED CONFIG)
+
+add_executable(${PROJECT_NAME} test_package.cpp)
+target_link_libraries(${PROJECT_NAME} PUBLIC ohpipeline::ohpipeline)
diff --git a/recipes/ohpipeline/waf/test_package/conanfile.py b/recipes/ohpipeline/waf/test_package/conanfile.py
new file mode 100644
index 0000000000000..a9fb96656f203
--- /dev/null
+++ b/recipes/ohpipeline/waf/test_package/conanfile.py
@@ -0,0 +1,26 @@
+from conan import ConanFile
+from conan.tools.build import can_run
+from conan.tools.cmake import cmake_layout, CMake
+import os
+
+
+class TestPackageConan(ConanFile):
+ settings = "os", "arch", "compiler", "build_type"
+ generators = "CMakeDeps", "CMakeToolchain", "VirtualRunEnv"
+ test_type = "explicit"
+
+ def requirements(self):
+ self.requires(self.tested_reference_str)
+
+ def layout(self):
+ cmake_layout(self)
+
+ def build(self):
+ cmake = CMake(self)
+ cmake.configure()
+ cmake.build()
+
+ def test(self):
+ if can_run(self):
+ bin_path = os.path.join(self.cpp.build.bindirs[0], "test_package")
+ self.run(bin_path, env="conanrun")
diff --git a/recipes/ohpipeline/waf/test_package/test_package.cpp b/recipes/ohpipeline/waf/test_package/test_package.cpp
new file mode 100644
index 0000000000000..dce35f7c92826
--- /dev/null
+++ b/recipes/ohpipeline/waf/test_package/test_package.cpp
@@ -0,0 +1,43 @@
+#include
+#include
+#include
+
+using namespace OpenHome;
+using namespace OpenHome::Av;
+
+class RamStore : public IStaticDataSource
+{
+public:
+ RamStore(const Brx& aImageFileName);
+ virtual ~RamStore();
+private: // from IStaticDataSource
+ void LoadStaticData(IStoreLoaderStatic& aLoader) override;
+private:
+ Brhz iImageFileName;
+};
+
+RamStore::RamStore(const Brx& aImageFileName)
+ : iImageFileName(aImageFileName)
+{
+}
+
+RamStore::~RamStore() {}
+
+void RamStore::LoadStaticData(IStoreLoaderStatic& aLoader)
+{
+ aLoader.AddStaticItem(StaticDataKey::kBufManufacturerName, "OpenHome");
+ aLoader.AddStaticItem(StaticDataKey::kBufManufacturerInfo, "insert oh info here...");
+ aLoader.AddStaticItem(StaticDataKey::kBufManufacturerUrl, "http://www.openhome.org");
+ aLoader.AddStaticItem(StaticDataKey::kBufManufacturerImageUrl, "http://wiki.openhome.org/mediawiki/skins/openhome/images/logo.png");
+ aLoader.AddStaticItem(StaticDataKey::kBufModelName, "OpenHome Media Player (test)");
+ aLoader.AddStaticItem(StaticDataKey::kBufModelInfo, "Test implementation of ohMediaPlayer");
+ aLoader.AddStaticItem(StaticDataKey::kBufModelUrl, "http://wiki.openhome.org/wiki/OhMedia");
+ aLoader.AddStaticItem(StaticDataKey::kBufModelImageUrl, iImageFileName.CString());
+}
+
+int main()
+{
+ RamStore* ramStore = new RamStore(Brx::Empty());
+
+ delete ramStore;
+}