From 9c73539be6788c9b430b1922a8967c8359f6d7cd Mon Sep 17 00:00:00 2001 From: Hans-Christoph Steiner Date: Sun, 20 Nov 2005 01:54:06 +0000 Subject: first functional version of the libdir patch. Its quite simple so I can't imagine many problems with it. It works well on my machine ;) svn path=/trunk/; revision=3987 --- packages/patches/libdir-0.38-4.patch | 120 +++++++++++++++++++++++++++++++++++ 1 file changed, 120 insertions(+) create mode 100644 packages/patches/libdir-0.38-4.patch (limited to 'packages') diff --git a/packages/patches/libdir-0.38-4.patch b/packages/patches/libdir-0.38-4.patch new file mode 100644 index 00000000..c2148c11 --- /dev/null +++ b/packages/patches/libdir-0.38-4.patch @@ -0,0 +1,120 @@ +Index: s_loader.c +=================================================================== +RCS file: /cvsroot/pure-data/pd/src/s_loader.c,v +retrieving revision 1.4 +diff -u -w -r1.4 s_loader.c +--- s_loader.c 6 Sep 2004 20:20:35 -0000 1.4 ++++ s_loader.c 20 Nov 2005 01:52:20 -0000 +@@ -163,3 +163,82 @@ + + + ++/* { */ ++ ++/* ++ * This function opens a directory as a library. In the long run, the idea is ++ * that one folder will have all of objects files, all of the related ++ * *-help.pd files, a file with meta data for the help system, etc. Then to ++ * install the lib, it would just be dropped into extra, or the path anywhere. ++ * ++ */ ++ ++int sys_load_lib_dir(char *dirname, char *classname) ++{ ++ int fd = -1; ++ char searchpathname[MAXPDSTRING], helppathname[MAXPDSTRING], ++ classname2[MAXPDSTRING], dirbuf[MAXPDSTRING], *nameptr; ++ ++#if 0 ++ fprintf(stderr, "sys_load_lib_directory %s %s\n", dirname, classname); ++#endif ++ ++ /* look for meta file (classname)/(classname).pd */ ++ strncpy(classname2, classname, MAXPDSTRING); ++ strcat(classname2, "/"); ++ strncat(classname2, classname, MAXPDSTRING-strlen(classname2)); ++ if ((fd = open_via_path(dirname, classname2, ".pd", ++ dirbuf, &nameptr, MAXPDSTRING, 1)) < 0) ++ { ++ return (0); ++ } ++ close(fd); ++ ++ /* Ultimately, the meta file will be read for meta data, specifically for ++ * the auto-generated Help system, but for other things too. Right now, ++ * its just used as a marker that a directory is meant to be a library. ++ * Plus its much easier to implement it this way, I can use ++ * open_via_path() instead of writing a new function. The grand plan is ++ * to have one directory hold the objects, help files, manuals, ++ * etc. making it a self-contained library. ++ */ ++ ++#if 0 ++ fprintf(stderr, "sys_load_lib_directory %s %s\n", dirname, classname); ++#endif ++ /* create full path to libdir for adding to the paths */ ++ strcpy(searchpathname,dirbuf); ++// strcat(searchpathname,"/"); ++// strncat(searchpathname,classname, MAXPDSTRING-strlen(searchpathname)); ++ ++ strncpy(helppathname, sys_libdir->s_name, MAXPDSTRING-30); ++ helppathname[MAXPDSTRING-30] = 0; ++ strcat(helppathname, "/doc/5.reference/"); ++ strcat(helppathname, classname); ++ ++ sys_searchpath = namelist_append_files(sys_searchpath, searchpathname); ++ /* this help path supports having the help files in a complete library ++ * directory format, where everything is in one folder. The help meta ++ * system needs to be implemented for this to work with the new Help ++ * menu/browser system. Ultimately, /path/to/extra will have to be added ++ * to sys_helppath in order for this to work properly. */ ++ sys_helppath = namelist_append_files(sys_helppath, searchpathname); ++ /* this supports having the help files in a distinct dir ++ * (i.e. doc/5.reference), but having the help files in subdirs named with ++ * the same name as the library directory. */ ++ sys_helppath = namelist_append_files(sys_helppath, helppathname); ++ ++ /* this should be changed to use sys_debuglevel */ ++ if (sys_verbose) ++ { ++ post("Added to search path: %s", searchpathname); ++ post("Added to help path: %s", searchpathname); ++ post("Added to help path: %s", helppathname); ++ } ++ if (sys_verbose) ++ post("Loaded libdir %s from %s", classname, dirbuf); ++ ++ return (1); ++} ++ ++/* } */ +Index: s_main.c +=================================================================== +RCS file: /cvsroot/pure-data/pd/src/s_main.c,v +retrieving revision 1.9.2.5 +diff -u -w -r1.9.2.5 s_main.c +--- s_main.c 24 Feb 2005 01:37:20 -0000 1.9.2.5 ++++ s_main.c 20 Nov 2005 01:52:20 -0000 +@@ -233,6 +233,7 @@ + /* load dynamic libraries specified with "-lib" args */ + for (nl = sys_externlist; nl; nl = nl->nl_next) + if (!sys_load_lib(cwd, nl->nl_string)) ++ if (!sys_load_lib_dir(cwd, nl->nl_string)) + post("%s: can't load library", nl->nl_string); + /* open patches specifies with "-open" args */ + for (nl = sys_openlist; nl; nl = nl->nl_next) +Index: s_stuff.h +=================================================================== +RCS file: /cvsroot/pure-data/pd/src/s_stuff.h,v +retrieving revision 1.5 +diff -u -w -r1.5 s_stuff.h +--- s_stuff.h 6 Sep 2004 20:20:36 -0000 1.5 ++++ s_stuff.h 20 Nov 2005 01:52:20 -0000 +@@ -47,6 +47,7 @@ + + /* s_loader.c */ + int sys_load_lib(char *dirname, char *filename); ++int sys_load_lib_dir(char *dirname, char *filename); + + /* s_audio.c */ + -- cgit v1.2.1