diff options
7 files changed, 505 insertions, 0 deletions
diff --git a/xfce-extra/xfce4-battery-plugin/ChangeLog b/xfce-extra/xfce4-battery-plugin/ChangeLog new file mode 100644 index 000000000000..b6eb9f2431b0 --- /dev/null +++ b/xfce-extra/xfce4-battery-plugin/ChangeLog @@ -0,0 +1,12 @@ +# ChangeLog for xfce-extra/xfce4-battery-plugin +# Copyright 1999-2009 Gentoo Foundation; Distributed under the GPL v2 +# $Header: /var/cvsroot/gentoo-x86/xfce-extra/xfce4-battery-plugin/ChangeLog,v 1.1 2009/08/25 10:34:19 ssuominen Exp $ + +*xfce4-battery-plugin-0.5.1 (25 Aug 2009) + + 25 Aug 2009; Samuli Suominen <ssuominen@gentoo.org> + +xfce4-battery-plugin-0.5.1.ebuild, +files/0.5.1-2.6.24-headers.patch, + +files/0.5.1-freebsd.patch, +files/0.5.1-libacpi.patch, + +files/0.5.1-sysfs.patch: + Rename xfce4-battery to xfce4-battery-plugin. + diff --git a/xfce-extra/xfce4-battery-plugin/files/0.5.1-2.6.24-headers.patch b/xfce-extra/xfce4-battery-plugin/files/0.5.1-2.6.24-headers.patch new file mode 100644 index 000000000000..080707a3be3f --- /dev/null +++ b/xfce-extra/xfce4-battery-plugin/files/0.5.1-2.6.24-headers.patch @@ -0,0 +1,12 @@ +--- xfce4-battery-plugin-0.5.0/panel-plugin/libapm.h.orig 2008-03-18 20:10:58.000000000 +0100 ++++ xfce4-battery-plugin-0.5.0/panel-plugin/libapm.h 2008-03-18 20:14:45.000000000 +0100 +@@ -17,8 +17,8 @@ + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + */ + +-#include <linux/apm_bios.h> + #include <sys/types.h> ++#include <linux/apm_bios.h> + + #define APM_PROC "/proc/apm" + #define APM_DEVICE "/dev/apm_bios" diff --git a/xfce-extra/xfce4-battery-plugin/files/0.5.1-freebsd.patch b/xfce-extra/xfce4-battery-plugin/files/0.5.1-freebsd.patch new file mode 100644 index 000000000000..1d929c9b7f3d --- /dev/null +++ b/xfce-extra/xfce4-battery-plugin/files/0.5.1-freebsd.patch @@ -0,0 +1,31 @@ +--- panel-plugin/battery.c.orig 2008-09-04 22:53:40.000000000 +0200 ++++ panel-plugin/battery.c 2008-09-08 18:12:12.000000000 +0200 +@@ -382,6 +382,7 @@ + rate = last_rate; + } + ++#ifdef __linux__ + charge = (((float)ccapacity)/((float)lcapacity))*100; + + if ( last_acline ) +@@ -394,6 +395,20 @@ + + last_acline = acline; + ++#elif __FreeBSD__ ++ charge = acpistate->percentage; ++ ++ if ( last_acline ) ++ time_remaining = acpistate->rtime; ++ else ++ time_remaining = acpistate->rtime; ++ ++ if ( time_remaining < 0 ) ++ time_remaining = 0; ++ ++ last_acline = acline; ++#endif ++ + } + #ifdef __linux__ + else { diff --git a/xfce-extra/xfce4-battery-plugin/files/0.5.1-libacpi.patch b/xfce-extra/xfce4-battery-plugin/files/0.5.1-libacpi.patch new file mode 100644 index 000000000000..c683b3e002f8 --- /dev/null +++ b/xfce-extra/xfce4-battery-plugin/files/0.5.1-libacpi.patch @@ -0,0 +1,56 @@ +diff -ur xfce4-battery-plugin-0.5.0.orig/panel-plugin/libacpi.c xfce4-battery-plugin-0.5.0/panel-plugin/libacpi.c +--- xfce4-battery-plugin-0.5.0.orig/panel-plugin/libacpi.c 2007-01-17 19:56:51.000000000 +0200 ++++ xfce4-battery-plugin-0.5.0/panel-plugin/libacpi.c 2007-02-09 16:34:40.000000000 +0200 +@@ -30,6 +30,7 @@ + #include <stdlib.h> + #include <sys/types.h> + #include <dirent.h> ++#include <glob.h> + + #if HAVE_SYSCTL + +@@ -181,6 +182,22 @@ + #endif + #endif + ++/* expand file name and fopen first match */ ++static FILE * ++fopen_glob(const char *name, const char *mode) ++{ ++ glob_t globbuf; ++ FILE *fd; ++ ++ if (glob(name, 0, NULL, &globbuf) != 0) ++ return NULL; ++ ++ fd = fopen(globbuf.gl_pathv[0], mode); ++ globfree(&globbuf); ++ ++ return fd; ++} ++ + /* see if we have ACPI support */ + int check_acpi(void) + { +@@ -693,7 +710,7 @@ + else return 0; + } + proc_fan_status="/proc/acpi/fan/*/state"; +- if ( (fp=fopen(proc_fan_status, "r")) == NULL ) return 0; ++ if ( (fp=fopen_glob(proc_fan_status, "r")) == NULL ) return 0; + + fgets(line,255,fp); + fclose(fp); +@@ -706,10 +723,10 @@ + { + #ifdef __linux__ + FILE *fp; +- char *proc_temperature="/proc/acpi/thermal_zone/*0/temperature"; ++ char *proc_temperature="/proc/acpi/thermal_zone/*/temperature"; + static char *p,line[256]; + +- if ( (fp=fopen(proc_temperature, "r")) == NULL) return NULL; ++ if ( (fp=fopen_glob(proc_temperature, "r")) == NULL) return NULL; + fgets(line,255,fp); + fclose(fp); + p=strtok(line," "); diff --git a/xfce-extra/xfce4-battery-plugin/files/0.5.1-sysfs.patch b/xfce-extra/xfce4-battery-plugin/files/0.5.1-sysfs.patch new file mode 100644 index 000000000000..640048f519f1 --- /dev/null +++ b/xfce-extra/xfce4-battery-plugin/files/0.5.1-sysfs.patch @@ -0,0 +1,356 @@ +diff -ru xfce4-battery-plugin-0.5.0.orig/panel-plugin/libacpi.c xfce4-battery-plugin-0.5.0-fixed/panel-plugin/libacpi.c +--- xfce4-battery-plugin-0.5.0.orig/panel-plugin/libacpi.c 2008-04-06 02:56:10.502679698 +0200 ++++ xfce4-battery-plugin-0.5.0-fixed/panel-plugin/libacpi.c 2008-04-06 03:15:11.306678469 +0200 +@@ -54,6 +54,10 @@ + + static char batteries[MAXBATT][128]; + static char battinfo[MAXBATT][128]; ++/* path to AC adapter because not all AC adapter are listed ++in /sys/class/power_supply/AC/ this obviously only supports one AC adapter. */ ++static char sysfsacdir[128]; ++ + #ifndef __linux__ + #if HAVE_SYSCTL + static int +@@ -181,9 +185,76 @@ + #endif + #endif + ++int check_acpi_sysfs(void) ++{ ++ DIR *sysfs; ++ struct dirent *batt; ++ char *name; ++ FILE *typefile; ++ char typepath[128]; ++ char tmptype[8]; ++ ++ sysfs = opendir("/sys/class/power_supply"); ++ if (sysfs == 0) ++ { ++ #ifdef DEBUG ++ printf("DBG:No acpi support for sysfs. Trying procfs...\n"); ++ #endif ++ return 2; ++ } ++ ++ while ((batt = readdir(sysfs))) ++ { ++ name = batt->d_name; ++ if (!strncmp(".", name, 1)) continue; ++ /* check whether /sys/class/power_supply/$name/type exists and ++ contains "Battery" or "Mains" */ ++ sprintf(typepath, "/sys/class/power_supply/%s/type",name); ++ if(!(typefile = fopen(typepath, "r"))) continue; ++ fgets(tmptype, 8, typefile); ++ fclose(typefile); ++ if(strncmp("Battery", tmptype, 7)==0) ++ { ++ sprintf(batteries[batt_count], "/sys/class/power_supply/%s", name); ++ #ifdef DEBUG ++ printf("DBG:battery number %d at:\n",batt_count); ++ printf("DBG:sysfs dir->%s\n",batteries[batt_count]); ++ printf("DBG:------------------------\n"); ++ #endif ++ batt_count++; ++ } ++ /* I guess that the type of the AC adapter is always "Mains" (?) */ ++ else if(strncmp("Mains", tmptype, 5)==0){ ++ sprintf(sysfsacdir, "/sys/class/power_supply/%s", name); ++ #ifdef DEBUG ++ printf("DBG:sysfs AC dir->%s\n",sysfsacdir); ++ printf("DBG:------------------------\n"); ++ #endif ++ } ++ } ++ closedir(sysfs); ++ if ( batt_count == 0 ) ++ { ++#ifdef DEBUG ++ printf("DBG:No acpi support for sysfs. Trying procfs...\n"); ++#endif ++ acpi_sysfs = 0; ++ return 2; ++ } ++ else ++ { ++ acpi_sysfs = 1; ++ return 0; ++ } ++} ++ + /* see if we have ACPI support */ + int check_acpi(void) + { ++#ifdef __linux__ ++ if ( check_acpi_sysfs() == 0 ) ++ return 0; ++#endif + DIR *battdir; + struct dirent *batt; + char *name; +@@ -262,9 +333,82 @@ + #endif + } + ++int read_sysfs_int(char* filename) ++{ ++ FILE* f; ++ f = fopen(filename,"r"); ++ if ( !f ) ++ { ++#ifdef DEBUG ++ printf("DBG:Could not open %s\n",filename); ++#endif ++ return 0; ++ } ++ int out; ++ fscanf(f,"%d",&out); ++ fclose(f); ++ return out; ++} ++ ++char* read_sysfs_string(char* filename) ++{ ++ FILE* f; ++ f = fopen(filename,"r"); ++ if ( !f ) ++ { ++#ifdef DEBUG ++ printf("DBG:Could not open %s\n",filename); ++#endif ++ return NULL; ++ } ++ fscanf(f,"%s",buf2); ++ fclose(f); ++ return buf2; ++} ++ ++int read_acad_state_sysfs(void) ++{ ++ DIR *sysfs; ++ struct dirent *propety; ++ char *name; ++ char onlinefilepath[128]; ++ ++ sysfs = opendir(sysfsacdir); ++ if (sysfs == 0) ++ { ++ #ifdef DEBUG ++ printf("DBG:Can't open %s",sysfsacdir); ++ #endif ++ return 0; ++ } ++ closedir(sysfs); ++ ++ if (!acadstate) acadstate=(ACADstate *)malloc(sizeof(ACADstate)); ++ /* this code doesn't make much sense.. why look at the whole directory?! ++ while ((propety = readdir(sysfs))) ++ { ++ name = propety->d_name; ++ if (!strncmp(".", name, 1) || !strncmp("..", name, 2)) continue; ++ ++ if (strcmp(name,"online") == 0) ++ { ++ acadstate->state = ( read_sysfs_int("/sys/class/power_supply/AC/online") == 1 ) ; ++ } ++ } ++ */ ++ sprintf(onlinefilepath, "%s/online", sysfsacdir); ++ /* if onlinefilepath doesn't exist read_sysfs_int() will return 0 ++ so acadstate->state will be 0, that should be ok */ ++ acadstate->state = ( read_sysfs_int(onlinefilepath) == 1 ); ++ ++ return acadstate->state; ++} ++ + int read_acad_state(void) + { + #ifdef __linux__ ++ if (acpi_sysfs) ++ return read_acad_state_sysfs(); + FILE *acpi; + char *ptr; + char stat; +@@ -354,20 +498,83 @@ + #endif + } + ++int read_acpi_info_sysfs(int battery) ++{ ++ DIR *sysfs; ++ struct dirent *propety; ++ char *name; ++ ++ sysfs = opendir(batteries[battery]); ++ if (sysfs == 0) ++ { ++ #ifdef DEBUG ++ printf("DBG:Can't open %s!\n", batteries[battery]); ++ #endif ++ return 0; ++ } ++ /* malloc.. might explain the random battery level values on 2.6.24 ++ systems (energe_full is called charge_full so the value isn't initialised ++ and some random data from the heap is displayed..) ++ if (!acpiinfo) acpiinfo=(ACPIinfo *)malloc(sizeof(ACPIinfo)); ++ */ ++ if (!acpiinfo) acpiinfo=(ACPIinfo *)calloc(1, sizeof(ACPIinfo)); ++ ++ while ((propety = readdir(sysfs))) ++ { ++ name = propety->d_name; ++ if (!strncmp(".", name, 1) || !strncmp("..", name, 2)) continue; ++ /* at least on my system this is called charge_full */ ++ if ((strcmp(name,"energy_full") == 0) || (strcmp(name,"charge_full") == 0)) ++ { ++ sprintf(buf,"%s/%s",batteries[battery], name); ++ acpiinfo->last_full_capacity = read_sysfs_int(buf); ++ } ++ if ((strcmp(name,"energy_full_design") == 0) || (strcmp(name,"charge_full_design") == 0)) ++ { ++ sprintf(buf,"%s/%s",batteries[battery], name); ++ acpiinfo->design_capacity = read_sysfs_int(buf); ++ } ++ if (strcmp(name,"technology") == 0) ++ { ++ char *tmp; ++ sprintf(buf,"%s/%s",batteries[battery], name); ++ tmp = read_sysfs_string(buf); ++ if (tmp != NULL) ++ { ++ if (strcmp(tmp,"Li-ion") == 0) ++ acpiinfo->battery_technology = 1; ++ else ++ acpiinfo->battery_technology = 0; ++ } ++ } ++ if (strcmp(name,"present") == 0) ++ { ++ sprintf(buf,"%s/%s",batteries[battery], name); ++ acpiinfo->present = read_sysfs_int(buf); ++ } ++ } ++ closedir(sysfs); ++ return acpiinfo->present; ++} ++ + int read_acpi_info(int battery) + { + #ifdef __linux__ +- FILE *acpi; +- char *ptr; +- char stat; +- int temp; +- + if (battery > MAXBATT) { + #ifdef DEBUG + printf("DBG: error, battery > MAXBATT (%d)\n",MAXBATT); + #endif + return 0; + } ++ ++ if (acpi_sysfs) ++ return read_acpi_info_sysfs(battery); ++ ++ FILE *acpi; ++ char *ptr; ++ char stat; ++ int temp; ++ + if (!(acpi = fopen (battinfo[battery], "r"))) { + #ifdef DEBUG + printf("DBG:cannot open %s for read!\n",battinfo[battery]); +@@ -514,9 +721,80 @@ + + } + ++int read_acpi_state_sysfs(int battery) ++{ ++ DIR *sysfs; ++ struct dirent *propety; ++ char *name; ++ ++ sysfs = opendir(batteries[battery]); ++ if (sysfs == 0) ++ { ++ #ifdef DEBUG ++ printf("DBG:Can't open %s!\n", batteries[battery]); ++ #endif ++ return 0; ++ } ++ ++ /* again it might be better to use calloc ++ if (!acpistate) acpistate=(ACPIstate *)malloc(sizeof(ACPIstate)); ++ */ ++ if (!acpistate) acpistate=(ACPIstate *)calloc(1, sizeof(ACPIstate)); ++ ++ while ((propety = readdir(sysfs))) ++ { ++ name = propety->d_name; ++ if (!strncmp(".", name, 1) || !strncmp("..", name, 2)) continue; ++ ++ if (strcmp(name,"status") == 0) ++ { ++ char *tmp; ++ sprintf(buf,"%s/%s",batteries[battery], name); ++ tmp = read_sysfs_string(buf); ++ if ( tmp != NULL ) ++ { ++ if (strcmp(tmp,"Charging") == 0) ++ acpistate->state = CHARGING; ++ else if (strcmp(tmp,"Discharging") == 0) ++ acpistate->state = DISCHARGING; ++ else if (strcmp(tmp,"Full") == 0) ++ acpistate->state = POWER; ++ else ++ acpistate->state = UNKNOW; ++ } ++ } ++ /* on my system this is called charge_now */ ++ if ((strcmp(name,"energy_now") == 0) || (strcmp(name,"charge_now") == 0)) ++ { ++ sprintf(buf,"%s/%s",batteries[battery], name); ++ acpistate->rcapacity = read_sysfs_int(buf); ++ acpistate->percentage = (((float) acpistate->rcapacity)/acpiinfo->last_full_capacity) * 100; ++ } ++ if (strcmp(name,"current_now") == 0) ++ { ++ sprintf(buf,"%s/%s",batteries[battery], name); ++ acpistate->prate = read_sysfs_int(buf); ++ if ( acpistate->prate < 0 ) ++ acpistate->prate = 0; ++ if ( acpistate->prate > 0 ) ++ acpistate->rtime = (((float) acpistate->rcapacity) / acpistate->prate) * 60; ++ } ++ if (strcmp(name,"voltage_now") == 0) ++ { ++ sprintf(buf,"%s/%s",batteries[battery], name); ++ acpistate->pvoltage = read_sysfs_int(buf); ++ } ++ } ++ closedir(sysfs); ++ return acpiinfo->present; ++} ++ + int read_acpi_state(int battery) + { + #ifdef __linux__ ++ if (acpi_sysfs) ++ return read_acpi_state_sysfs(battery); ++ + FILE *acpi; + char *ptr; + char stat; +diff -ru xfce4-battery-plugin-0.5.0.orig/panel-plugin/libacpi.h xfce4-battery-plugin-0.5.0-fixed/panel-plugin/libacpi.h +--- xfce4-battery-plugin-0.5.0.orig/panel-plugin/libacpi.h 2007-01-17 18:56:51.000000000 +0100 ++++ xfce4-battery-plugin-0.5.0-fixed/panel-plugin/libacpi.h 2008-04-05 22:13:55.522679792 +0200 +@@ -80,6 +80,8 @@ + int batt_count; + /* temp buffer */ + char buf[512]; ++char buf2[512]; ++int acpi_sysfs; + #else + extern int batt_count; + extern ACPIstate *acpistate; diff --git a/xfce-extra/xfce4-battery-plugin/metadata.xml b/xfce-extra/xfce4-battery-plugin/metadata.xml new file mode 100644 index 000000000000..d56729e92f8e --- /dev/null +++ b/xfce-extra/xfce4-battery-plugin/metadata.xml @@ -0,0 +1,5 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE pkgmetadata SYSTEM "http://www.gentoo.org/dtd/metadata.dtd"> +<pkgmetadata> + <herd>xfce</herd> +</pkgmetadata> diff --git a/xfce-extra/xfce4-battery-plugin/xfce4-battery-plugin-0.5.1.ebuild b/xfce-extra/xfce4-battery-plugin/xfce4-battery-plugin-0.5.1.ebuild new file mode 100644 index 000000000000..f814422a9102 --- /dev/null +++ b/xfce-extra/xfce4-battery-plugin/xfce4-battery-plugin-0.5.1.ebuild @@ -0,0 +1,33 @@ +# Copyright 1999-2009 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 +# $Header: /var/cvsroot/gentoo-x86/xfce-extra/xfce4-battery-plugin/xfce4-battery-plugin-0.5.1.ebuild,v 1.1 2009/08/25 10:34:19 ssuominen Exp $ + +EAPI=2 +inherit xfconf + +DESCRIPTION="Battery status panel plugin" +HOMEPAGE="http://www.xfce.org/" +SRC_URI="mirror://xfce/src/panel-plugins/${PN}/0.5/${P}.tar.bz2" + +LICENSE="GPL-2 LGPL-2" +SLOT="0" +KEYWORDS="amd64 arm ppc x86 ~x86-fbsd" +IUSE="debug" + +RDEPEND=">=x11-libs/gtk+-2.6:2 + >=xfce-base/xfce4-panel-4.3.90.2 + >=xfce-base/libxfce4util-4.3.90.2 + >=xfce-base/libxfcegui4-4.3.90.2" +DEPEND="${RDEPEND} + dev-util/pkgconfig + dev-util/intltool" + +pkg_setup() { + PATCHES=( "${FILESDIR}/${PV}-freebsd.patch" + "${FILESDIR}/${PV}-libacpi.patch" + "${FILESDIR}/${PV}-2.6.24-headers.patch" + "${FILESDIR}/${PV}-sysfs.patch" ) + DOCS="AUTHORS ChangeLog README" + XFCONF="--disable-dependency-tracking + $(use_enable debug)" +} |