From: <ale...@us...> - 2006-07-13 14:03:54
|
Revision: 2357 Author: alextreme Date: 2006-07-13 07:03:43 -0700 (Thu, 13 Jul 2006) ViewCVS: http://svn.sourceforge.net/morphix/?rev=2357&view=rev Log Message: ----------- * adding experimental localdeb-tag, as yet untested... Modified Paths: -------------- trunk/mmaker/README.template trunk/mmaker/libmorphix/makemodule.c trunk/mmaker/libmorphix/parsemod.c trunk/mmaker/libmorphix/parsemod.h Modified: trunk/mmaker/README.template =================================================================== --- trunk/mmaker/README.template 2006-07-13 13:36:12 UTC (rev 2356) +++ trunk/mmaker/README.template 2006-07-13 14:03:43 UTC (rev 2357) @@ -17,7 +17,7 @@ <description>possibly multiline description of module</description> - <type>[mainmod|basemod|minimod]</type> ( + <type>[mainmod|basemod|minimod]</type> <!-- currently only main/basemod are useful --> <suite>[sid|sarge|woody|unstable|testing|stable]</suite> @@ -62,15 +62,21 @@ ... </packagelist> + <localdeblist> + + <localdeb>/path/to/package.deb</localdeb> + <!-- this package from the host system is copied into the build directory and installed using dpkg -i. It is removed afterwards --> + </localdeblist> + <patchlist> - <patch>path/to/shellscript.sh</patch> ( - <!-- shell script on host system, gets copied into the root of the build directory and is executed --> + <patch>path/to/shellscript.sh</patch> + <!-- shell script on host system, gets copied into the root of the build directory and is executed. It is removed afterwards --> </patchlist> <commandlist> - <command>echo "Real Morphers idle on #morphix"</command> ( + <command>echo "Real Morphers idle on #morphix"</command> <!-- shell command run in the build chroot, just before compressing --> </commandlist> Modified: trunk/mmaker/libmorphix/makemodule.c =================================================================== --- trunk/mmaker/libmorphix/makemodule.c 2006-07-13 13:36:12 UTC (rev 2356) +++ trunk/mmaker/libmorphix/makemodule.c 2006-07-13 14:03:43 UTC (rev 2357) @@ -565,15 +565,59 @@ } /** + Copies one or more packages from the host system and installs these + using dpkg -i (ie. no dependancies are resolved!) + + @param module mmodule*; module structure, initialised + + return TRUE if successful, FALSE and message to stderr if an error occurred +*/ + +gboolean installLocalPackages(mmodule *module) { + GList *ptr = module->localdeblist; + while (ptr != NULL) { + gchar *cmdline = NULL; + gchar *basename = g_path_get_basename(ptr->data); + + if (basename == NULL) + continue; + + cmdline = g_strdup_printf("cp %s %s/%s",ptr->data,module->dirname,basename); + if (!ExecuteCommand(cmdline)) { + fprintf(stderr,"Warning: unable to copy package into build directory\n"); + g_free(basename); + g_free(cmdline); + continue; + } + g_free(cmdline); + + cmdline = g_strdup_printf("%s %s dpkg -i /%s",P_CHROOT,module->dirname,basename); + if (!ExecuteCommand(cmdline)) { + fprintf(stderr,"Warning: unable to install local package: %s\n",ptr->data); + } + g_free(cmdline); + + + cmdline = g_strdup_printf("%s %s rm /%s",P_CHROOT,module->dirname,basename); + if (!ExecuteCommand(cmdline)) { + fprintf(stderr,"Warning: unable to remove local package after installation: %s\n",ptr->data); + } + + g_free(cmdline); + g_free(basename); + ptr = ptr->next; + } + return TRUE; +} + +/** Executes shell scripts, defined in the xml file. - Gives the location of the uncompressed module as the script's first argument + For security reasons, the script is executed in the chroot + (it is copied into the root of the build directory before execution) @param module mmodule*; module structure, initialised @param dirname gchar*; location of the directory - this needs fixing, as executing stuff as root from a file is evil... - Gandalfar will slap me for this - return TRUE if successful, FALSE and message to stderr if an error occurred */ @@ -600,6 +644,12 @@ fprintf(stderr,"Warning: unable to execute patch: %s\n",ptr->data); } g_free(cmdline); + + cmdline = g_strdup_printf("%s %s rm /%s",P_CHROOT,module->dirname,basename); + if (!ExecuteCommand(cmdline)) { + fprintf(stderr,"Warning: unable to remove patch script after executing it: %s\n",ptr->data); + } + g_free(cmdline); g_free(basename); ptr = ptr->next; } @@ -1211,6 +1261,9 @@ if (!addPackagesMainModule(module, extra_package_list)) { return FALSE; } + if (!installLocalPackages(module)) { + return FALSE; + } if (!executeRetrieveFiles(module)) { return FALSE; } @@ -1237,6 +1290,9 @@ if (!addPackagesBaseModule(module, extra_package_list)) { return FALSE; } + if (!installLocalPackages(module)) { + return FALSE; + } if (!moveMorphixEtcFiles(module)) { return FALSE; } Modified: trunk/mmaker/libmorphix/parsemod.c =================================================================== --- trunk/mmaker/libmorphix/parsemod.c 2006-07-13 13:36:12 UTC (rev 2356) +++ trunk/mmaker/libmorphix/parsemod.c 2006-07-13 14:03:43 UTC (rev 2357) @@ -236,6 +236,21 @@ return module; } +mmodule* parseLocalDeblist(xmlDocPtr doc, xmlNodePtr cur, mmodule *module) { + xmlChar *key; + cur = cur->xmlChildrenNode; + module->localdeblist = NULL; + while (cur != NULL) { + if (!xmlStrcmp(cur->name, ((const xmlChar *)"localdeb"))) { + key = xmlNodeListGetString(doc, cur->xmlChildrenNode, 1); + module->localdeblist = g_list_append(module->localdeblist,g_strdup(key)); + xmlFree(key); + } + cur = cur->next; + } + return module; +} + mmodule* parseCommandlist(xmlDocPtr doc, xmlNodePtr cur, mmodule *module) { xmlChar *key; cur = cur->xmlChildrenNode; @@ -328,6 +343,9 @@ if (!xmlStrcmp(cur->name, ((const xmlChar *)"patchlist"))) { parsePatchlist(doc,cur,module); } + if (!xmlStrcmp(cur->name, ((const xmlChar *)"localdeblist"))) { + parseCommandlist(doc,cur,module); + } if (!xmlStrcmp(cur->name, ((const xmlChar *)"commandlist"))) { parseCommandlist(doc,cur,module); } @@ -418,6 +436,14 @@ } g_list_free(module->commandlist); } + if (module->localdeblist != NULL) { + GList *ptr = module->localdeblist; + while (ptr != NULL) { + g_free(ptr->data); + ptr = ptr->next; + } + g_list_free(module->localdeblist); + } g_free(module); } Modified: trunk/mmaker/libmorphix/parsemod.h =================================================================== --- trunk/mmaker/libmorphix/parsemod.h 2006-07-13 13:36:12 UTC (rev 2356) +++ trunk/mmaker/libmorphix/parsemod.h 2006-07-13 14:03:43 UTC (rev 2357) @@ -49,6 +49,7 @@ GList *packagedeletelist; // list of package structs GList *patchlist; // list of names of patches for module GList *commandlist; // list of commands for module + GList *localdeblist; // list of locations of packages on host GList *retrievelist; // list of to/from combinations gboolean verbose; // build verbosely This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |