summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRobin H. Johnson <robbat2@gentoo.org>2015-08-08 13:49:04 -0700
committerRobin H. Johnson <robbat2@gentoo.org>2015-08-08 17:38:18 -0700
commit56bd759df1d0c750a065b8c845e93d5dfa6b549d (patch)
tree3f91093cdb475e565ae857f1c5a7fd339e2d781e /app-misc/lcd4linux
downloadgentoo-56bd759df1d0c750a065b8c845e93d5dfa6b549d.tar.gz
gentoo-56bd759df1d0c750a065b8c845e93d5dfa6b549d.tar.bz2
gentoo-56bd759df1d0c750a065b8c845e93d5dfa6b549d.zip
proj/gentoo: Initial commit
This commit represents a new era for Gentoo: Storing the gentoo-x86 tree in Git, as converted from CVS. This commit is the start of the NEW history. Any historical data is intended to be grafted onto this point. Creation process: 1. Take final CVS checkout snapshot 2. Remove ALL ChangeLog* files 3. Transform all Manifests to thin 4. Remove empty Manifests 5. Convert all stale $Header$/$Id$ CVS keywords to non-expanded Git $Id$ 5.1. Do not touch files with -kb/-ko keyword flags. Signed-off-by: Robin H. Johnson <robbat2@gentoo.org> X-Thanks: Alec Warner <antarus@gentoo.org> - did the GSoC 2006 migration tests X-Thanks: Robin H. Johnson <robbat2@gentoo.org> - infra guy, herding this project X-Thanks: Nguyen Thai Ngoc Duy <pclouds@gentoo.org> - Former Gentoo developer, wrote Git features for the migration X-Thanks: Brian Harring <ferringb@gentoo.org> - wrote much python to improve cvs2svn X-Thanks: Rich Freeman <rich0@gentoo.org> - validation scripts X-Thanks: Patrick Lauer <patrick@gentoo.org> - Gentoo dev, running new 2014 work in migration X-Thanks: Michał Górny <mgorny@gentoo.org> - scripts, QA, nagging X-Thanks: All of other Gentoo developers - many ideas and lots of paint on the bikeshed
Diffstat (limited to 'app-misc/lcd4linux')
-rw-r--r--app-misc/lcd4linux/Manifest1
-rw-r--r--app-misc/lcd4linux/files/lcd4linux-0.10.1_rc2-autoconf-2.65.patch20
-rw-r--r--app-misc/lcd4linux/files/lcd4linux-0.10.1_rc2-missing-header.patch12
-rw-r--r--app-misc/lcd4linux/files/lcd4linux-0.10.1_rc2-mpd.patch374
-rw-r--r--app-misc/lcd4linux/files/lcd4linux-0.10.1_rc2-nordtsc.patch187
-rw-r--r--app-misc/lcd4linux/files/lcd4linux-0.10.1_rc2-usbdebug.patch121
-rw-r--r--app-misc/lcd4linux/files/lcd4linux-0.10.1_rc2-warnings.patch64
-rw-r--r--app-misc/lcd4linux/files/lcd4linux-0.10.1_rc2.initd23
-rw-r--r--app-misc/lcd4linux/lcd4linux-0.10.1_rc2-r3.ebuild175
-rw-r--r--app-misc/lcd4linux/metadata.xml16
10 files changed, 993 insertions, 0 deletions
diff --git a/app-misc/lcd4linux/Manifest b/app-misc/lcd4linux/Manifest
new file mode 100644
index 00000000000..398d2efe490
--- /dev/null
+++ b/app-misc/lcd4linux/Manifest
@@ -0,0 +1 @@
+DIST lcd4linux-0.10.1-RC2.tar.gz 386188 SHA256 9e69ded08dc9a8c75f36a3c020e7aa96b90313d91b2f58add6d4dfff1f8861b0 SHA512 8c4299f50ab4068d4106ba32309f4f66bfedf382a4aed7495cf400d22c57c22c4dfabd80f7e4355417c5c0d964e69f0c268a50bae6924b759b720bd728a969f9 WHIRLPOOL 71c4189e4e9a229e448d44097c2d6e5ab7c71fa97a92815438307f728b86ee238a114a14c73511e473f4c26bbc52a8b67a1a00693c7ef789c909b64165a3f075
diff --git a/app-misc/lcd4linux/files/lcd4linux-0.10.1_rc2-autoconf-2.65.patch b/app-misc/lcd4linux/files/lcd4linux-0.10.1_rc2-autoconf-2.65.patch
new file mode 100644
index 00000000000..6b176a6ecf6
--- /dev/null
+++ b/app-misc/lcd4linux/files/lcd4linux-0.10.1_rc2-autoconf-2.65.patch
@@ -0,0 +1,20 @@
+--- ac_python_devel.m4.orig 2010-03-06 01:28:40.000000000 +0200
++++ ac_python_devel.m4 2010-03-06 01:29:47.000000000 +0200
+@@ -68,7 +68,7 @@
+ PYTHON_EXTRA_LIBS and PYTHON_EXTRA_LDFLAGS by hand.
+ Moreover, to disable this check, set PYTHON_NOVERSIONCHECK
+ to something else than an empty string.
+-])dnl
++])
+ else
+ AC_MSG_RESULT([skip at user request])
+ fi
+@@ -92,7 +92,7 @@
+ If you have it installed, but it isn't the default Python
+ interpreter in your system path, please pass the PYTHON_VERSION
+ variable to configure. See ``configure --help'' for reference.
+-])dnl
++])
+ fi
+ fi
+
diff --git a/app-misc/lcd4linux/files/lcd4linux-0.10.1_rc2-missing-header.patch b/app-misc/lcd4linux/files/lcd4linux-0.10.1_rc2-missing-header.patch
new file mode 100644
index 00000000000..6b38dc038c4
--- /dev/null
+++ b/app-misc/lcd4linux/files/lcd4linux-0.10.1_rc2-missing-header.patch
@@ -0,0 +1,12 @@
+diff -ur lcd4linux-0.10.1-RC2.orig/lcd4linux.c lcd4linux-0.10.1-RC2/lcdinux-0.10.1-RC2/lcd4linux.c
+--- lcd4linux.c 2007-03-22 15:10:41.000000000 +0900
++++ lcd4linux.c 2011-11-23 12:12:03.782869315 +0800
+@@ -26,7 +26,7 @@
+ */
+
+ #include "config.h"
+-
++#include <sys/stat.h>
+ #include <stdlib.h>
+ #include <stdio.h>
+ #include <string.h>
diff --git a/app-misc/lcd4linux/files/lcd4linux-0.10.1_rc2-mpd.patch b/app-misc/lcd4linux/files/lcd4linux-0.10.1_rc2-mpd.patch
new file mode 100644
index 00000000000..c3fa8ac3635
--- /dev/null
+++ b/app-misc/lcd4linux/files/lcd4linux-0.10.1_rc2-mpd.patch
@@ -0,0 +1,374 @@
+Patch for >=lcd4linux-0.10.1_rc2-r1
+
+Fixes memory and other bugs in plugin_mpd
+
+Accepted upstream
+
+Index: plugin_mpd.c
+===================================================================
+--- plugin_mpd.c (Revision 801)
++++ plugin_mpd.c (Arbeitskopie)
+@@ -4,6 +4,7 @@
+ * mpd informations
+ *
+ * Copyright (C) 2006 Stefan Kuhne <sk-privat@gmx.net>
++ * Copyright (C) 2007 Robert Buchholz <rbu@gentoo.org>
+ * Copyright (C) 2006 The LCD4Linux Team <lcd4linux-devel@users.sourceforge.net>
+ *
+ * This file is part of LCD4Linux.
+@@ -81,8 +82,8 @@
+
+ iport = strtol(port, &test, 10);
+
+- if (iport < 0 || *test != '\0') {
+- fprintf(stderr, "MPD_PORT \"%s\" is not a positive integer\n", port);
++ if ((iport < 0) || (*test != '\0')) {
++ error("[MPD] MPD_PORT \"%s\" is not a positive integer\n", port);
+ exit(EXIT_FAILURE);
+ }
+
+@@ -94,17 +95,16 @@
+ mpd_sendCommandListEnd(mpd.conn);
+
+ if ((mpd.status = mpd_getStatus(mpd.conn)) == NULL) {
+- fprintf(stderr, "%s\n", mpd.conn->errorStr);
++ error("[MPD] error when getting status: %s\n", mpd.conn->errorStr);
+ mpd_closeConnection(mpd.conn);
+- }
+-
+- if (mpd.status->error) {
+- printf("error: %s\n", mpd.status->error);
+- }
+-
+- if (mpd.conn->error) {
+- fprintf(stderr, "%s\n", mpd.conn->errorStr);
++ mpd.conn = NULL;
++ } else if (mpd.status->error) {
++ info("[MPD] status error when connecting: %s\n", mpd.status->error);
++ } else if (mpd.conn->error) {
++ error("[MPD] error when connecting: %s\n", mpd.conn->errorStr);
++ mpd_freeStatus(mpd.status);
+ mpd_closeConnection(mpd.conn);
++ mpd.conn = NULL;
+ }
+
+ return mpd;
+@@ -114,14 +114,15 @@
+ static void disconnect(struct Pointer mpd)
+ {
+ if (mpd.conn->error) {
+- fprintf(stderr, "%s\n", mpd.conn->errorStr);
++ error("[MPD] error when disconnecting: %s\n", mpd.conn->errorStr);
++ mpd_freeStatus(mpd.status);
+ mpd_closeConnection(mpd.conn);
++ return;
+ }
+
+ mpd_finishCommand(mpd.conn);
+ if (mpd.conn->error) {
+- fprintf(stderr, "%s\n", mpd.conn->errorStr);
+- mpd_closeConnection(mpd.conn);
++ error("[MPD] error when disconnecting: %s\n", mpd.conn->errorStr);
+ }
+
+ mpd_freeStatus(mpd.status);
+@@ -132,8 +133,12 @@
+
+ static void artist(RESULT * result, RESULT * query)
+ {
+- char *value = " ";
++ char *value = NULL;
+ struct Pointer mpd = connect();
++ if (mpd.conn == NULL) {
++ SetResult(&result, R_STRING, " ");
++ return;
++ }
+
+ mpd_nextListOkCommand(mpd.conn);
+
+@@ -145,9 +150,10 @@
+ continue;
+ }
+
+- if (song->artist) {
++ if (!value && song->artist) {
++ /* we found our first song */
+ value = strdup(song->artist);
+- //add comment
++ /* add comment */
+ if (query) {
+ char *myarg;
+ myarg = strdup(R2S(query));
+@@ -160,8 +166,8 @@
+
+ disconnect(mpd);
+
+- /* store result */
+- SetResult(&result, R_STRING, value);
++ /* store result, value must not be NULL */
++ SetResult(&result, R_STRING, value ? value : " ");
+
+ free(value);
+ }
+@@ -169,8 +175,12 @@
+
+ static void title(RESULT * result)
+ {
+- char *value = " ";
++ char *value = NULL;
+ struct Pointer mpd = connect();
++ if (mpd.conn == NULL) {
++ SetResult(&result, R_STRING, " ");
++ return;
++ }
+
+ mpd_nextListOkCommand(mpd.conn);
+
+@@ -182,7 +192,7 @@
+ continue;
+ }
+
+- if (song->title) {
++ if (!value && song->title) {
+ value = strdup(song->title);
+ }
+ mpd_freeInfoEntity(mpd.entity);
+@@ -190,8 +200,8 @@
+
+ disconnect(mpd);
+
+- /* store result */
+- SetResult(&result, R_STRING, value);
++ /* store result, value must not be NULL */
++ SetResult(&result, R_STRING, value ? value : " ");
+
+ free(value);
+ }
+@@ -199,8 +209,12 @@
+
+ static void album(RESULT * result)
+ {
+- char *value = " ";
++ char *value = NULL;
+ struct Pointer mpd = connect();
++ if (mpd.conn == NULL) {
++ SetResult(&result, R_STRING, " ");
++ return;
++ }
+
+ mpd_nextListOkCommand(mpd.conn);
+
+@@ -212,7 +226,7 @@
+ continue;
+ }
+
+- if (song->album) {
++ if (!value && song->album) {
+ value = strdup(song->album);
+ }
+ mpd_freeInfoEntity(mpd.entity);
+@@ -220,8 +234,8 @@
+
+ disconnect(mpd);
+
+- /* store result */
+- SetResult(&result, R_STRING, value);
++ /* store result, value must not be NULL */
++ SetResult(&result, R_STRING, value ? value : " ");
+
+ free(value);
+ }
+@@ -236,7 +250,7 @@
+ void error_callback( __attribute__ ((unused)) MpdObj * mi, int errorid, char *msg, __attribute__ ((unused))
+ void *userdata)
+ {
+- printf("Error %i: '%s'\n", errorid, msg);
++ info("[MPD] caught error %i: '%s'\n", errorid, msg);
+ }
+
+ static int mpd_get(int function)
+@@ -278,95 +292,89 @@
+
+ static void elapsedTime(RESULT * result)
+ {
+- char *value = " ";
++ char myTime[6] = " ";
+
+- int playTime = mpd_get(_mpd_status_get_elapsed_song_time);
++ const int playTime = mpd_get(_mpd_status_get_elapsed_song_time);
+
+- if (playTime != -1) {
+- char myTime[6];
+- memset(myTime, 0, 6);
+- int minutes = (int) (playTime / 60);
+- int seconds = (int) (playTime % 60);
++ if ((playTime >= 0) && (playTime < 6000)) {
++ const int minutes = (int) (playTime / 60);
++ const int seconds = (int) (playTime % 60);
+ sprintf(myTime, "%02d:%02d", minutes, seconds);
++ } else if (playTime >= 6000) {
++ strcpy(myTime, "LONG");
++ }
+
+- value = strdup(myTime);
+- }
+- // store result
+- SetResult(&result, R_STRING, value);
++ /* store result */
++ SetResult(&result, R_STRING, myTime);
+ }
+
+ static void elapsedTimeSec(RESULT * result)
+ {
+- int playTime = mpd_get(_mpd_status_get_elapsed_song_time);
++ const int playTime = mpd_get(_mpd_status_get_elapsed_song_time);
+ double d = 0.0;
+
+ if (playTime != -1)
+ d = playTime;
+
+- // store result
++ /* store result */
+ SetResult(&result, R_NUMBER, &d);
+ }
+
+ static void totalTime(RESULT * result)
+ {
+- char *value = " ";
++ char myTime[6] = "ERROR";
+
+- int totTime = mpd_get(_mpd_status_get_total_song_time);
+- if (totTime != -1) {
+- char myTime[6];
+- memset(myTime, 0, 6);
+- int minutes = (int) (totTime / 60);
+- int seconds = (int) (totTime % 60);
++ const int totTime = mpd_get(_mpd_status_get_total_song_time);
++ if ((totTime >= 0) && (totTime < 6000)) {
++ const int minutes = (int) (totTime / 60);
++ const int seconds = (int) (totTime % 60);
+ sprintf(myTime, "%02d:%02d", minutes, seconds);
++ } else if (totTime >= 6000) {
++ strcpy(myTime, "LONG");
++ }
+
+- value = strdup(myTime);
+- } else
+- value = strdup("ERROR");
+- // store result
+- SetResult(&result, R_STRING, value);
++ /* store result */
++ SetResult(&result, R_STRING, myTime);
+ }
+
+ static void totalTimeSec(RESULT * result)
+ {
+- int totTime = mpd_get(_mpd_status_get_total_song_time);
++ const int totTime = mpd_get(_mpd_status_get_total_song_time);
+ double d = 0.0;
+
+ if (totTime != -1)
+ d = totTime;
+
+- // store result
++ /* store result */
+ SetResult(&result, R_NUMBER, &d);
+ }
+
+ static void bitRate(RESULT * result)
+ {
+- char *value = "";
++ char rateStr[4];
+
+- int rate = mpd_get(_mpd_status_get_bitrate);
++ const int rate = mpd_get(_mpd_status_get_bitrate);
+
+- if (rate != -1) {
+- char rateStr[4];
+- memset(rateStr, 0, 4);
++ if ((rate >= 0) && (rate < 1000)) {
+ sprintf(rateStr, "%03d", rate);
++ }
+
+- value = strdup(rateStr);
+- }
+- // store result
+- SetResult(&result, R_STRING, value);
++ /* store result */
++ SetResult(&result, R_STRING, rateStr);
+ }
+
+ static void getRepeat(RESULT * result)
+ {
+ char *value = " ";
+
+- int rep = mpd_get(_mpd_player_get_repeat);
++ const int rep = mpd_get(_mpd_player_get_repeat);
+
+ if (rep != -1) {
+ if (rep)
+- value = strdup("REP");
+- // else value = strdup(" ");
++ value = "REP";
++ /* else value = strdup(" "); */
+ }
+- // store result
++ /* store result */
+ SetResult(&result, R_STRING, value);
+ }
+
+@@ -375,26 +383,26 @@
+ {
+ char *value = " ";
+
+- int ran = mpd_get(_mpd_player_get_random);
++ const int ran = mpd_get(_mpd_player_get_random);
+
+ if (ran != -1) {
+ if (ran)
+ value = strdup("RND");
+- // else value = strdup(" ");
++ /* else value = strdup(" "); */
+ }
+- // store result
++ /* store result */
+ SetResult(&result, R_STRING, value);
+ }
+
+ static void getRepRand(RESULT * result)
+ {
+- char *value = " ";
++ char str[9] = " ";
+
+- int ran = mpd_get(_mpd_player_get_random);
+- int rep = mpd_get(_mpd_player_get_repeat);
++ const int ran = mpd_get(_mpd_player_get_random);
++ const int rep = mpd_get(_mpd_player_get_repeat);
+
+ if (ran != -1 && rep != -1) {
+- char str[9];
++
+ if (rep)
+ sprintf(str, "REP/");
+ else
+@@ -403,17 +411,16 @@
+ sprintf(str, "%sRND", str);
+ else
+ sprintf(str, "%s---", str);
+- value = strdup(str);
+ }
+- // store result
+- SetResult(&result, R_STRING, value);
++ /* store result */
++ SetResult(&result, R_STRING, str);
+ }
+
+ int plugin_init_mpd(void)
+ {
+ /* Check for File */
+ if (mpd_get(_mpd_dummy) != 1) {
+- error("Error: Cannot connect to MPD! Is MPD started?");
++ error("[MPD] Error: Cannot connect to MPD! Is MPD started?");
+ return -1;
+ }
+
diff --git a/app-misc/lcd4linux/files/lcd4linux-0.10.1_rc2-nordtsc.patch b/app-misc/lcd4linux/files/lcd4linux-0.10.1_rc2-nordtsc.patch
new file mode 100644
index 00000000000..b25d01e8e90
--- /dev/null
+++ b/app-misc/lcd4linux/files/lcd4linux-0.10.1_rc2-nordtsc.patch
@@ -0,0 +1,187 @@
+kMessage-ID: <47011930.60100@reinelt.co.at>
+Date: Mon, 01 Oct 2007 17:58:40 +0200
+From: Michael Reinelt <michael@reinelt.co.at>
+Subject: [Lcd4linux-devel] asm/msr.h inclusion and RDTSC stuff removed
+
+Hi there,
+
+I just committed a changeset where I removed the whole RDTSC delay loop
+stuff, and therefore lcd4linux does no longer need asm/msr.h
+
+Instead, a gettimeofday() delay loop will be used when necessary.
+
+The rdtsc stuff worked fine, but had two major disadvantages: It did not
+work with variable CPU frequencies, and latest kernels do no longer
+offer the rdtsc() macro.
+
+The changeset has been committed to trunk, and will be backported to the
+0.10.1 branch as soon as I get some positive feedback 8or at least I
+don't get any negative feedback)
+
+
+bye, Michael
+
+--
+Michael Reinelt <michael@reinelt.co.at>
+http://home.pages.at/reinelt
+GPG-Key 0xDF13BA50
+ICQ #288386781
+
+Index: configure.in
+===================================================================
+--- lcd4linux-0.10.1-RC2/configure.in.orig
++++ lcd4linux-0.10.1-RC2/configure.in
+@@ -99,7 +99,6 @@ AC_HEADER_STDC
+ AC_CHECK_HEADERS([arpa/inet.h fcntl.h netdb.h netinet/in.h stdlib.h string.h sys/ioctl.h sys/socket.h sys/time.h sys/vfs.h syslog.h termios.h unistd.h])
+ AC_CHECK_HEADERS(sys/io.h asm/io.h)
+ AC_CHECK_HEADERS(linux/parport.h linux/ppdev.h)
+-AC_CHECK_HEADERS(asm/msr.h)
+
+ # Checks for typedefs, structures, and compiler characteristics.
+ AC_C_CONST
+Index: udelay.c
+===================================================================
+--- lcd4linux-0.10.1-RC2/udelay.c.orig
++++ lcd4linux-0.10.1-RC2/udelay.c
+@@ -55,11 +55,6 @@
+ #include <string.h>
+ #include <sys/time.h>
+
+-#ifdef HAVE_ASM_MSR_H
+-#define u32 unsigned int
+-#include <asm/msr.h>
+-#endif
+-
+
+ #include "debug.h"
+ #include "cfg.h"
+@@ -67,79 +62,10 @@
+ #include "udelay.h"
+
+
+-static unsigned int ticks_per_usec = 0;
+-
+-
+-static void getCPUinfo(int *hasTSC, double *MHz)
+-{
+- int fd;
+- char buffer[4096], *p;
+-
+- *hasTSC = 0;
+- *MHz = -1;
+-
+- fd = open("/proc/cpuinfo", O_RDONLY);
+- if (fd == -1) {
+- error("udelay: open(/proc/cpuinfo) failed: %s", strerror(errno));
+- return;
+- }
+- if (read(fd, &buffer, sizeof(buffer) - 1) == -1) {
+- error("udelay: read(/proc/cpuinfo) failed: %s", strerror(errno));
+- close(fd);
+- return;
+- }
+- close(fd);
+-
+- p = strstr(buffer, "flags");
+- if (p == NULL) {
+- info("udelay: /proc/cpuinfo has no 'flags' line");
+- } else {
+- p = strstr(p, "tsc");
+- if (p == NULL) {
+- info("udelay: CPU does not support Time Stamp Counter");
+- } else {
+- info("udelay: CPU supports Time Stamp Counter");
+- *hasTSC = 1;
+- }
+- }
+-
+- p = strstr(buffer, "cpu MHz");
+- if (p == NULL) {
+- info("udelay: /proc/cpuinfo has no 'cpu MHz' line");
+- } else {
+- if (sscanf(p + 7, " : %lf", MHz) != 1) {
+- error("udelay: parse(/proc/cpuinfo) failed: unknown 'cpu MHz' format");
+- *MHz = -1;
+- } else {
+- info("udelay: CPU runs at %f MHz", *MHz);
+- }
+- }
+-
+-}
+-
+
+ void udelay_init(void)
+ {
+-#ifdef HAVE_ASM_MSR_H
+-
+- int tsc;
+- double mhz;
+-
+- getCPUinfo(&tsc, &mhz);
+-
+- if (tsc && mhz > 0.0) {
+- ticks_per_usec = ceil(mhz);
+- info("udelay: using TSC delay loop, %u ticks per microsecond", ticks_per_usec);
+- } else
+-#else
+- error("udelay: The file 'include/asm/msr.h' was missing at compile time.");
+- error("udelay: Even if your CPU supports TSC, it will not be used!");
+- error("udelay: You *really* should install msr.h and recompile LCD4linux!");
+-#endif
+- {
+- ticks_per_usec = 0;
+- info("udelay: using gettimeofday() delay loop");
+- }
++ info("udelay: using gettimeofday() delay loop");
+ }
+
+
+@@ -172,37 +98,17 @@ unsigned long timing(const char *driver,
+ void ndelay(const unsigned long nsec)
+ {
+
+-#ifdef HAVE_ASM_MSR_H
+-
+- if (ticks_per_usec) {
++ struct timeval now, end;
+
+- unsigned int t1, t2;
+- unsigned long tsc;
+-
+- tsc = (nsec * ticks_per_usec + 999) / 1000;
+-
+- rdtscl(t1);
+- do {
+- rep_nop();
+- rdtscl(t2);
+- } while ((t2 - t1) < tsc);
+-
+- } else
+-#endif
+-
+- {
+- struct timeval now, end;
+-
+- gettimeofday(&end, NULL);
+- end.tv_usec += (nsec + 999) / 1000;
+- while (end.tv_usec > 1000000) {
+- end.tv_usec -= 1000000;
+- end.tv_sec++;
+- }
+-
+- do {
+- rep_nop();
+- gettimeofday(&now, NULL);
+- } while (now.tv_sec == end.tv_sec ? now.tv_usec < end.tv_usec : now.tv_sec < end.tv_sec);
++ gettimeofday(&end, NULL);
++ end.tv_usec += (nsec + 999) / 1000;
++ while (end.tv_usec > 1000000) {
++ end.tv_usec -= 1000000;
++ end.tv_sec++;
+ }
++
++ do {
++ rep_nop();
++ gettimeofday(&now, NULL);
++ } while (now.tv_sec == end.tv_sec ? now.tv_usec < end.tv_usec : now.tv_sec < end.tv_sec);
+ }
diff --git a/app-misc/lcd4linux/files/lcd4linux-0.10.1_rc2-usbdebug.patch b/app-misc/lcd4linux/files/lcd4linux-0.10.1_rc2-usbdebug.patch
new file mode 100644
index 00000000000..6ecc7a24899
--- /dev/null
+++ b/app-misc/lcd4linux/files/lcd4linux-0.10.1_rc2-usbdebug.patch
@@ -0,0 +1,121 @@
+diff -crB lcd4linux-0.10.1-RC2-orig/drv_BWCT.c lcd4linux-0.10.1-RC2/drv_BWCT.c
+*** lcd4linux-0.10.1-RC2-orig/drv_BWCT.c 2007-02-25 13:39:09.000000000 +0100
+--- lcd4linux-0.10.1-RC2/drv_BWCT.c 2013-11-10 21:32:06.119047221 +0100
+***************
+*** 72,78 ****
+ static usb_dev_handle *lcd;
+ static int interface;
+
+- extern int usb_debug;
+ extern int got_signal;
+
+
+--- 72,77 ----
+***************
+*** 89,96 ****
+
+ info("%s: scanning USB for BWCT LCD...", Name);
+
+- usb_debug = 0;
+-
+ usb_init();
+ usb_find_busses();
+ usb_find_devices();
+--- 88,93 ----
+diff -crB lcd4linux-0.10.1-RC2-orig/drv_LCD2USB.c lcd4linux-0.10.1-RC2/drv_LCD2USB.c
+*** lcd4linux-0.10.1-RC2-orig/drv_LCD2USB.c 2007-02-25 13:39:10.000000000 +0100
+--- lcd4linux-0.10.1-RC2/drv_LCD2USB.c 2013-11-10 21:32:15.686677498 +0100
+***************
+*** 98,104 ****
+ static usb_dev_handle *lcd;
+ static int controllers = 0;
+
+- extern int usb_debug;
+ extern int got_signal;
+
+ /****************************************/
+--- 98,103 ----
+***************
+*** 120,127 ****
+ if (device_id != NULL)
+ info("%s: scanning for device id: %s", Name, device_id);
+
+- usb_debug = 0;
+-
+ usb_init();
+ usb_find_busses();
+ usb_find_devices();
+--- 119,124 ----
+diff -crB lcd4linux-0.10.1-RC2-orig/drv_picoLCD.c lcd4linux-0.10.1-RC2/drv_picoLCD.c
+*** lcd4linux-0.10.1-RC2-orig/drv_picoLCD.c 2007-02-25 13:39:10.000000000 +0100
+--- lcd4linux-0.10.1-RC2/drv_picoLCD.c 2013-11-10 21:32:30.102120440 +0100
+***************
+*** 75,81 ****
+ static char *BufPtr;
+
+ static usb_dev_handle *lcd;
+- extern int usb_debug;
+
+
+
+--- 75,80 ----
+***************
+*** 97,104 ****
+
+ info("%s: scanning for picoLCD...", Name);
+
+- usb_debug = 0;
+-
+ usb_init();
+ usb_find_busses();
+ usb_find_devices();
+--- 96,101 ----
+diff -crB lcd4linux-0.10.1-RC2-orig/drv_Trefon.c lcd4linux-0.10.1-RC2/drv_Trefon.c
+*** lcd4linux-0.10.1-RC2-orig/drv_Trefon.c 2007-02-25 13:39:10.000000000 +0100
+--- lcd4linux-0.10.1-RC2/drv_Trefon.c 2013-11-10 21:32:46.441489039 +0100
+***************
+*** 72,78 ****
+ static usb_dev_handle *lcd;
+ static int interface;
+
+- extern int usb_debug;
+
+
+ /****************************************/
+--- 72,77 ----
+***************
+*** 88,95 ****
+
+ info("%s: scanning USB for TREFON LCD...", Name);
+
+- usb_debug = 0;
+-
+ usb_init();
+ usb_find_busses();
+ usb_find_devices();
+--- 87,92 ----
+diff -crB lcd4linux-0.10.1-RC2-orig/drv_USBLCD.c lcd4linux-0.10.1-RC2/drv_USBLCD.c
+*** lcd4linux-0.10.1-RC2-orig/drv_USBLCD.c 2007-02-25 13:39:10.000000000 +0100
+--- lcd4linux-0.10.1-RC2/drv_USBLCD.c 2013-11-10 21:33:01.508906792 +0100
+***************
+*** 86,93 ****
+ static usb_dev_handle *lcd;
+ static int interface;
+
+- extern int usb_debug;
+-
+ #endif
+
+
+--- 86,91 ----
+***************
+*** 107,114 ****
+
+ info("%s: scanning for USBLCD...", Name);
+
+- usb_debug = 0;
+-
+ usb_init();
+ usb_find_busses();
+ usb_find_devices();
+--- 105,110 ----
diff --git a/app-misc/lcd4linux/files/lcd4linux-0.10.1_rc2-warnings.patch b/app-misc/lcd4linux/files/lcd4linux-0.10.1_rc2-warnings.patch
new file mode 100644
index 00000000000..58791ee91ff
--- /dev/null
+++ b/app-misc/lcd4linux/files/lcd4linux-0.10.1_rc2-warnings.patch
@@ -0,0 +1,64 @@
+Index: ./plugin_kvv.c
+===================================================================
+--- ./plugin_kvv.c (revision 771)
++++ ./plugin_kvv.c (revision 797)
+@@ -414,5 +414,5 @@
+
+ if (count > 0) {
+- char *input, *cookie, *name, *value;
++ char *input, *cookie, *name = NULL, *value = NULL;
+ int input_len, cookie_len, name_len, value_len;
+
+Index: ./plugin_mpd.c
+===================================================================
+--- ./plugin_mpd.c (revision 786)
++++ ./plugin_mpd.c (revision 797)
+@@ -65,5 +65,10 @@
+ int iport;
+ char *test;
+- struct Pointer mpd;
++
++ struct Pointer mpd = {
++ .conn = NULL,
++ .status = NULL,
++ .entity = NULL
++ };
+
+ if ((test = getenv("MPD_HOST"))) {
+@@ -229,5 +234,6 @@
+ #define _mpd_player_get_random 005
+
+-void error_callback(MpdObj * mi, int errorid, char *msg, void *userdata)
++void error_callback( __attribute__ ((unused)) MpdObj * mi, int errorid, char *msg, __attribute__ ((unused))
++ void *userdata)
+ {
+ printf("Error %i: '%s'\n", errorid, msg);
+Index: ./drv_Image.c
+===================================================================
+--- ./drv_Image.c (revision 771)
++++ ./drv_Image.c (revision 797)
+@@ -115,5 +115,5 @@
+ if (bitbuf == NULL) {
+ if ((bitbuf = malloc(xsize * ysize * sizeof(*bitbuf))) == NULL) {
+- error("%s: malloc(%d) failed: %s", Name, (int) xsize * ysize * sizeof(*bitbuf), strerror(errno));
++ error("%s: malloc() failed: %s", Name, strerror(errno));
+ return -1;
+ }
+@@ -122,5 +122,5 @@
+ if (rowbuf == NULL) {
+ if ((rowbuf = malloc(3 * xsize * sizeof(*rowbuf))) == NULL) {
+- error("Raster: malloc(%d) failed: %s", (int) 3 * xsize * sizeof(*rowbuf), strerror(errno));
++ error("Raster: malloc() failed: %s", strerror(errno));
+ return -1;
+ }
+Index: ./plugin_i2c_sensors.c
+===================================================================
+--- ./plugin_i2c_sensors.c (revision 771)
++++ ./plugin_i2c_sensors.c (revision 797)
+@@ -297,5 +297,5 @@
+ strcat(path_cfg, "/");
+ }
+- debug("using i2c sensors at %s (from %s)", path, cfg_source());
++ debug("using i2c sensors at %s (from %s)", path_cfg, cfg_source());
+ path = realloc(path, strlen(path_cfg) + 1);
+ strcpy(path, path_cfg);
diff --git a/app-misc/lcd4linux/files/lcd4linux-0.10.1_rc2.initd b/app-misc/lcd4linux/files/lcd4linux-0.10.1_rc2.initd
new file mode 100644
index 00000000000..1e8be0c36de
--- /dev/null
+++ b/app-misc/lcd4linux/files/lcd4linux-0.10.1_rc2.initd
@@ -0,0 +1,23 @@
+#!/sbin/runscript
+# Copyright 1999-2007 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+# $Id$
+
+PIDFILE=/var/run/lcd4linux.pid
+DAEMON=/usr/bin/lcd4linux
+
+depend() {
+ use net
+}
+
+start() {
+ ebegin "Starting lcd4linux"
+ start-stop-daemon --start --quiet --pidfile ${PIDFILE} --exec ${DAEMON}
+ eend $? "Failed to start lcd4linux. Did you remember to set up /etc/lcd4linux.conf?"
+}
+
+stop() {
+ ebegin "Stopping lcd4linux"
+ start-stop-daemon --stop --quiet --oknodo --exec ${DAEMON} --pidfile ${PIDFILE}
+ eend $?
+}
diff --git a/app-misc/lcd4linux/lcd4linux-0.10.1_rc2-r3.ebuild b/app-misc/lcd4linux/lcd4linux-0.10.1_rc2-r3.ebuild
new file mode 100644
index 00000000000..ab108066bee
--- /dev/null
+++ b/app-misc/lcd4linux/lcd4linux-0.10.1_rc2-r3.ebuild
@@ -0,0 +1,175 @@
+# Copyright 1999-2015 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+# $Id$
+
+EAPI=5
+PYTHON_COMPAT=( python2_7 )
+WANT_AUTOMAKE="1.9"
+inherit eutils multilib autotools python-single-r1
+
+MY_P=${P/_rc/-RC}
+
+DESCRIPTION="Shows system and ISDN information on an external display or in a X11 window"
+HOMEPAGE="http://ssl.bulix.org/projects/lcd4linux"
+SRC_URI="mirror://gentoo/${MY_P}.tar.gz"
+
+LICENSE="GPL-2"
+SLOT="0"
+KEYWORDS="amd64 ppc x86"
+
+IUSE="mysql python iconv mpd"
+
+# The following array holds the USE_EXPANDed keywords
+IUSE_LCD_DEVICES=(beckmannegle bwct cfontz ncurses cwlinux
+ ea232 g15 hd44780 hd44780i2c lcd2usb
+ lcdlinux lcdterm ledmatrix lph7508 m50530
+ mtxorb milfordbpk noritake null picolcd
+ png ppm routerboard serdisplib simplelcd
+ t6963 trefon usbhub usblcd wincor
+ X luise)
+
+# Iterate through the array and add the lcd_devices_* that we support
+NUM_DEVICES=${#IUSE_LCD_DEVICES[@]}
+index=0
+while [ "${index}" -lt "${NUM_DEVICES}" ] ; do
+ IUSE="${IUSE} lcd_devices_${IUSE_LCD_DEVICES[$index]}"
+ let "index = ${index} + 1"
+done
+
+DEPEND="
+ mysql? ( virtual/mysql )
+ iconv? ( virtual/libiconv )
+ mpd? ( media-libs/libmpd )
+
+ lcd_devices_bwct? ( =virtual/libusb-0* )
+ lcd_devices_g15? ( =virtual/libusb-0* )
+ lcd_devices_lcd2usb? ( =virtual/libusb-0* )
+ lcd_devices_picolcd? ( =virtual/libusb-0* )
+ lcd_devices_trefon? ( =virtual/libusb-0* )
+ lcd_devices_usbhub? ( =virtual/libusb-0* )
+ lcd_devices_usblcd? ( =virtual/libusb-0* )
+ lcd_devices_luise? ( dev-libs/luise-bin )
+ lcd_devices_ncurses? ( sys-libs/ncurses )
+ lcd_devices_noritake? ( media-libs/gd )
+ lcd_devices_t6963? ( media-libs/gd )
+ lcd_devices_png? ( media-libs/libpng media-libs/gd )
+ lcd_devices_X? ( x11-libs/libX11 media-libs/gd )
+ lcd_devices_serdisplib? ( dev-libs/serdisplib media-libs/gd )
+"
+RDEPEND="${DEPEND}
+ python? ( ${PYTHON_DEPS} )
+"
+
+S="${WORKDIR}/${MY_P}"
+
+pkg_setup() {
+ elog "If you wish to compile only specific plugins, please use"
+ elog "the LCD4LINUX_PLUGINS environment variable. Plugins must be comma separated and can be either of:"
+ elog "apm cpuinfo diskstats dvb exec file i2c_sensors imon isdn kvv loadavg meminfo netdev pop3 ppp proc_stat seti statfs uname uptime wireless"
+
+ use python && python-single-r1_pkg_setup
+}
+
+src_prepare() {
+ epatch "${FILESDIR}/${P}-warnings.patch"
+ epatch "${FILESDIR}/${P}-mpd.patch"
+ epatch "${FILESDIR}/${P}-nordtsc.patch"
+ epatch "${FILESDIR}/${P}-autoconf-2.65.patch"
+ epatch "${FILESDIR}/${P}-missing-header.patch"
+ epatch "${FILESDIR}/${P}-usbdebug.patch"
+ eautoreconf
+}
+
+src_configure() {
+ # This array contains the driver names required by configure --with-drivers=
+ # The positions must be the same as the corresponding use_expand flags
+ local DEVICE_DRIVERS=(BeckmannEgle BWCT CrystalFontz Curses Cwlinux
+ EA232graphic G15 HD44780 HD44780-I2C LCD2USB
+ LCDLinux LCDTerm LEDMatrix LPH7508 M50530
+ MatrixOrbital MilfordInstruments Noritake NULL picoLCD
+ PNG PPM RouterBoard serdisplib SimpleLCD
+ T6963 Trefon USBHUB USBLCD WincorNixdorf
+ X11 LUIse)
+
+ local myconf myp
+
+ # plugins
+ if [ -n "$LCD4LINUX_PLUGINS" ]; then
+ myp="$LCD4LINUX_PLUGINS"
+ else
+ myp="all,!xmms"
+ fi
+ use iconv || myp="${myp},!iconv"
+ use mpd || myp="${myp},!mpd"
+ use mysql || myp="${myp},!mysql"
+ use python || myp="${myp},!python"
+ elog "Active plugins: ${myp}"
+
+ # Generate comma separated list of drivers
+ local COMMA_DRIVERS
+ local FIRST_DRIVER
+ local index=0
+ local driver
+
+ while [ "${index}" -lt "${NUM_DEVICES}" ] ; do
+ if use "lcd_devices_${IUSE_LCD_DEVICES[$index]}" ; then
+ driver=${DEVICE_DRIVERS[$index]}
+ if [ -z ${COMMA_DRIVERS} ] ; then
+ # First in the list
+ COMMA_DRIVERS="${driver}"
+ FIRST_DRIVER="${driver}"
+ else
+ # Second, third, ... include a comma at the front
+ COMMA_DRIVERS="${COMMA_DRIVERS},${driver}"
+ fi
+ fi
+ let "index = ${index} + 1"
+ done
+
+ # activate at least one driver
+ if [ -z ${COMMA_DRIVERS} ] ; then
+ COMMA_DRIVERS="NULL"
+ fi
+
+ # workaround the build failing because of b0rked settings
+ if use lcd_devices_hd44780 && use lcd_devices_hd44780i2c ; then
+ echo
+ ewarn "Disabling hd44780 LCD_DEVICE as hd44780i2c is set!"
+ echo
+ COMMA_DRIVERS="${COMMA_DRIVERS},!HD44780"
+ fi
+
+ # avoid package brokenness
+ if use lcd_devices_X ; then
+ myconf="--x-libraries=/usr/$(get_libdir) --x-include=/usr/include"
+ else
+ myconf="--without-x"
+ fi
+
+ econf \
+ --sysconfdir=/etc/lcd4linux \
+ --with-drivers="${COMMA_DRIVERS}" \
+ --with-plugins="${myp}" \
+ $(use_with python) \
+ ${myconf}
+
+ sed -i.orig -e 's/-L -lX11/ -lX11 /g' Makefile || die "sed fixup failed"
+}
+
+src_install() {
+ default
+
+ newinitd "${FILESDIR}/${P}.initd" ${PN}
+
+ insinto /etc
+ insopts -o root -g root -m 0600
+ newins lcd4linux.conf.sample lcd4linux.conf
+}
+
+pkg_postinst() {
+ if use lcd_devices_lcdlinux; then
+ ewarn "To actually use the lcd-linux devices, you will need to install the lcd-linux kernel module."
+ ewarn "You can either do that yourself, see http://lcd-linux.sf.net or "
+ ewarn "checkout http://overlays.gentoo.org/dev/jokey/browser/trunk and emerge app-misc/lcd-linux"
+ fi
+}
diff --git a/app-misc/lcd4linux/metadata.xml b/app-misc/lcd4linux/metadata.xml
new file mode 100644
index 00000000000..cee8d88109d
--- /dev/null
+++ b/app-misc/lcd4linux/metadata.xml
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "http://www.gentoo.org/dtd/metadata.dtd">
+<pkgmetadata>
+<maintainer>
+<email>maintainer-needed@gentoo.org</email>
+</maintainer>
+<longdescription lang="en">
+ LCD4Linux is a small program that grabs information from the kernel and some
+ subsystems and displays it on an external liquid crystal display. It is
+ fully configurable and supports many data sources, displays and plugins.
+</longdescription>
+<use>
+ <flag name='mpd'>Add support for display of mpd controlled music
+ (<pkg>media-libs/libmpd</pkg>)</flag>
+</use>
+</pkgmetadata>