diff options
-rw-r--r-- | meta/classes/base.bbclass | 1 | ||||
-rw-r--r-- | meta/conf/bitbake.conf | 4 | ||||
-rw-r--r-- | meta/packages/pseudo/pseudo/data-as-env.patch | 114 | ||||
-rw-r--r-- | meta/packages/pseudo/pseudo_git.bb | 5 |
4 files changed, 121 insertions, 3 deletions
diff --git a/meta/classes/base.bbclass b/meta/classes/base.bbclass index a67555dc68..bcde312220 100644 --- a/meta/classes/base.bbclass +++ b/meta/classes/base.bbclass | |||
@@ -148,6 +148,7 @@ python base_do_setscene () { | |||
148 | bb.build.make_stamp("do_setscene", d) | 148 | bb.build.make_stamp("do_setscene", d) |
149 | } | 149 | } |
150 | do_setscene[selfstamp] = "1" | 150 | do_setscene[selfstamp] = "1" |
151 | do_setscene[dirs] = "${PSEUDO_DATADIR}" | ||
151 | addtask setscene before do_fetch | 152 | addtask setscene before do_fetch |
152 | 153 | ||
153 | addtask fetch | 154 | addtask fetch |
diff --git a/meta/conf/bitbake.conf b/meta/conf/bitbake.conf index 67dd840959..057a213c96 100644 --- a/meta/conf/bitbake.conf +++ b/meta/conf/bitbake.conf | |||
@@ -528,7 +528,9 @@ SRC_URI = "file://${FILE}" | |||
528 | 528 | ||
529 | # We can choose which provider of fake root privileges to use | 529 | # We can choose which provider of fake root privileges to use |
530 | # default is fakeroot but in Poky we use pseudo | 530 | # default is fakeroot but in Poky we use pseudo |
531 | FAKEROOT = "PSEUDO_PREFIX=${STAGING_DIR_NATIVE}${prefix_native} pseudo" | 531 | # this is hopefully only temporary, to work around the database becoming corrupt |
532 | PSEUDO_DATADIR ?= "${WORKDIR}/pseudo/" | ||
533 | FAKEROOT = "PSEUDO_DATADIR=${PSEUDO_DATADIR} PSEUDO_PREFIX=${STAGING_DIR_NATIVE}${prefix_native} pseudo" | ||
532 | PREFERRED_PROVIDER_virtual/fakeroot-native ?= "pseudo-native" | 534 | PREFERRED_PROVIDER_virtual/fakeroot-native ?= "pseudo-native" |
533 | 535 | ||
534 | 536 | ||
diff --git a/meta/packages/pseudo/pseudo/data-as-env.patch b/meta/packages/pseudo/pseudo/data-as-env.patch new file mode 100644 index 0000000000..4b2b5d0a60 --- /dev/null +++ b/meta/packages/pseudo/pseudo/data-as-env.patch | |||
@@ -0,0 +1,114 @@ | |||
1 | We observed the pseudo database becoming large and corrupted when undergoing | ||
2 | significant use (generating multiple output package types). | ||
3 | |||
4 | This patch checks for the existence of an PSEUDO_DATADIR environment variable | ||
5 | and, when it exists, uses the directory specified there to store the pseudo | ||
6 | database. This should enable us to use a different database for each run of | ||
7 | pseudo. | ||
8 | |||
9 | JL (23/07/10) | ||
10 | Index: git/pseudo.h | ||
11 | =================================================================== | ||
12 | --- git.orig/pseudo.h 2010-07-23 12:12:21.000000000 +0100 | ||
13 | +++ git/pseudo.h 2010-07-23 13:35:29.044856965 +0100 | ||
14 | @@ -123,6 +123,7 @@ | ||
15 | extern char *pseudo_fix_path(const char *, const char *, size_t, size_t, size_t *, int); | ||
16 | extern char **pseudo_dropenv(char * const *); | ||
17 | extern char **pseudo_setupenv(char * const *, char *); | ||
18 | +extern char *pseudo_data_path(char *); | ||
19 | extern char *pseudo_prefix_path(char *); | ||
20 | extern char *pseudo_get_prefix(char *); | ||
21 | extern int pseudo_logfile(char *defname); | ||
22 | Index: git/pseudo_db.c | ||
23 | =================================================================== | ||
24 | --- git.orig/pseudo_db.c 2010-07-23 12:12:21.000000000 +0100 | ||
25 | +++ git/pseudo_db.c 2010-07-23 13:40:21.614745308 +0100 | ||
26 | @@ -465,17 +465,18 @@ | ||
27 | char *errmsg; | ||
28 | static int registered_cleanup = 0; | ||
29 | char *dbfile; | ||
30 | + char *data_dir; | ||
31 | |||
32 | if (!db) | ||
33 | return 1; | ||
34 | if (*db) | ||
35 | return 0; | ||
36 | if (db == &file_db) { | ||
37 | - dbfile = strdup(PSEUDO_DATA "/files.db"); | ||
38 | + dbfile = pseudo_data_path("files.db"); | ||
39 | rc = sqlite3_open(dbfile, db); | ||
40 | free(dbfile); | ||
41 | } else { | ||
42 | - dbfile = strdup(PSEUDO_DATA "/logs.db"); | ||
43 | + dbfile = pseudo_data_path("logs.db"); | ||
44 | rc = sqlite3_open(dbfile, db); | ||
45 | free(dbfile); | ||
46 | } | ||
47 | Index: git/pseudo_server.c | ||
48 | =================================================================== | ||
49 | --- git.orig/pseudo_server.c 2010-07-23 12:12:21.000000000 +0100 | ||
50 | +++ git/pseudo_server.c 2010-07-23 13:36:09.340857158 +0100 | ||
51 | @@ -107,7 +107,7 @@ | ||
52 | } | ||
53 | |||
54 | /* cd to the data directory */ | ||
55 | - pseudo_path = strdup(PSEUDO_DATA); | ||
56 | + pseudo_path = pseudo_data_path(NULL); | ||
57 | if (!pseudo_path) { | ||
58 | pseudo_diag("can't find %s directory.\n", PSEUDO_DATA); | ||
59 | return 1; | ||
60 | Index: git/pseudo_util.c | ||
61 | =================================================================== | ||
62 | --- git.orig/pseudo_util.c 2010-07-23 12:12:21.000000000 +0100 | ||
63 | +++ git/pseudo_util.c 2010-07-23 13:41:11.062734484 +0100 | ||
64 | @@ -593,6 +593,50 @@ | ||
65 | return new_environ; | ||
66 | } | ||
67 | |||
68 | +/* get the full path to the datadir for this run of pseudo | ||
69 | + * file parameter is optional and returns the datadir path | ||
70 | + * with the file name appended. | ||
71 | + */ | ||
72 | +char * | ||
73 | +pseudo_data_path(char *file) { | ||
74 | + static char *datadir = NULL; | ||
75 | + static size_t datadir_len; | ||
76 | + char *path; | ||
77 | + | ||
78 | + if (!datadir) { | ||
79 | + datadir = getenv("PSEUDO_DATADIR"); | ||
80 | + if (!datadir) { | ||
81 | + datadir = strdup(PSEUDO_DATA); | ||
82 | + } | ||
83 | + datadir_len = strlen(datadir); | ||
84 | + } | ||
85 | + | ||
86 | + if (!file) { | ||
87 | + return strdup(datadir); | ||
88 | + } else { | ||
89 | + size_t len = datadir_len + strlen(file) + 2; | ||
90 | + path = malloc(len); | ||
91 | + if (path) { | ||
92 | + char *endptr; | ||
93 | + int rc; | ||
94 | + | ||
95 | + rc = snprintf(path, len, "%s", datadir); | ||
96 | + /* this certainly SHOULD be impossible */ | ||
97 | + if ((size_t) rc >= len) | ||
98 | + rc = len - 1; | ||
99 | + endptr = path + rc; | ||
100 | + /* strip extra slashes. | ||
101 | + * This probably has no real effect, but I don't like | ||
102 | + * seeing " //" in paths. | ||
103 | + */ | ||
104 | + while ((endptr > path) && (endptr[-1] == '/')) | ||
105 | + --endptr; | ||
106 | + snprintf(endptr, len - (endptr - path), "/%s", file); | ||
107 | + } | ||
108 | + return path; | ||
109 | + } | ||
110 | +} | ||
111 | + | ||
112 | /* get the full path to a file under $PSEUDO_PREFIX. Other ways of | ||
113 | * setting the prefix all set it in the environment. | ||
114 | */ | ||
diff --git a/meta/packages/pseudo/pseudo_git.bb b/meta/packages/pseudo/pseudo_git.bb index 88c7ee2c5a..e675cbcade 100644 --- a/meta/packages/pseudo/pseudo_git.bb +++ b/meta/packages/pseudo/pseudo_git.bb | |||
@@ -6,14 +6,15 @@ LICENSE = "LGPL2.1" | |||
6 | DEPENDS = "sqlite3" | 6 | DEPENDS = "sqlite3" |
7 | 7 | ||
8 | PV = "0.0+git${SRCPV}" | 8 | PV = "0.0+git${SRCPV}" |
9 | PR = "r5" | 9 | PR = "r6" |
10 | 10 | ||
11 | SRC_URI = "git://github.com/wrpseudo/pseudo.git;protocol=git \ | 11 | SRC_URI = "git://github.com/wrpseudo/pseudo.git;protocol=git \ |
12 | file://tweakflags.patch \ | 12 | file://tweakflags.patch \ |
13 | file://path-munge.patch \ | 13 | file://path-munge.patch \ |
14 | file://ld_sacredness.patch \ | 14 | file://ld_sacredness.patch \ |
15 | file://make_parallel.patch \ | 15 | file://make_parallel.patch \ |
16 | file://static_sqlite.patch" | 16 | file://static_sqlite.patch \ |
17 | file://data-as-env.patch" | ||
17 | 18 | ||
18 | FILES_${PN} = "${libdir}/libpseudo.so ${bindir}/* ${localstatedir}/pseudo" | 19 | FILES_${PN} = "${libdir}/libpseudo.so ${bindir}/* ${localstatedir}/pseudo" |
19 | PROVIDES += "virtual/fakeroot" | 20 | PROVIDES += "virtual/fakeroot" |