Message ID | 1393158585-27193-1-git-send-email-maxime.hadjinlian@gmail.com |
---|---|
State | Superseded |
Headers | show |
Maxime, I tested out this patch. It all build fine for me and i was able to run xbmc on the raspberry pi. I used the yatse android app to control xmbc and i was able to watch some youtube videos with no issue :) I have a few comments below. On 23/02/14 12:29, Maxime Hadjinlian wrote: -- snip -- > diff --git a/package/xbmc/S50xbmc b/package/xbmc/S50xbmc > new file mode 100755 > index 0000000..ce51f7e > --- /dev/null > +++ b/package/xbmc/S50xbmc > @@ -0,0 +1,41 @@ > +#!/bin/sh > +# > +# Starts XBMC. > +# > + > +BIN_NAME=xbmc.bin > +XBMC=/usr/lib/xbmc/$BIN_NAME > +XBMC_ARGS="--standalone -fs -n" > +PIDFILE=/var/run/xbmc.pid > + > +start() { > + echo -n "Starting XBMC: " > + start-stop-daemon -S -q -p $PIDFILE --exec $XBMC -- $XBMC_ARGS I had to add -b to the start-stop-daemon options to background xbmc.bin otherwise the startup halted on this script. Also i added -m so start-stop-daemon would create the pid file. Without the -m option the stop command fails because the pid file does not exist. > + [ $? == 0 ] && echo "OK" || echo "FAIL" > +} > +stop() { > + echo -n "Stopping XBMC: " > + start-stop-daemon -K -q -p $PIDFILE > + [ $? == 0 ] && echo "OK" || echo "FAIL" > +} > +restart() { > + stop > + start > +} > + > +case "$1" in > + start) > + start > + ;; > + stop) > + stop > + ;; > + restart|reload) > + restart > + ;; > + *) > + echo "Usage: $0 {start|stop|restart}" > + exit 1 > +esac > + > +exit $? -- snip -- > diff --git a/package/xbmc/xbmc-0002-RaspberryPi-Default-Settings.patch b/package/xbmc/xbmc-0002-RaspberryPi-Default-Settings.patch > new file mode 100644 > index 0000000..43960e6 > --- /dev/null > +++ b/package/xbmc/xbmc-0002-RaspberryPi-Default-Settings.patch > @@ -0,0 +1,168 @@ > +From 2541772a3ed71402a620466feb6a337b40f08880 Mon Sep 17 00:00:00 2001 > +From: Maxime Hadjinlian <maximeh.hadjinlian@gmail.com> > +Date: Sat, 15 Dec 2012 23:41:06 +0100 > +Subject: [PATCH] RaspberryPi Default Settings > + > +Add some default settings if the target platform is the RaspberryPi. > +Avoid the fact that the user _MUST_ have an advandcedsettings.xml to be able > +to use XBMC properly. > + > +Signed-off-by: Maxime Hadjinlian <maxime.hadjinlian@gmail.com> I thought you were going to remove this patch and instead include a default advandcedsettings.xml for the raspberry pi. > +--- > + xbmc/settings/AdvancedSettings.cpp | 31 +++++++++++++++++++++++++++ > + xbmc/settings/GUISettings.cpp | 8 +++---- > + xbmc/settings/GUIWindowSettingsCategory.cpp | 4 ++-- > + 3 files changed, 37 insertions(+), 6 deletions(-) > + > +diff --git a/xbmc/settings/AdvancedSettings.cpp b/xbmc/settings/AdvancedSettings.cpp > +index 2cbbf98..42ccabd 100644 > +--- a/xbmc/settings/AdvancedSettings.cpp > ++++ b/xbmc/settings/AdvancedSettings.cpp > +@@ -72,7 +72,11 @@ void CAdvancedSettings::Initialize() > + m_karaokeAlwaysEmptyOnCdgs = 1; > + m_karaokeUseSongSpecificBackground = 0; > + > ++ #if defined(TARGET_RASPBERRY_PI) > ++ m_audioDefaultPlayer = "omxplayer"; > ++ #else > + m_audioDefaultPlayer = "paplayer"; > ++ #endif > + m_audioPlayCountMinimumPercent = 90.0f; > + m_audioHost = "default"; > + > +@@ -93,8 +97,14 @@ void CAdvancedSettings::Initialize() > + m_videoBlackBarColour = 0; > + m_videoPPFFmpegDeint = "linblenddeint"; > + m_videoPPFFmpegPostProc = "ha:128:7,va,dr"; > ++ > ++ #if defined(TARGET_RASPBERRY_PI) > ++ m_videoDefaultPlayer = "omxplayer"; > ++ m_videoDefaultDVDPlayer = "omxplayer"; > ++ #else > + m_videoDefaultPlayer = "dvdplayer"; > + m_videoDefaultDVDPlayer = "dvdplayer"; > ++ #endif > + m_videoIgnoreSecondsAtStart = 3*60; > + m_videoIgnorePercentAtEnd = 8.0f; > + m_videoPlayCountMinimumPercent = 90.0f; > +@@ -287,7 +297,11 @@ void CAdvancedSettings::Initialize() > + m_alwaysOnTop = false; > + #endif > + > ++ #if defined(TARGET_RASPBERRY_PI) > ++ m_bgInfoLoaderMaxThreads = 2; > ++ #else > + m_bgInfoLoaderMaxThreads = 5; > ++ #endif > + > + m_iPVRTimeCorrection = 0; > + m_iPVRInfoToggleInterval = 3000; > +@@ -299,7 +313,12 @@ void CAdvancedSettings::Initialize() > + > + m_measureRefreshrate = false; > + > ++ #if defined(TARGET_RASPBERRY_PI) > ++ m_cacheMemBufferSize = 1024 * 1024 * 10; > ++ #else > + m_cacheMemBufferSize = 1024 * 1024 * 20; > ++ #endif > ++ > + m_addonPackageFolderSize = 200; > + > + m_jsonOutputCompact = true; > +@@ -509,11 +528,17 @@ void CAdvancedSettings::ParseSettingsFile(const CStdString &file) > + RefreshOverride override = {0}; > + > + float fps; > ++ #if defined(TARGET_RASPBERRY_PI) > ++ fps = 23.976; > ++ override.fpsmin = fps - 0.01f; > ++ override.fpsmax = fps + 0.01f; > ++ #else > + if (XMLUtils::GetFloat(pRefreshOverride, "fps", fps)) > + { > + override.fpsmin = fps - 0.01f; > + override.fpsmax = fps + 0.01f; > + } > ++ #endif > + > + float fpsmin, fpsmax; > + if (XMLUtils::GetFloat(pRefreshOverride, "fpsmin", fpsmin) && > +@@ -524,11 +549,17 @@ void CAdvancedSettings::ParseSettingsFile(const CStdString &file) > + } > + > + float refresh; > ++ #if defined(TARGET_RASPBERRY_PI) > ++ refresh = 24.0; > ++ override.refreshmin = refresh - 0.01f; > ++ override.refreshmax = refresh + 0.01f; > ++ #else > + if (XMLUtils::GetFloat(pRefreshOverride, "refresh", refresh)) > + { > + override.refreshmin = refresh - 0.01f; > + override.refreshmax = refresh + 0.01f; > + } > ++ #endif > + > + float refreshmin, refreshmax; > + if (XMLUtils::GetFloat(pRefreshOverride, "refreshmin", refreshmin) && > +diff --git a/xbmc/settings/GUISettings.cpp b/xbmc/settings/GUISettings.cpp > +index c1820a7..c00fb18 100644 > +--- a/xbmc/settings/GUISettings.cpp > ++++ b/xbmc/settings/GUISettings.cpp > +@@ -537,11 +537,11 @@ void CGUISettings::Initialize() > + AddInt(NULL, "input.appleremotesequencetime", 13603, 500, 50, 50, 1000, SPIN_CONTROL_INT_PLUS, MASK_MS, TEXT_OFF); > + AddSeparator(in, "input.sep1"); > + #endif > +- AddBool(in, "input.remoteaskeyboard", 21449, false); > ++ AddBool(in, "input.remoteaskeyboard", 21449, true); > + #if defined(TARGET_DARWIN_IOS) > + AddBool(NULL, "input.enablemouse", 21369, true); > + #else > +- AddBool(in, "input.enablemouse", 21369, true); > ++ AddBool(in, "input.enablemouse", 21369, false); > + #endif > + #if defined(HAS_SDL_JOYSTICK) > + AddBool(in, "input.enablejoystick", 35100, true); > +@@ -831,7 +831,7 @@ void CGUISettings::Initialize() > + > + #ifdef HAS_WEB_SERVER > + CSettingsCategory* srvWeb = AddCategory(SETTINGS_SERVICE, "webserver", 33101); > +- AddBool(srvWeb, "services.webserver", 263, false); > ++ AddBool(srvWeb, "services.webserver", 263, true); > + AddString(srvWeb,"services.webserverport", 730, CUtil::CanBindPrivileged()?"80":"8080", EDIT_CONTROL_NUMBER_INPUT, false, 730); > + AddString(srvWeb,"services.webserverusername",1048, "xbmc", EDIT_CONTROL_INPUT); > + AddString(srvWeb,"services.webserverpassword",733, "", EDIT_CONTROL_HIDDEN_INPUT, true, 733); > +@@ -881,7 +881,7 @@ void CGUISettings::Initialize() > + AddInt(laf, "lookandfeel.startupwindow",512,1, WINDOW_HOME, 1, WINDOW_PYTHON_END, SPIN_CONTROL_TEXT); > + AddString(laf, "lookandfeel.soundskin",15108,"SKINDEFAULT", SPIN_CONTROL_TEXT); > + AddSeparator(laf, "lookandfeel.sep2"); > +- AddBool(laf, "lookandfeel.enablerssfeeds",13305, true); > ++ AddBool(laf, "lookandfeel.enablerssfeeds",13305, false); > + AddString(laf, "lookandfeel.rssedit", 21450, "", BUTTON_CONTROL_STANDARD); > + > + CSettingsCategory* loc = AddCategory(SETTINGS_APPEARANCE, "locale", 14090); > +diff --git a/xbmc/settings/GUIWindowSettingsCategory.cpp b/xbmc/settings/GUIWindowSettingsCategory.cpp > +index b4cee69..a9bcb7a 100644 > +--- a/xbmc/settings/GUIWindowSettingsCategory.cpp > ++++ b/xbmc/settings/GUIWindowSettingsCategory.cpp > +@@ -1271,7 +1271,7 @@ void CGUIWindowSettingsCategory::OnSettingChanged(CBaseSettingControl *pSettingC > + if (!g_application.StartWebServer()) > + { > + CGUIDialogOK::ShowAndGetInput(g_localizeStrings.Get(33101), "", g_localizeStrings.Get(33100), ""); > +- g_guiSettings.SetBool("services.webserver", false); > ++ g_guiSettings.SetBool("services.webserver", true); > + } > + } > + else if (strSetting.Equals("services.webserverusername") || strSetting.Equals("services.webserverpassword")) > +@@ -1292,7 +1292,7 @@ void CGUIWindowSettingsCategory::OnSettingChanged(CBaseSettingControl *pSettingC > + else > + { > + g_application.StopAirplayServer(true); > +- g_guiSettings.SetBool("services.airplay", false); > ++ g_guiSettings.SetBool("services.airplay", true); > + CZeroconf::GetInstance()->Stop(); > + } > + #endif > +-- > +1.7.10.4 -- snip -- Thanks Martin
Maxime, All, On 2014-02-23 13:29 +0100, Maxime Hadjinlian spake thusly: > XBMC is an award-winning free and open source (GPL) software media player and > entertainment hub for digital media. [--SNIP--] > diff --git a/package/xbmc/Config.in b/package/xbmc/Config.in > new file mode 100644 > index 0000000..c38f82b > --- /dev/null > +++ b/package/xbmc/Config.in > @@ -0,0 +1,191 @@ [--SNIP--] > +menuconfig BR2_PACKAGE_XBMC > + bool "xbmc" [--SNIP--] > + depends on BR2_TOOLCHAIN_USES_GLIBC && BR2_INSTALL_LIBSTDCPP [--SNIP--] > + depends on BR2_PACKAGE_HAS_OPENGL_EGL || BR2_PACKAGE_HAS_OPENGL_ES > +config BR2_PACKAGE_XBMC_AVAHI > + bool "avahi" > + # libdaemon uses fork() > + depends on BR2_USE_MMU > + depends on BR2_TOOLCHAIN_HAS_THREADS Are those two 'depends' really needed? XBMC depends on glibc, which always has threads, and is only available for architectures with an MMU. (Note: as discussed with Gustavo on IRC, glibc is not marked 'depends on MMU', but should be. Patch in the pipe...) So: - no depends on MMU, THREADS, IPv6, LARGEFILES - no comment stating so Ditto for all the options, of course... [--SNIP--] > +config BR2_PACKAGE_XBMC_LIBNFS > + bool "nfs" > + select BR2_PACKAGE_LIBNFS > + depends on BR2_LARGEFILE > + depends on BR2_TOOLCHAIN_HAS_NATIVE_RPC Does it work with libtirpc? If not, could it be easily made to? [--SNIP--] > diff --git a/package/xbmc/S50xbmc b/package/xbmc/S50xbmc > new file mode 100755 > index 0000000..ce51f7e > --- /dev/null > +++ b/package/xbmc/S50xbmc > @@ -0,0 +1,41 @@ > +#!/bin/sh > +# > +# Starts XBMC. > +# > + > +BIN_NAME=xbmc.bin > +XBMC=/usr/lib/xbmc/$BIN_NAME > +XBMC_ARGS="--standalone -fs -n" > +PIDFILE=/var/run/xbmc.pid If here you'd add something like: [ -f /etc/defaults/xbmc ] && . /etc/defaults/xbmc Then you'd be able to provide a /etc/defaults/xbmc that, for the RPi, would contain: export LD_PRELOAD=/usr/lib/libcoffi.so And install that in the if-rpi block below. > +start() { > + echo -n "Starting XBMC: " > + start-stop-daemon -S -q -p $PIDFILE --exec $XBMC -- $XBMC_ARGS Don't forget the comment from Martin Bark about going to background and writing the PID file. > +exit $? Unneeded, that's always the behaviour of a shell script. [--SNIP two patches--] > diff --git a/package/xbmc/xbmc.mk b/package/xbmc/xbmc.mk > new file mode 100644 > index 0000000..d05c2f5 > --- /dev/null > +++ b/package/xbmc/xbmc.mk > @@ -0,0 +1,163 @@ > +################################################################################ > +# > +# xbmc > +# > +################################################################################ > + > +XBMC_VERSION = 12.3-Frodo > +XBMC_SITE = $(call github,xbmc,xbmc,$(XBMC_VERSION)) > +XBMC_LICENSE = GPLv2 > +XBMC_LICENSE_FILES = LICENSE.GPL > +XBMC_DEPENDENCIES = host-gperf host-lzo host-sdl_image host-swig > +XBMC_DEPENDENCIES += boost bzip2 expat flac fontconfig freetype jasper jpeg \ > + libass libcdio libcurl libfribidi libgcrypt libmad libmodplug libmpeg2 \ > + libogg libplist libpng libsamplerate libungif libvorbis libxml2 lzo ncurses \ > + openssl pcre python readline sqlite taglib tiff tinyxml yajl zlib > + > +XBMC_CONF_ENV = \ > + PYTHON_VERSION="$(PYTHON_VERSION_MAJOR)" \ > + PYTHON_LDFLAGS="-lpython$(PYTHON_VERSION_MAJOR) -lpthread -ldl -lutil -lm" \ > + PYTHON_CPPFLAGS="-I$(STAGING_DIR)/usr/include/python$(PYTHON_VERSION_MAJOR)" \ > + PYTHON_SITE_PKG="$(STAGING_DIR)/usr/lib/python$(PYTHON_VERSION_MAJOR)/site-packages" \ > + PYTHON_NOVERSIONCHECK="no-check" \ > + TEXTUREPACKER_NATIVE_ROOT="$(HOST_DIR)/usr" > + > +XBMC_CONF_OPT += \ > + --disable-alsa \ > + --disable-crystalhd \ > + --disable-debug \ > + --disable-dvdcss \ > + --disable-gl \ > + --disable-hal \ > + --disable-joystick \ > + --disable-mysql \ > + --disable-openmax \ > + --disable-optical-drive \ > + --disable-projectm \ > + --disable-pulse \ > + --disable-sdl \ > + --disable-ssh \ > + --disable-vaapi \ > + --disable-vdpau \ > + --disable-vtbdecoder \ > + --disable-x11 \ > + --disable-xrandr \ Do you plan on sending a follow-up patch to add support for the currently-disabled options (alsa, dvdcss, hal...), or is it set-in-stone? > + --enable-gles \ > + --enable-optimizations > + > +ifeq ($(BR2_PACKAGE_RPI_USERLAND),y) > +XBMC_DEPENDENCIES += rpi-userland > +XBMC_CONF_OPT += --with-platform=raspberry-pi --enable-player=omxplayer > +XBMC_CONF_ENV += INCLUDES="-I$(STAGING_DIR)/usr/include/interface/vcos/pthreads \ > + -I$(STAGING_DIR)/usr/include/interface/vmcs_host/linux" Here, create/append to /etc/defaults/xbmc to use libcoffi.so. Or as part of a new if-libcoffi block, maybe. > +# Add HOST_DIR to PATH for codegenerator.mk to find swig > +define XBMC_BOOTSTRAP > + cd $(@D) && PATH=$(HOST_PATH) ./bootstrap Be prepared to adapt when Samuel's PATH rework is applied. ;-) > +endef > +XBMC_PRE_CONFIGURE_HOOKS += XBMC_BOOTSTRAP > + > +define XBMC_CLEAN_UNUSED_ADDONS > + rm -Rf $(TARGET_DIR)/usr/share/xbmc/addons/screensaver.rsxs.plasma > + rm -Rf $(TARGET_DIR)/usr/share/xbmc/addons/visualization.milkdrop > + rm -Rf $(TARGET_DIR)/usr/share/xbmc/addons/visualization.projectm > + rm -Rf $(TARGET_DIR)/usr/share/xbmc/addons/visualization.itunes > +endef > +XBMC_POST_INSTALL_TARGET_HOOKS += XBMC_CLEAN_UNUSED_ADDONS Why do you forcibly disable those add-ons? Can it be a config option? > +define XBMC_CLEAN_CONFLUENCE_SKIN > + find $(TARGET_DIR)/usr/share/xbmc/addons/skin.confluence/media -name *.png -delete > + find $(TARGET_DIR)/usr/share/xbmc/addons/skin.confluence/media -name *.jpg -delete > +endef > +XBMC_POST_INSTALL_TARGET_HOOKS += XBMC_CLEAN_CONFLUENCE_SKIN Are they not needed at all? [--SNIP--] > diff --git a/package/xbmc/xbmc.service b/package/xbmc/xbmc.service > new file mode 100644 > index 0000000..3fe5895 > --- /dev/null > +++ b/package/xbmc/xbmc.service > @@ -0,0 +1,12 @@ Of course, for systemd, you'd have to use a different way to pass use of libcoffi.so. Is it possible to add extra env in a unit file? :-/ > +[Unit] > +Description = XBMC media center > +After = network.target > + > +[Service] > +Type = simple > +ExecStart = /usr/lib/xbmc/xbmc.bin --standalone -fs -n > +Restart = on-failure > + > +[Install] > +WantedBy = multi-user.target > + No trailing line if not needed. Regards, Yann E. MORIN.
Maxime, All, On 2014-02-23 13:29 +0100, Maxime Hadjinlian spake thusly: > XBMC is an award-winning free and open source (GPL) software media player and > entertainment hub for digital media. Are you still working on this? If that can help you, I've started accumulating a few of the suggested changes in a branch in my tree: git://gitorious.org/buildroot/buildroot.git yem/xbmc 091d9b6 xbmc: new package 6547d40 package/xbmc: background XBMC and store PID in startup script 296d6b8 package/xbmc: cleanup dependencies I've made separate patches so we can keep track of the changes on top of your initial patch, but they should of course all be eventually folded in a single patch before final submission (or you can do it now in your tree if you want; just keep the SoB tags, please.) Regards, Yann E. MORIN.
Hi Yann, all On Thu, Mar 20, 2014 at 12:57 AM, Yann E. MORIN <yann.morin.1998@free.fr> wrote: > Maxime, All, > > On 2014-02-23 13:29 +0100, Maxime Hadjinlian spake thusly: >> XBMC is an award-winning free and open source (GPL) software media player and >> entertainment hub for digital media. > > Are you still working on this? Yup, I am truly sorry with the lack of communication. I have been under an ocean of work and as such have really no energy left to hack (and my wife would literally murder me at this point). *BUT* I was thinking of working on this either during my lunch hour or friday night since I have the whole evening to myself. > > If that can help you, I've started accumulating a few of the suggested > changes in a branch in my tree: > git://gitorious.org/buildroot/buildroot.git yem/xbmc > > 091d9b6 xbmc: new package > 6547d40 package/xbmc: background XBMC and store PID in startup script > 296d6b8 package/xbmc: cleanup dependencies > > I've made separate patches so we can keep track of the changes on top of > your initial patch, but they should of course all be eventually folded in > a single patch before final submission (or you can do it now in your tree > if you want; just keep the SoB tags, please.) Oh shiny ! I'll have a look at them and merge them. I had already cleanup the dependency but I'll look at your patch to check if I didn't forgot anything. From my point of view, I have left to do : - The removal of the patch regarding the RPi specific settings - Add them thought and advancedsettings.xml which will be installed with XBMC if we are building for an RPi. Have I missed anything ? > > Regards, > Yann E. MORIN. > > -- > .-----------------.--------------------.------------------.--------------------. > | Yann E. MORIN | Real-Time Embedded | /"\ ASCII RIBBON | Erics' conspiracy: | > | +33 662 376 056 | Software Designer | \ / CAMPAIGN | ___ | > | +33 223 225 172 `------------.-------: X AGAINST | \e/ There is no | > | http://ymorin.is-a-geek.org/ | _/*\_ | / \ HTML MAIL | v conspiracy. | > '------------------------------^-------^------------------^--------------------' Again sorry for the lack of communication and sudden disappearance.
Maxime, All, On 2014-03-20 09:25 +0100, Maxime Hadjinlian spake thusly: > On Thu, Mar 20, 2014 at 12:57 AM, Yann E. MORIN <yann.morin.1998@free.fr> wrote: > > On 2014-02-23 13:29 +0100, Maxime Hadjinlian spake thusly: > >> XBMC is an award-winning free and open source (GPL) software media player and > >> entertainment hub for digital media. > > > > Are you still working on this? > Yup, I am truly sorry with the lack of communication. I have been > under an ocean of work and as such have really no energy left to hack > (and my wife would literally murder me at this point). Hey, no problem. We all have real lives to deal with. ;-) > *BUT* I was thinking of working on this either during my lunch hour or > friday night since I have the whole evening to myself. Do not feel like this should be a burden on your shoulders. Take it along when you can and want. Doing something because you feel you have to is the best way to get burnt. > > If that can help you, I've started accumulating a few of the suggested > > changes in a branch in my tree: > > git://gitorious.org/buildroot/buildroot.git yem/xbmc [--SNIP--] > From my point of view, I have left to do : > - The removal of the patch regarding the RPi specific settings > - Add them thought and advancedsettings.xml which will be > installed with XBMC if we are building for an RPi. > > Have I missed anything ? No, this is basically the review you had so far. I can see improvements, but that can easily go in followup patches. > Again sorry for the lack of communication and sudden disappearance. No problem! Just ensure you enjoy doing that, and not feel compelled to. Regards, Yann E. MORIN.
diff --git a/package/Config.in b/package/Config.in index 087e5f4..69db17c 100644 --- a/package/Config.in +++ b/package/Config.in @@ -26,6 +26,7 @@ source "package/tstools/Config.in" source "package/vlc/Config.in" source "package/vorbis-tools/Config.in" source "package/wavpack/Config.in" +source "package/xbmc/Config.in" source "package/yavta/Config.in" endmenu diff --git a/package/xbmc/Config.in b/package/xbmc/Config.in new file mode 100644 index 0000000..c38f82b --- /dev/null +++ b/package/xbmc/Config.in @@ -0,0 +1,191 @@ +comment "xbmc requires an OpenGL ES and EGL backend" + depends on !(BR2_PACKAGE_HAS_OPENGL_EGL && BR2_PACKAGE_HAS_OPENGL_ES) + +comment "xbmc needs an (e)glibc toolchain w/ C++" + depends on !BR2_TOOLCHAIN_USES_GLIBC || !BR2_INSTALL_LIBSTDCPP + +menuconfig BR2_PACKAGE_XBMC + bool "xbmc" + select BR2_HOST_NEEDS_JAVA + select BR2_PACKAGE_BOOST + select BR2_PACKAGE_BOOST_THREAD + select BR2_PACKAGE_BZIP2 + select BR2_PACKAGE_EXPAT + select BR2_PACKAGE_FLAC + select BR2_PACKAGE_FONTCONFIG + select BR2_PACKAGE_FREETYPE + select BR2_PACKAGE_JASPER + select BR2_PACKAGE_JPEG + select BR2_PACKAGE_LIBASS + select BR2_PACKAGE_LIBCDIO + select BR2_PACKAGE_LIBCURL + select BR2_PACKAGE_LIBFRIBIDI + select BR2_PACKAGE_LIBGCRYPT + select BR2_PACKAGE_LIBID3TAG + select BR2_PACKAGE_LIBMAD + select BR2_PACKAGE_LIBMODPLUG + select BR2_PACKAGE_LIBMPEG2 + select BR2_PACKAGE_LIBOGG + select BR2_PACKAGE_LIBPLIST + select BR2_PACKAGE_LIBPNG + select BR2_PACKAGE_LIBSAMPLERATE + select BR2_PACKAGE_LIBUNGIF + select BR2_PACKAGE_LIBVORBIS + select BR2_PACKAGE_LIBXML2 + select BR2_PACKAGE_LZO + select BR2_PACKAGE_NCURSES + select BR2_PACKAGE_OPENSSL + select BR2_PACKAGE_PCRE + select BR2_PACKAGE_PYTHON + select BR2_PACKAGE_PYTHON_BSDDB + select BR2_PACKAGE_PYTHON_BZIP2 + select BR2_PACKAGE_PYTHON_CURSES + select BR2_PACKAGE_PYTHON_PYEXPAT + select BR2_PACKAGE_PYTHON_READLINE + select BR2_PACKAGE_PYTHON_SQLITE + select BR2_PACKAGE_PYTHON_SSL + select BR2_PACKAGE_PYTHON_UNICODEDATA + select BR2_PACKAGE_PYTHON_ZLIB + select BR2_PACKAGE_READLINE + select BR2_PACKAGE_SQLITE + select BR2_PACKAGE_TAGLIB + select BR2_PACKAGE_TIFF + select BR2_PACKAGE_TINYXML + select BR2_PACKAGE_YAJL + select BR2_PACKAGE_ZLIB + depends on BR2_TOOLCHAIN_USES_GLIBC && BR2_INSTALL_LIBSTDCPP + depends on BR2_PACKAGE_HAS_OPENGL_EGL || BR2_PACKAGE_HAS_OPENGL_ES + help + XBMC is an award-winning free and open source (GPL) software + media player and entertainment hub for digital media. + + http://xbmc.org + +if BR2_PACKAGE_XBMC + +config BR2_PACKAGE_XBMC_AVAHI + bool "avahi" + # libdaemon uses fork() + depends on BR2_USE_MMU + depends on BR2_TOOLCHAIN_HAS_THREADS + select BR2_PACKAGE_AVAHI + select BR2_PACKAGE_AVAHI_DAEMON + help + Enable Avahi support. + Select this if you want XBMC to support Bonjour protocol. + +comment "avahi needs a toolchain w/ threads" + depends on BR2_USE_MMU + depends on !BR2_TOOLCHAIN_HAS_THREADS + +config BR2_PACKAGE_XBMC_DBUS + bool "dbus" + depends on BR2_TOOLCHAIN_HAS_THREADS + # uses fork() + depends on BR2_USE_MMU + select BR2_PACKAGE_DBUS + help + Enable D-Bus support + +comment "dbus needs a toolchain w/ threads" + depends on BR2_USE_MMU + depends on !BR2_TOOLCHAIN_HAS_THREADS + +config BR2_PACKAGE_XBMC_LIBBLURAY + bool "blu-ray" + depends on BR2_TOOLCHAIN_HAS_THREADS + select BR2_PACKAGE_LIBBLURAY + help + Enable Blu-ray input support. + Select this if you want to play back Blu-ray content. + +comment "libbluray needs a toolchain w/ threads" + depends on !BR2_TOOLCHAIN_HAS_THREADS + +config BR2_PACKAGE_XBMC_LIBCEC + bool "hdmi cec" + select BR2_PACKAGE_LIBCEC + depends on BR2_INSTALL_LIBSTDCPP + depends on BR2_TOOLCHAIN_HAS_THREADS + help + Enable CEC (Consumer Electronics Control) support. + Select this if you want XBMC to support HDMI CEC. + +comment "libcec needs a toolchain w/ C++, threads" + depends on !BR2_INSTALL_LIBSTDCPP || !BR2_TOOLCHAIN_HAS_THREADS + +config BR2_PACKAGE_XBMC_LIBMICROHTTPD + bool "web server" + depends on BR2_TOOLCHAIN_HAS_THREADS + select BR2_PACKAGE_LIBMICROHTTPD + help + Enable webserver feature + +comment "libmicrohttpd needs a toolchain w/ threads" + depends on !BR2_TOOLCHAIN_HAS_THREADS + +config BR2_PACKAGE_XBMC_LIBNFS + bool "nfs" + select BR2_PACKAGE_LIBNFS + depends on BR2_LARGEFILE + depends on BR2_TOOLCHAIN_HAS_NATIVE_RPC + help + Enable NFS server support. + +comment "libnfs support requires a toolchain w/ largefile, RPC support" + depends on !(BR2_LARGEFILE && BR2_TOOLCHAIN_HAS_NATIVE_RPC) + +config BR2_PACKAGE_XBMC_RTMPDUMP + bool "rtmp" + select BR2_PACKAGE_RTMPDUMP + help + Enable RTMP input support. + Select this if you want to play back rtmp stream. + +config BR2_PACKAGE_XBMC_LIBSHAIRPLAY + bool "shairport" + select BR2_PACKAGE_LIBSHAIRPLAY + depends on BR2_INET_IPV6 + help + Enable Shairport support. + Select this if you want to stream content from an Apple device. + +comment "libshairport support requires a toolchain w/ IPv6 support" + depends on !BR2_INET_IPV6 + +config BR2_PACKAGE_XBMC_LIBSMBCLIENT + bool "samba" + depends on BR2_TOOLCHAIN_HAS_THREADS + depends on BR2_USE_MMU # fork() + select BR2_PACKAGE_SAMBA + select BR2_PACKAGE_SAMBA_LIBSMBCLIENT + help + Enable Samba support + +comment "libsmbclient needs a toolchain w/ threads" + depends on BR2_USE_MMU + depends on !BR2_TOOLCHAIN_HAS_THREADS + +config BR2_PACKAGE_XBMC_LIBTHEORA + bool "theora" + select BR2_PACKAGE_LIBTHEORA + help + Enable Theora input support. + Select this if you want to play back OGG/OGV files (Video). + +config BR2_PACKAGE_XBMC_LIBUSB + bool "usb" + depends on BR2_TOOLCHAIN_HAS_THREADS + select BR2_PACKAGE_LIBUSB + select BR2_PACKAGE_LIBUSB_COMPAT + help + Enable libusb support. + +config BR2_PACKAGE_XBMC_WAVPACK + bool "wavpack" + select BR2_PACKAGE_WAVPACK + help + Enable WAV input support. + Select this if you want to play back WV files. + +endif diff --git a/package/xbmc/S50xbmc b/package/xbmc/S50xbmc new file mode 100755 index 0000000..ce51f7e --- /dev/null +++ b/package/xbmc/S50xbmc @@ -0,0 +1,41 @@ +#!/bin/sh +# +# Starts XBMC. +# + +BIN_NAME=xbmc.bin +XBMC=/usr/lib/xbmc/$BIN_NAME +XBMC_ARGS="--standalone -fs -n" +PIDFILE=/var/run/xbmc.pid + +start() { + echo -n "Starting XBMC: " + start-stop-daemon -S -q -p $PIDFILE --exec $XBMC -- $XBMC_ARGS + [ $? == 0 ] && echo "OK" || echo "FAIL" +} +stop() { + echo -n "Stopping XBMC: " + start-stop-daemon -K -q -p $PIDFILE + [ $? == 0 ] && echo "OK" || echo "FAIL" +} +restart() { + stop + start +} + +case "$1" in + start) + start + ;; + stop) + stop + ;; + restart|reload) + restart + ;; + *) + echo "Usage: $0 {start|stop|restart}" + exit 1 +esac + +exit $? diff --git a/package/xbmc/xbmc-0001-Fixup-include-path.patch b/package/xbmc/xbmc-0001-Fixup-include-path.patch new file mode 100644 index 0000000..be99bd6 --- /dev/null +++ b/package/xbmc/xbmc-0001-Fixup-include-path.patch @@ -0,0 +1,81 @@ +From 63c255f1f5d68363f49193aceed343e602dc8bdf Mon Sep 17 00:00:00 2001 +From: Maxime Hadjinlian <maxime.hadjinlian@gmail.com> +Date: Thu, 26 Dec 2013 21:17:10 +0100 +Subject: [PATCH] Fixup include path + +Patch originally taken from : +http://repository.timesys.com/buildsources/x/xbmc/xbmc-11.0/xbmc-11.0-fixups.patch + +Signed-off-by: Maxime Hadjinlian <maxime.hadjinlian@gmail.com> +--- + lib/enca/configure | 3 --- + lib/enca/configure.ac | 3 --- + lib/libdvd/libdvdread/misc/dvdread-config.sh | 6 +++--- + lib/timidity/configure.in | 6 +++--- + 4 files changed, 6 insertions(+), 12 deletions(-) + +diff --git a/lib/enca/configure b/lib/enca/configure +index c839a51..7af5a09 100644 +--- a/lib/enca/configure ++++ b/lib/enca/configure +@@ -12011,9 +12011,6 @@ fi + if test "$prefix" = "NONE"; then + LDFLAGS="$LDFLAGS -L$ac_default_prefix/lib" + CPPFLAGS="$CPPFLAGS -I$ac_default_prefix/include" +-else +- LDFLAGS="$LDFLAGS -L$prefix/lib" +- CPPFLAGS="$CPPFLAGS -I$prefix/include" + fi + + +diff --git a/lib/enca/configure.ac b/lib/enca/configure.ac +index 41434df..47d5367 100644 +--- a/lib/enca/configure.ac ++++ b/lib/enca/configure.ac +@@ -100,9 +100,6 @@ dnl Dirty path hack. Helps some people with badly set up search paths. + if test "$prefix" = "NONE"; then + LDFLAGS="$LDFLAGS -L$ac_default_prefix/lib" + CPPFLAGS="$CPPFLAGS -I$ac_default_prefix/include" +-else +- LDFLAGS="$LDFLAGS -L$prefix/lib" +- CPPFLAGS="$CPPFLAGS -I$prefix/include" + fi + + dnl Checks for libraries. +diff --git a/lib/libdvd/libdvdread/misc/dvdread-config.sh b/lib/libdvd/libdvdread/misc/dvdread-config.sh +index e170c7e..25ee893 100644 +--- a/lib/libdvd/libdvdread/misc/dvdread-config.sh ++++ b/lib/libdvd/libdvdread/misc/dvdread-config.sh +@@ -48,9 +48,9 @@ if test "$echo_prefix" = "yes"; then + fi + + if test "$echo_cflags" = "yes"; then +- echo -I$prefix/include $extracflags ++ echo $extracflags + fi + + if test "$echo_libs" = "yes"; then +- echo -L$libdir $dvdreadlib +-fi ++ echo $dvdreadlib ++fi +diff --git a/lib/timidity/configure.in b/lib/timidity/configure.in +index 9f2835b..733470a 100644 +--- a/lib/timidity/configure.in ++++ b/lib/timidity/configure.in +@@ -100,9 +100,9 @@ done + + # add $prefix if specified. + if test "x$prefix" != xNONE -a "x$prefix" != "x$ac_default_prefix" -a "x$prefix" != "x/usr"; then +- LDFLAGS="-L$prefix/lib $LDFLAGS" +- SHLDFLAGS="-L$prefix/lib $SHLDFLAGS" +- CPPFLAGS="-I$prefix/include $CPPFLAGS" ++ LDFLAGS="$LDFLAGS" ++ SHLDFLAGS="$SHLDFLAGS" ++ CPPFLAGS="$CPPFLAGS" + fi + + dnl add --with-includes, --with-libraries +-- +1.8.5.2 + diff --git a/package/xbmc/xbmc-0002-RaspberryPi-Default-Settings.patch b/package/xbmc/xbmc-0002-RaspberryPi-Default-Settings.patch new file mode 100644 index 0000000..43960e6 --- /dev/null +++ b/package/xbmc/xbmc-0002-RaspberryPi-Default-Settings.patch @@ -0,0 +1,168 @@ +From 2541772a3ed71402a620466feb6a337b40f08880 Mon Sep 17 00:00:00 2001 +From: Maxime Hadjinlian <maximeh.hadjinlian@gmail.com> +Date: Sat, 15 Dec 2012 23:41:06 +0100 +Subject: [PATCH] RaspberryPi Default Settings + +Add some default settings if the target platform is the RaspberryPi. +Avoid the fact that the user _MUST_ have an advandcedsettings.xml to be able +to use XBMC properly. + +Signed-off-by: Maxime Hadjinlian <maxime.hadjinlian@gmail.com> +--- + xbmc/settings/AdvancedSettings.cpp | 31 +++++++++++++++++++++++++++ + xbmc/settings/GUISettings.cpp | 8 +++---- + xbmc/settings/GUIWindowSettingsCategory.cpp | 4 ++-- + 3 files changed, 37 insertions(+), 6 deletions(-) + +diff --git a/xbmc/settings/AdvancedSettings.cpp b/xbmc/settings/AdvancedSettings.cpp +index 2cbbf98..42ccabd 100644 +--- a/xbmc/settings/AdvancedSettings.cpp ++++ b/xbmc/settings/AdvancedSettings.cpp +@@ -72,7 +72,11 @@ void CAdvancedSettings::Initialize() + m_karaokeAlwaysEmptyOnCdgs = 1; + m_karaokeUseSongSpecificBackground = 0; + ++ #if defined(TARGET_RASPBERRY_PI) ++ m_audioDefaultPlayer = "omxplayer"; ++ #else + m_audioDefaultPlayer = "paplayer"; ++ #endif + m_audioPlayCountMinimumPercent = 90.0f; + m_audioHost = "default"; + +@@ -93,8 +97,14 @@ void CAdvancedSettings::Initialize() + m_videoBlackBarColour = 0; + m_videoPPFFmpegDeint = "linblenddeint"; + m_videoPPFFmpegPostProc = "ha:128:7,va,dr"; ++ ++ #if defined(TARGET_RASPBERRY_PI) ++ m_videoDefaultPlayer = "omxplayer"; ++ m_videoDefaultDVDPlayer = "omxplayer"; ++ #else + m_videoDefaultPlayer = "dvdplayer"; + m_videoDefaultDVDPlayer = "dvdplayer"; ++ #endif + m_videoIgnoreSecondsAtStart = 3*60; + m_videoIgnorePercentAtEnd = 8.0f; + m_videoPlayCountMinimumPercent = 90.0f; +@@ -287,7 +297,11 @@ void CAdvancedSettings::Initialize() + m_alwaysOnTop = false; + #endif + ++ #if defined(TARGET_RASPBERRY_PI) ++ m_bgInfoLoaderMaxThreads = 2; ++ #else + m_bgInfoLoaderMaxThreads = 5; ++ #endif + + m_iPVRTimeCorrection = 0; + m_iPVRInfoToggleInterval = 3000; +@@ -299,7 +313,12 @@ void CAdvancedSettings::Initialize() + + m_measureRefreshrate = false; + ++ #if defined(TARGET_RASPBERRY_PI) ++ m_cacheMemBufferSize = 1024 * 1024 * 10; ++ #else + m_cacheMemBufferSize = 1024 * 1024 * 20; ++ #endif ++ + m_addonPackageFolderSize = 200; + + m_jsonOutputCompact = true; +@@ -509,11 +528,17 @@ void CAdvancedSettings::ParseSettingsFile(const CStdString &file) + RefreshOverride override = {0}; + + float fps; ++ #if defined(TARGET_RASPBERRY_PI) ++ fps = 23.976; ++ override.fpsmin = fps - 0.01f; ++ override.fpsmax = fps + 0.01f; ++ #else + if (XMLUtils::GetFloat(pRefreshOverride, "fps", fps)) + { + override.fpsmin = fps - 0.01f; + override.fpsmax = fps + 0.01f; + } ++ #endif + + float fpsmin, fpsmax; + if (XMLUtils::GetFloat(pRefreshOverride, "fpsmin", fpsmin) && +@@ -524,11 +549,17 @@ void CAdvancedSettings::ParseSettingsFile(const CStdString &file) + } + + float refresh; ++ #if defined(TARGET_RASPBERRY_PI) ++ refresh = 24.0; ++ override.refreshmin = refresh - 0.01f; ++ override.refreshmax = refresh + 0.01f; ++ #else + if (XMLUtils::GetFloat(pRefreshOverride, "refresh", refresh)) + { + override.refreshmin = refresh - 0.01f; + override.refreshmax = refresh + 0.01f; + } ++ #endif + + float refreshmin, refreshmax; + if (XMLUtils::GetFloat(pRefreshOverride, "refreshmin", refreshmin) && +diff --git a/xbmc/settings/GUISettings.cpp b/xbmc/settings/GUISettings.cpp +index c1820a7..c00fb18 100644 +--- a/xbmc/settings/GUISettings.cpp ++++ b/xbmc/settings/GUISettings.cpp +@@ -537,11 +537,11 @@ void CGUISettings::Initialize() + AddInt(NULL, "input.appleremotesequencetime", 13603, 500, 50, 50, 1000, SPIN_CONTROL_INT_PLUS, MASK_MS, TEXT_OFF); + AddSeparator(in, "input.sep1"); + #endif +- AddBool(in, "input.remoteaskeyboard", 21449, false); ++ AddBool(in, "input.remoteaskeyboard", 21449, true); + #if defined(TARGET_DARWIN_IOS) + AddBool(NULL, "input.enablemouse", 21369, true); + #else +- AddBool(in, "input.enablemouse", 21369, true); ++ AddBool(in, "input.enablemouse", 21369, false); + #endif + #if defined(HAS_SDL_JOYSTICK) + AddBool(in, "input.enablejoystick", 35100, true); +@@ -831,7 +831,7 @@ void CGUISettings::Initialize() + + #ifdef HAS_WEB_SERVER + CSettingsCategory* srvWeb = AddCategory(SETTINGS_SERVICE, "webserver", 33101); +- AddBool(srvWeb, "services.webserver", 263, false); ++ AddBool(srvWeb, "services.webserver", 263, true); + AddString(srvWeb,"services.webserverport", 730, CUtil::CanBindPrivileged()?"80":"8080", EDIT_CONTROL_NUMBER_INPUT, false, 730); + AddString(srvWeb,"services.webserverusername",1048, "xbmc", EDIT_CONTROL_INPUT); + AddString(srvWeb,"services.webserverpassword",733, "", EDIT_CONTROL_HIDDEN_INPUT, true, 733); +@@ -881,7 +881,7 @@ void CGUISettings::Initialize() + AddInt(laf, "lookandfeel.startupwindow",512,1, WINDOW_HOME, 1, WINDOW_PYTHON_END, SPIN_CONTROL_TEXT); + AddString(laf, "lookandfeel.soundskin",15108,"SKINDEFAULT", SPIN_CONTROL_TEXT); + AddSeparator(laf, "lookandfeel.sep2"); +- AddBool(laf, "lookandfeel.enablerssfeeds",13305, true); ++ AddBool(laf, "lookandfeel.enablerssfeeds",13305, false); + AddString(laf, "lookandfeel.rssedit", 21450, "", BUTTON_CONTROL_STANDARD); + + CSettingsCategory* loc = AddCategory(SETTINGS_APPEARANCE, "locale", 14090); +diff --git a/xbmc/settings/GUIWindowSettingsCategory.cpp b/xbmc/settings/GUIWindowSettingsCategory.cpp +index b4cee69..a9bcb7a 100644 +--- a/xbmc/settings/GUIWindowSettingsCategory.cpp ++++ b/xbmc/settings/GUIWindowSettingsCategory.cpp +@@ -1271,7 +1271,7 @@ void CGUIWindowSettingsCategory::OnSettingChanged(CBaseSettingControl *pSettingC + if (!g_application.StartWebServer()) + { + CGUIDialogOK::ShowAndGetInput(g_localizeStrings.Get(33101), "", g_localizeStrings.Get(33100), ""); +- g_guiSettings.SetBool("services.webserver", false); ++ g_guiSettings.SetBool("services.webserver", true); + } + } + else if (strSetting.Equals("services.webserverusername") || strSetting.Equals("services.webserverpassword")) +@@ -1292,7 +1292,7 @@ void CGUIWindowSettingsCategory::OnSettingChanged(CBaseSettingControl *pSettingC + else + { + g_application.StopAirplayServer(true); +- g_guiSettings.SetBool("services.airplay", false); ++ g_guiSettings.SetBool("services.airplay", true); + CZeroconf::GetInstance()->Stop(); + } + #endif +-- +1.7.10.4 diff --git a/package/xbmc/xbmc.mk b/package/xbmc/xbmc.mk new file mode 100644 index 0000000..d05c2f5 --- /dev/null +++ b/package/xbmc/xbmc.mk @@ -0,0 +1,163 @@ +################################################################################ +# +# xbmc +# +################################################################################ + +XBMC_VERSION = 12.3-Frodo +XBMC_SITE = $(call github,xbmc,xbmc,$(XBMC_VERSION)) +XBMC_LICENSE = GPLv2 +XBMC_LICENSE_FILES = LICENSE.GPL +XBMC_DEPENDENCIES = host-gperf host-lzo host-sdl_image host-swig +XBMC_DEPENDENCIES += boost bzip2 expat flac fontconfig freetype jasper jpeg \ + libass libcdio libcurl libfribidi libgcrypt libmad libmodplug libmpeg2 \ + libogg libplist libpng libsamplerate libungif libvorbis libxml2 lzo ncurses \ + openssl pcre python readline sqlite taglib tiff tinyxml yajl zlib + +XBMC_CONF_ENV = \ + PYTHON_VERSION="$(PYTHON_VERSION_MAJOR)" \ + PYTHON_LDFLAGS="-lpython$(PYTHON_VERSION_MAJOR) -lpthread -ldl -lutil -lm" \ + PYTHON_CPPFLAGS="-I$(STAGING_DIR)/usr/include/python$(PYTHON_VERSION_MAJOR)" \ + PYTHON_SITE_PKG="$(STAGING_DIR)/usr/lib/python$(PYTHON_VERSION_MAJOR)/site-packages" \ + PYTHON_NOVERSIONCHECK="no-check" \ + TEXTUREPACKER_NATIVE_ROOT="$(HOST_DIR)/usr" + +XBMC_CONF_OPT += \ + --disable-alsa \ + --disable-crystalhd \ + --disable-debug \ + --disable-dvdcss \ + --disable-gl \ + --disable-hal \ + --disable-joystick \ + --disable-mysql \ + --disable-openmax \ + --disable-optical-drive \ + --disable-projectm \ + --disable-pulse \ + --disable-sdl \ + --disable-ssh \ + --disable-vaapi \ + --disable-vdpau \ + --disable-vtbdecoder \ + --disable-x11 \ + --disable-xrandr \ + --enable-gles \ + --enable-optimizations + +ifeq ($(BR2_PACKAGE_RPI_USERLAND),y) +XBMC_DEPENDENCIES += rpi-userland +XBMC_CONF_OPT += --with-platform=raspberry-pi --enable-player=omxplayer +XBMC_CONF_ENV += INCLUDES="-I$(STAGING_DIR)/usr/include/interface/vcos/pthreads \ + -I$(STAGING_DIR)/usr/include/interface/vmcs_host/linux" +endif + +ifeq ($(BR2_PACKAGE_DBUS),y) +XBMC_DEPENDENCIES += dbus +endif + +ifeq ($(BR2_PACKAGE_XBMC_LIBUSB),y) +XBMC_DEPENDENCIES += libusb-compat +XBMC_CONF_OPT += --enable-libusb +else +XBMC_CONF_OPT += --disable-libusb +endif + +ifeq ($(BR2_PACKAGE_XBMC_LIBMICROHTTPD),y) +XBMC_DEPENDENCIES += libmicrohttpd +XBMC_CONF_OPT += --enable-webserver +else +XBMC_CONF_OPT += --disable-webserver +endif + +ifeq ($(BR2_PACKAGE_XBMC_LIBSMBCLIENT),y) +XBMC_DEPENDENCIES += samba +XBMC_CONF_OPT += --enable-samba +else +XBMC_CONF_OPT += --disable-samba +endif + +ifeq ($(BR2_PACKAGE_XBMC_LIBNFS),y) +XBMC_DEPENDENCIES += libnfs +XBMC_CONF_OPT += --enable-nfs +else +XBMC_CONF_OPT += --disable-nfs +endif + +ifeq ($(BR2_PACKAGE_XBMC_RTMPDUMP),y) +XBMC_DEPENDENCIES += rtmpdump +XBMC_CONF_OPT += --enable-rtmp +else +XBMC_CONF_OPT += --disable-rtmp +endif + +ifeq ($(BR2_PACKAGE_XBMC_LIBBLURAY),y) +XBMC_DEPENDENCIES += libbluray +XBMC_CONF_OPT += --enable-libbluray +else +XBMC_CONF_OPT += --disable-libbluray +endif + +ifeq ($(BR2_PACKAGE_XBMC_LIBSHAIRPLAY),y) +XBMC_DEPENDENCIES += libshairplay +XBMC_CONF_OPT += --enable-airplay +else +XBMC_CONF_OPT += --disable-airplay +endif + +ifeq ($(BR2_PACKAGE_XBMC_AVAHI),y) +XBMC_DEPENDENCIES += avahi +XBMC_CONF_OPT += --enable-avahi +else +XBMC_CONF_OPT += --disable-avahi +endif + +ifeq ($(BR2_PACKAGE_XBMC_LIBCEC),y) +XBMC_DEPENDENCIES += libcec +XBMC_CONF_OPT += --enable-libcec +else +XBMC_CONF_OPT += --disable-libcec +endif + +ifeq ($(BR2_PACKAGE_XBMC_WAVPACK),y) +XBMC_DEPENDENCIES += wavpack +endif + +# Add HOST_DIR to PATH for codegenerator.mk to find swig +define XBMC_BOOTSTRAP + cd $(@D) && PATH=$(HOST_PATH) ./bootstrap +endef +XBMC_PRE_CONFIGURE_HOOKS += XBMC_BOOTSTRAP + +define XBMC_CLEAN_UNUSED_ADDONS + rm -Rf $(TARGET_DIR)/usr/share/xbmc/addons/screensaver.rsxs.plasma + rm -Rf $(TARGET_DIR)/usr/share/xbmc/addons/visualization.milkdrop + rm -Rf $(TARGET_DIR)/usr/share/xbmc/addons/visualization.projectm + rm -Rf $(TARGET_DIR)/usr/share/xbmc/addons/visualization.itunes +endef +XBMC_POST_INSTALL_TARGET_HOOKS += XBMC_CLEAN_UNUSED_ADDONS + +define XBMC_CLEAN_CONFLUENCE_SKIN + find $(TARGET_DIR)/usr/share/xbmc/addons/skin.confluence/media -name *.png -delete + find $(TARGET_DIR)/usr/share/xbmc/addons/skin.confluence/media -name *.jpg -delete +endef +XBMC_POST_INSTALL_TARGET_HOOKS += XBMC_CLEAN_CONFLUENCE_SKIN + +define XBMC_INSTALL_INIT_SYSV + [ -f $(TARGET_DIR)/etc/init.d/S50xbmc ] || \ + $(INSTALL) -D -m 755 package/xbmc/S50xbmc \ + $(TARGET_DIR)/etc/init.d/S50xbmc +endef + +define XBMC_INSTALL_INIT_SYSTEMD + [ -f $(TARGET_DIR)/etc/systemd/system/xbmc.service ] || \ + $(INSTALL) -D -m 644 package/xbmc/xbmc.service \ + $(TARGET_DIR)/etc/systemd/system/xbmc.service + + mkdir -p $(TARGET_DIR)/etc/systemd/system/multi-user.target.wants + + ln -fs ../xbmc.service \ + $(TARGET_DIR)/etc/systemd/system/multi-user.target.wants/xbmc.service +endef + +$(eval $(autotools-package)) diff --git a/package/xbmc/xbmc.service b/package/xbmc/xbmc.service new file mode 100644 index 0000000..3fe5895 --- /dev/null +++ b/package/xbmc/xbmc.service @@ -0,0 +1,12 @@ +[Unit] +Description = XBMC media center +After = network.target + +[Service] +Type = simple +ExecStart = /usr/lib/xbmc/xbmc.bin --standalone -fs -n +Restart = on-failure + +[Install] +WantedBy = multi-user.target +
XBMC is an award-winning free and open source (GPL) software media player and entertainment hub for digital media. This package was originally found at : https://github.com/huceke/buildroot-rbp By gimli <ebsi4711@gmail.com> Signed-off-by: Maxime Hadjinlian <maxime.hadjinlian@gmail.com> Cc: gimli <ebsi4711@gmail.com> --- Changes v7 -> v8: - Fix comments and dependencies on components (Thomas Petazzoni) - Change name for options (Thomas Petazzoni) - Remove depends on external toolchain (Martin Bark) - Fix various indent issues (Thomas Petazzoni) - Fix hook placement (Thomas Petazzoni) - Add host-gperf (Martin Bark) Changes v6 -> v7: - Fix various capitalization issue (Thomas De Schampheleire) - Changes depends on !uclibc to a depends on glibc (Thomas De Schampheleire) - Remove TIFF being selected twice (Jerzy Grzegorek) Changes v5 -> v6: - Fix missing depends on OpenGL (Yann E. Morin) - Remove LIBCEC_RBP Config option (Yann E. Morin) - Fix dependency that were, in the end, not optionnal (Martin Bark) - Fix OpenGL check (Martin Bark) - Uses BR2_HOST_NEEDS_JAVA (Martin Bark) Changes v4 -> v5: - Remove MAKE1, seems to work fine with parallel build. Changes v3 -> v4: - Rework init script - Add systemd startup service Changes v2 -> v3: - Fix indent - Change librtmp to rtmpdump Changes v1 -> v2: - Fix header (Yann E. Morin) - Fix comment on toolchain option (Peter Korsgaard) --- package/Config.in | 1 + package/xbmc/Config.in | 191 +++++++++++++++++++++ package/xbmc/S50xbmc | 41 +++++ package/xbmc/xbmc-0001-Fixup-include-path.patch | 81 +++++++++ .../xbmc-0002-RaspberryPi-Default-Settings.patch | 168 ++++++++++++++++++ package/xbmc/xbmc.mk | 163 ++++++++++++++++++ package/xbmc/xbmc.service | 12 ++ 7 files changed, 657 insertions(+) create mode 100644 package/xbmc/Config.in create mode 100755 package/xbmc/S50xbmc create mode 100644 package/xbmc/xbmc-0001-Fixup-include-path.patch create mode 100644 package/xbmc/xbmc-0002-RaspberryPi-Default-Settings.patch create mode 100644 package/xbmc/xbmc.mk create mode 100644 package/xbmc/xbmc.service