summaryrefslogtreecommitdiff
path: root/audio/xmms/patches
diff options
context:
space:
mode:
authorrh <rh@pkgsrc.org>2001-05-20 20:52:24 +0000
committerrh <rh@pkgsrc.org>2001-05-20 20:52:24 +0000
commit52f1c587abea6631dc96eb007069c3d45a5e4e43 (patch)
tree1269ee11036856b1c7ee9aacb0067f88d48b9537 /audio/xmms/patches
parent6c1b25791606c14ba2b9a54cb500ff480f303755 (diff)
downloadpkgsrc-52f1c587abea6631dc96eb007069c3d45a5e4e43.tar.gz
Update xmms to 1.2.4.
Notable changes include: - localisation support - additional plugins, most notably the ability to play ogg-vorbis files - tons of bugfixes - better sound buffer availability estimates for NetBSD (this hopefully reduces jitter a bit on slower systems).
Diffstat (limited to 'audio/xmms/patches')
-rw-r--r--audio/xmms/patches/patch-aa64
-rw-r--r--audio/xmms/patches/patch-ab12
-rw-r--r--audio/xmms/patches/patch-af42
-rw-r--r--audio/xmms/patches/patch-ag38
-rw-r--r--audio/xmms/patches/patch-ah32
-rw-r--r--audio/xmms/patches/patch-ai22
-rw-r--r--audio/xmms/patches/patch-al12
-rw-r--r--audio/xmms/patches/patch-am10
-rw-r--r--audio/xmms/patches/patch-an10
-rw-r--r--audio/xmms/patches/patch-ao16
-rw-r--r--audio/xmms/patches/patch-ap13
11 files changed, 164 insertions, 107 deletions
diff --git a/audio/xmms/patches/patch-aa b/audio/xmms/patches/patch-aa
index 3e51f7a928e..941670e84ff 100644
--- a/audio/xmms/patches/patch-aa
+++ b/audio/xmms/patches/patch-aa
@@ -1,8 +1,17 @@
-$NetBSD: patch-aa,v 1.3 2000/03/12 20:36:27 tron Exp $
+$NetBSD: patch-aa,v 1.4 2001/05/20 20:52:24 rh Exp $
---- Input/cdaudio/cdaudio.c.orig Thu Jan 27 21:30:36 2000
-+++ Input/cdaudio/cdaudio.c Sun Mar 12 18:00:27 2000
-@@ -113,10 +113,21 @@
+--- Input/cdaudio/cdaudio.c.orig Sun May 20 17:45:46 2001
++++ Input/cdaudio/cdaudio.c
+@@ -95,7 +95,7 @@
+ #define STOP_UNLOCK() pthread_mutex_unlock(&stop_mutex)
+
+
+-#if !defined(CDROMVOLREAD) && !(defined(HAVE_SYS_CDIO_H) && defined(__FreeBSD__))
++#if !defined(CDROMVOLREAD) && !(defined(HAVE_SYS_CDIO_H) && (defined(__NetBSD__) || defined(__FreeBSD__)))
+ static gint volume_left = 100, volume_right = 100;
+ #endif
+
+@@ -139,10 +139,21 @@
if (!cdda_cfg.directory)
cdda_cfg.directory = g_strdup("/cdrom");
# else
@@ -24,16 +33,22 @@ $NetBSD: patch-aa,v 1.3 2000/03/12 20:36:27 tron Exp $
# endif
#else
if (!cdda_cfg.device)
-@@ -280,7 +291,7 @@
- {
- if (cdda_fd < 0)
- return;
+@@ -374,12 +385,12 @@
+ pthread_attr_setdetachstate(attr, PTHREAD_CREATE_DETACHED);
+ }
+
-#if defined(HAVE_SYS_CDIO_H) && defined(__FreeBSD__)
-+#if defined(HAVE_SYS_CDIO_H) && (defined(__FreeBSD__) || defined(__NetBSD__))
- ioctl(cdda_fd, CDIOCSTOP, 0);
++#if defined(HAVE_SYS_CDIO_H) && (defined(__NetBSD__) || defined(__FreeBSD__))
+ /* ioctl(cdda_fd, CDIOCSTOP, 0); */
+ ioctl(cdda_fd, CDIOCPAUSE, 0);
#else
- ioctl(cdda_fd, CDROMSTOP, 0);
-@@ -291,8 +302,8 @@
+ /* ioctl(cdda_fd, CDROMSTOP, 0); */
+- ioctl(cdda_fd, CDROMPAUSE);
++ ioctl(cdda_fd, CDROMPAUSE, 0);
+ #endif
+ close(cdda_fd);
+ cdda_fd = -1;
+@@ -392,8 +403,8 @@
static void cdda_pause(short p)
{
@@ -44,7 +59,7 @@ $NetBSD: patch-aa,v 1.3 2000/03/12 20:36:27 tron Exp $
#else
ioctl(cdda_fd, p ? CDROMPAUSE : CDROMRESUME);
#endif
-@@ -303,7 +314,7 @@
+@@ -404,7 +415,7 @@
{
struct cdda_msf *end, start;
@@ -53,7 +68,7 @@ $NetBSD: patch-aa,v 1.3 2000/03/12 20:36:27 tron Exp $
struct ioc_play_msf msf;
#else
struct cdrom_msf msf;
-@@ -318,7 +329,7 @@
+@@ -419,7 +430,7 @@
else
end = &cd_toc.track[track + 1];
@@ -62,7 +77,7 @@ $NetBSD: patch-aa,v 1.3 2000/03/12 20:36:27 tron Exp $
msf.start_m = start.minute;
msf.start_s = start.second;
msf.start_f = start.frame;
-@@ -342,7 +353,7 @@
+@@ -443,7 +454,7 @@
static int get_time(void)
{
gint frame, start_frame, length;
@@ -71,7 +86,7 @@ $NetBSD: patch-aa,v 1.3 2000/03/12 20:36:27 tron Exp $
struct ioc_read_subchannel subchnl;
struct cd_sub_channel_info subinfo;
-@@ -436,7 +447,7 @@
+@@ -534,7 +545,7 @@
if (!cdda_cfg.use_oss_mixer)
{
@@ -80,7 +95,7 @@ $NetBSD: patch-aa,v 1.3 2000/03/12 20:36:27 tron Exp $
struct ioc_vol vol;
if (cdda_fd != -1)
-@@ -464,7 +475,7 @@
+@@ -562,7 +573,7 @@
static void set_volume(int l, int r)
{
@@ -89,7 +104,7 @@ $NetBSD: patch-aa,v 1.3 2000/03/12 20:36:27 tron Exp $
struct ioc_vol vol;
#else
struct cdrom_volctrl vol;
-@@ -497,7 +508,7 @@
+@@ -595,7 +606,7 @@
{
if (cdda_fd != -1)
{
@@ -98,7 +113,16 @@ $NetBSD: patch-aa,v 1.3 2000/03/12 20:36:27 tron Exp $
vol.vol[0] = vol.vol[2] = (l * 255) / 100;
vol.vol[1] = vol.vol[3] = (r * 255) / 100;
ioctl(cdda_fd, CDIOCSETVOL, &vol);
-@@ -521,6 +532,10 @@
+@@ -605,7 +616,7 @@
+ ioctl(cdda_fd, CDROMVOLCTRL, &vol);
+ #endif
+ }
+-#if !defined(CDROMVOLREAD) && !(defined(HAVE_SYS_CDIO_H) && defined(__FreeBSD__))
++#if !defined(CDROMVOLREAD) && !(defined(HAVE_SYS_CDIO_H) && (defined(__FreeBSD__) || defined(__NetBSD__)))
+ volume_left = l;
+ volume_right = r;
+ #endif
+@@ -619,6 +630,10 @@
#if defined(HAVE_SYS_CDIO_H) && defined(__FreeBSD__)
struct ioc_toc_header tochdr;
struct ioc_read_toc_single_entry tocentry;
@@ -109,7 +133,7 @@ $NetBSD: patch-aa,v 1.3 2000/03/12 20:36:27 tron Exp $
#else
struct cdrom_tochdr tochdr;
struct cdrom_tocentry tocentry;
-@@ -564,6 +579,41 @@
+@@ -662,6 +677,41 @@
info->leadout.minute = tocentry.entry.addr.msf.minute;
info->leadout.second = tocentry.entry.addr.msf.second;
info->leadout.frame = tocentry.entry.addr.msf.frame;
diff --git a/audio/xmms/patches/patch-ab b/audio/xmms/patches/patch-ab
index 5a57e0b7f2d..8ac84feb235 100644
--- a/audio/xmms/patches/patch-ab
+++ b/audio/xmms/patches/patch-ab
@@ -1,13 +1,13 @@
-$NetBSD: patch-ab,v 1.2 2000/03/07 23:03:13 tron Exp $
+$NetBSD: patch-ab,v 1.3 2001/05/20 20:52:24 rh Exp $
---- Makefile.in.orig Mon Jan 31 19:44:29 2000
-+++ Makefile.in Tue Mar 7 23:25:17 2000
-@@ -125,7 +125,7 @@
+--- Makefile.in.orig Tue Nov 28 01:55:55 2000
++++ Makefile.in
+@@ -152,7 +152,7 @@
sidplay_library = @sidplay_library@
xmmsdir = @xmmsdir@
--SUBDIRS = libxmms xmms Output Input Effect General Visualization wmxmms gnomexmms
-+SUBDIRS = libxmms xmms Output Input Effect General Visualization wmxmms
+-SUBDIRS = intl libxmms xmms Output Input Effect General Visualization wmxmms gnomexmms po
++SUBDIRS = intl libxmms xmms Output Input Effect General Visualization wmxmms po
bin_SCRIPTS = xmms-config
diff --git a/audio/xmms/patches/patch-af b/audio/xmms/patches/patch-af
index c4751845c0b..b72c00f7ae5 100644
--- a/audio/xmms/patches/patch-af
+++ b/audio/xmms/patches/patch-af
@@ -1,23 +1,27 @@
-$NetBSD: patch-af,v 1.3 2001/05/06 18:23:52 rh Exp $
+$NetBSD: patch-af,v 1.4 2001/05/20 20:52:24 rh Exp $
---- Output/OSS/audio.c.orig Sun May 6 19:45:56 2001
+--- Output/OSS/audio.c.orig Sat Jul 29 02:19:41 2000
+++ Output/OSS/audio.c
-@@ -574,10 +574,16 @@
- unpause = FALSE;
- remove_prebuffer = FALSE;
+@@ -39,9 +39,22 @@
-+#ifdef __NetBSD__
-+#define DSPNAME "/dev/sound"
-+#else
-+#define DSPNAME "/dev/dsp"
+ static void oss_calc_device_buffer_used(void)
+ {
++#if defined(__NetBSD__) && SOUND_VERSION <= 0x030000
++ struct audio_info info;
+#endif
-+
- if (oss_cfg.audio_device > 0)
-- device_name = g_strdup_printf("/dev/dsp%d", oss_cfg.audio_device);
-+ device_name = g_strdup_printf(DSPNAME "%d", oss_cfg.audio_device);
- else
-- device_name = g_strdup("/dev/dsp");
-+ device_name = g_strdup(DSPNAME);
- fd = open(device_name, O_WRONLY);
- if (fd == -1)
- {
+ audio_buf_info buf_info;
+ if(paused)
+ device_buffer_used = 0;
++#if defined(__NetBSD__) && SOUND_VERSION <= 0x030000
++ /*
++ This is to work around a bug in NetBSD-1.5.1 and earlier, in which
++ the SNDCTL_DSP_GETOSPACE(&buf_info) ioctl was not handled properly.
++ The correct information is always available via the native audio
++ driver, so use that instead.
++ */
++ else if (!ioctl(fd, AUDIO_GETINFO, &info))
++ device_buffer_used = info.play.seek;
++#endif
+ else if (!ioctl(fd, SNDCTL_DSP_GETOSPACE, &buf_info))
+ device_buffer_used = (buf_info.fragstotal * buf_info.fragsize) - buf_info.bytes;
+ }
diff --git a/audio/xmms/patches/patch-ag b/audio/xmms/patches/patch-ag
index 0d4736b28da..3ef9ab05b72 100644
--- a/audio/xmms/patches/patch-ag
+++ b/audio/xmms/patches/patch-ag
@@ -1,28 +1,14 @@
-$NetBSD: patch-ag,v 1.1 2000/03/07 23:03:13 tron Exp $
+$NetBSD: patch-ag,v 1.2 2001/05/20 20:52:24 rh Exp $
---- xmms/eq_graph.c.orig Wed Dec 22 01:43:20 1999
-+++ xmms/eq_graph.c Tue Mar 7 23:25:18 2000
-@@ -74,6 +74,14 @@
- gfloat x[] =
- {0, 11, 23, 35, 47, 59, 71, 83, 97, 109}, yf[10];
+--- Output/OSS/OSS.h.orig Mon May 8 23:09:16 2000
++++ Output/OSS/OSS.h
+@@ -31,6 +31,9 @@
+ #elif defined(HAVE_MACHINE_SOUNDCARD_H)
+ #include <machine/soundcard.h>
+ #endif
++#if defined(__NetBSD__) && SOUND_VERSION <= 0x030000
++#include <sys/audioio.h>
++#endif
-+ /*
-+ * This avoids the init_spline() function to be inlined.
-+ * Inlining the function caused troubles when compiling with
-+ * `-O' (at least on FreeBSD).
-+ */
-+ void (*__init_spline)(gfloat *, gfloat *, gint, gfloat *) =
-+ init_spline;
-+
- src = get_skin_pixmap(SKIN_EQMAIN);
- obj = eg->eg_widget.parent;
- gdk_draw_pixmap(obj, eg->eg_widget.gc, src, 0, 294, eg->eg_widget.x, eg->eg_widget.y, eg->eg_widget.width, eg->eg_widget.height);
-@@ -83,7 +91,7 @@
- cols[i] = gdk_image_get_pixel(img, 0, i);
- gdk_image_destroy(img);
-
-- init_spline(x, cfg.equalizer_bands, 10, yf);
-+ __init_spline(x, cfg.equalizer_bands, 10, yf);
- for (i = 0; i < 109; i++)
- {
- y = 9 - (gint) ((eval_spline(x, cfg.equalizer_bands, yf, 10, i) * 9.0) / 20.0);
+ #include <fcntl.h>
+ #include <unistd.h>
diff --git a/audio/xmms/patches/patch-ah b/audio/xmms/patches/patch-ah
index d10cc8b7e8e..84b395c8de6 100644
--- a/audio/xmms/patches/patch-ah
+++ b/audio/xmms/patches/patch-ah
@@ -1,8 +1,8 @@
-$NetBSD: patch-ah,v 1.2 2001/05/06 18:23:52 rh Exp $
+$NetBSD: patch-ah,v 1.3 2001/05/20 20:52:24 rh Exp $
---- libxmms/util.c.orig Mon Nov 15 17:50:37 1999
+--- libxmms/util.c.orig Mon Oct 2 17:28:41 2000
+++ libxmms/util.c
-@@ -56,7 +56,7 @@
+@@ -68,7 +68,7 @@
gboolean xmms_check_realtime_priority(void)
{
@@ -11,12 +11,26 @@ $NetBSD: patch-ah,v 1.2 2001/05/06 18:23:52 rh Exp $
#ifdef __FreeBSD__
/*
* Check if priority scheduling is enabled in the kernel
-@@ -94,5 +94,8 @@
- usec -= tv.tv_sec * 1000;
- req.tv_usec = usec;
- select(0,NULL,NULL,NULL,&tv);
+@@ -94,11 +94,22 @@
+ #ifdef HAVE_NANOSLEEP
+ struct timespec req;
+
++#ifdef __NetBSD__
++ unsigned long n = usec / 50000;
++ usec %= 50000;
++ do {
+#endif
++
+ req.tv_sec = usec / 1000000;
+ usec -= req.tv_sec * 1000000;
+ req.tv_nsec = usec * 1000;
+
+ nanosleep(&req, NULL);
++
+#ifdef __NetBSD__
+ pthread_yield_np();
- #endif
- }
++ } while (n--);
++#endif
+ #else
+ struct timeval tv;
+
diff --git a/audio/xmms/patches/patch-ai b/audio/xmms/patches/patch-ai
index 289b21fcb1b..1329f3c2ca6 100644
--- a/audio/xmms/patches/patch-ai
+++ b/audio/xmms/patches/patch-ai
@@ -1,10 +1,10 @@
-$NetBSD: patch-ai,v 1.2 2001/05/06 18:23:52 rh Exp $
+$NetBSD: patch-ai,v 1.3 2001/05/20 20:52:24 rh Exp $
---- xmms/main.c.orig Mon Jan 31 19:35:16 2000
+--- xmms/main.c.orig Mon Nov 20 16:45:10 2000
+++ xmms/main.c
-@@ -34,6 +34,23 @@
- #include "libxmms/util.h"
- #include "libxmms/dga.h"
+@@ -35,6 +35,23 @@
+ #include "libxmms/dirbrowser.h"
+ #include "xmms_mini.xpm"
+#ifdef __NetBSD__
+#include <gtk/gtk.h>
@@ -23,10 +23,10 @@ $NetBSD: patch-ai,v 1.2 2001/05/06 18:23:52 rh Exp $
+}
+#endif
+
- GtkWidget *mainwin, *mainwin_filesel = NULL, *mainwin_url_window = NULL;
+ GtkWidget *mainwin, *mainwin_url_window = NULL, *mainwin_dir_browser = NULL;
GtkWidget *mainwin_jtt = NULL, *mainwin_jtf = NULL;
GtkItemFactory *mainwin_options_menu, *mainwin_songname_menu, *mainwin_vis_menu;
-@@ -2945,7 +2962,7 @@
+@@ -3232,7 +3249,7 @@
gchar *filename;
gint i;
gboolean have_display = FALSE;
@@ -35,7 +35,7 @@ $NetBSD: patch-ai,v 1.2 2001/05/06 18:23:52 rh Exp $
struct sched_param sparam;
#endif
-@@ -2988,7 +3005,7 @@
+@@ -3283,7 +3300,7 @@
if (geteuid() == 0)
{
@@ -44,13 +44,13 @@ $NetBSD: patch-ai,v 1.2 2001/05/06 18:23:52 rh Exp $
if (cfg.use_realtime)
{
sparam.sched_priority = sched_get_priority_max(SCHED_RR);
-@@ -3106,6 +3123,11 @@
- playlist_start_get_info_thread();
+@@ -3401,6 +3418,11 @@
+ /* enable_x11r5_session_management(argc, argv); */
sm_init(argc, argv);
+
+#ifdef __NetBSD__
-+ gtk_timeout_add (200, pth_nbschedule, NULL);
++ gtk_timeout_add (150, pth_nbschedule, NULL);
+#endif
+
gtk_main();
diff --git a/audio/xmms/patches/patch-al b/audio/xmms/patches/patch-al
index 3e6763729d7..ffc128419cd 100644
--- a/audio/xmms/patches/patch-al
+++ b/audio/xmms/patches/patch-al
@@ -1,13 +1,13 @@
-$NetBSD: patch-al,v 1.1 2000/03/16 23:00:57 tron Exp $
+$NetBSD: patch-al,v 1.2 2001/05/20 20:52:24 rh Exp $
---- xmms/Makefile.in.orig Mon Jan 31 19:44:31 2000
-+++ xmms/Makefile.in Thu Mar 16 23:45:14 2000
-@@ -152,7 +152,7 @@
+--- xmms/Makefile.in.orig Tue Nov 28 01:55:58 2000
++++ xmms/Makefile.in
+@@ -179,7 +179,7 @@
DEFS = @DEFS@ -I. -I$(srcdir) -I..
CPPFLAGS = @CPPFLAGS@
LDFLAGS = @LDFLAGS@
-LIBS = @LIBS@
+LIBS = @LIBS@ @LIBMIKMOD_LIBS@ @XML_LIBS@
xmms_OBJECTS = bmp.o skin.o util.o output.o fft.o input.o effect.o \
- general.o visualization.o pluginenum.o playlist.o controlsocket.o \
- dock.o widget.o sbutton.o pbutton.o tbutton.o textbox.o menurow.o \
+ general.o visualization.o dga.o fullscreen.o pluginenum.o playlist.o \
+ controlsocket.o dock.o widget.o sbutton.o pbutton.o tbutton.o textbox.o \
diff --git a/audio/xmms/patches/patch-am b/audio/xmms/patches/patch-am
index 3be697a5c72..9d5f03c5cfe 100644
--- a/audio/xmms/patches/patch-am
+++ b/audio/xmms/patches/patch-am
@@ -1,13 +1,13 @@
-$NetBSD: patch-am,v 1.1 2000/08/14 14:20:59 wiz Exp $
+$NetBSD: patch-am,v 1.2 2001/05/20 20:52:24 rh Exp $
---- Output/OSS/Makefile.in.orig Mon Jan 31 19:44:33 2000
-+++ Output/OSS/Makefile.in Mon Aug 14 16:01:15 2000
-@@ -136,7 +136,7 @@
+--- Output/OSS/Makefile.in.orig Tue Nov 28 01:56:02 2000
++++ Output/OSS/Makefile.in
+@@ -163,7 +163,7 @@
libdir = $(plugindir)/$(OUTPUT_PLUGIN_DIR)
libOSS_la_LDFLAGS = $(ossldflags)
-libOSS_la_LIBADD = @GTK_LIBS@ @PTHREAD_LIBS@
+libOSS_la_LIBADD = @GTK_LIBS@ @PTHREAD_LIBS@ -lossaudio
libOSS_la_SOURCES = $(osssources)
- INCLUDES = @GTK_CFLAGS@ @OSS_CFLAGS@
+ INCLUDES = @GTK_CFLAGS@ @OSS_CFLAGS@ -I$(top_builddir)/intl
mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
diff --git a/audio/xmms/patches/patch-an b/audio/xmms/patches/patch-an
index 7b2f0ab2105..8a9bde7fb5b 100644
--- a/audio/xmms/patches/patch-an
+++ b/audio/xmms/patches/patch-an
@@ -1,10 +1,10 @@
-$NetBSD: patch-an,v 1.1 2000/08/14 14:20:59 wiz Exp $
+$NetBSD: patch-an,v 1.2 2001/05/20 20:52:25 rh Exp $
---- Input/cdaudio/Makefile.in.orig Mon Jan 31 19:44:37 2000
-+++ Input/cdaudio/Makefile.in Mon Aug 14 16:00:37 2000
-@@ -139,7 +139,7 @@
+--- Input/cdaudio/Makefile.in.orig Tue Nov 28 01:56:12 2000
++++ Input/cdaudio/Makefile.in
+@@ -166,7 +166,7 @@
- INCLUDES = @GTK_CFLAGS@
+ INCLUDES = @GTK_CFLAGS@ @XML_CFLAGS@ -I$(top_buiddir)/intl
libcdaudio_la_LDFLAGS = $(cdaudioldflags)
-libcdaudio_la_LIBADD = @GTK_LIBS@ @XML_LIBS@
+libcdaudio_la_LIBADD = @GTK_LIBS@ @XML_LIBS@ -lossaudio
diff --git a/audio/xmms/patches/patch-ao b/audio/xmms/patches/patch-ao
new file mode 100644
index 00000000000..bd40839dc04
--- /dev/null
+++ b/audio/xmms/patches/patch-ao
@@ -0,0 +1,16 @@
+$NetBSD: patch-ao,v 1.1 2001/05/20 20:52:25 rh Exp $
+
+--- configure.orig Sun May 20 17:28:50 2001
++++ configure
+@@ -7339,7 +7339,11 @@
+ cat > conftest.$ac_ext <<EOF
+ #line 7341 "configure"
+ #include "confdefs.h"
++#ifdef __NetBSD__
++#error Sorry, no native wide character support functions, yet!
++#else
+ #include <$ac_hdr>
++#endif
+ EOF
+ ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
+ { (eval echo configure:7346: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
diff --git a/audio/xmms/patches/patch-ap b/audio/xmms/patches/patch-ap
new file mode 100644
index 00000000000..d84238bfc09
--- /dev/null
+++ b/audio/xmms/patches/patch-ap
@@ -0,0 +1,13 @@
+$NetBSD: patch-ap,v 1.1 2001/05/20 20:52:25 rh Exp $
+
+--- po/Makefile.in.in.orig Sun May 20 18:00:16 2001
++++ po/Makefile.in.in
+@@ -18,7 +18,7 @@
+
+ prefix = @prefix@
+ exec_prefix = @exec_prefix@
+-datadir = $(prefix)/@DATADIRNAME@
++datadir = @datadir@
+ localedir = $(datadir)/locale
+ gnulocaledir = $(prefix)/share/locale
+ gettextsrcdir = $(prefix)/share/gettext/po