[PATCH] allow building documentation for non-built packages

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
1 message Options
Reply | Threaded
Open this post in threaded view
|

[PATCH] allow building documentation for non-built packages

Paolo Bonzini-2
This is bug 103, for which Stephen had a much simpler patch.  But fixing
it "the right way" (Stephen's patch just avoided breaking the build, but
left the documentation unbuilt) also showed more use cases for
gst-package and gst-doc that are worth implementing.

In particular, I added a "--load" option to "gst-package --list-files"
(would be best to spell it --loaded, actually), which only prints
filed-in files.  And I changed the default `target directory' for
--list-files to the current directory (instead of the image file, which
worked by chance previously because we only invoked gst-package from the
image directory).

I'll let it stagnate on "master" for a while before moving it to the
stable branch.  You're invited to test it in the meanwhile.

Paolo

ps: thanks to git, the history for this patch is split in half a dozen
patches which logically separate the changes.  With the old system it
would have been way too slow to do so.

pps: I just found the equivalent for "tla missing -s <BRANCH>", that's
"git cherry -v HEAD <BRANCH>".

2008-01-18  Paolo Bonzini  <[hidden email]>
 
        * scripts/Package.st: Change default -t value for --list-files,
        reject --destdir and -t for --list-files.

        * scripts/GenDoc.st: Add --namespace, use #fullyDefinedLoadedClasses.

        * scripts/Package.st: Support multiple --list-files options, add
        --load and --test suboptions to --list-files.
 
        * GSTParser.st: Don't add an existing namespace when parsing
        "Namespace current: ... [ ]".

        * STLoader.st: Add #fullyDefinedLoadedClasses.
        * STLoaderObjs.st: Add #fullyDefinedLoadedClasses.

diff --git a/doc/Makefile.am b/doc/Makefile.am
index 00f0343..403b2e6 100644
--- a/doc/Makefile.am
+++ b/doc/Makefile.am
@@ -26,6 +26,7 @@ MOSTLYCLEANFILES = gst-libs.me gst-libs.mes gst-base.me gst-base.mes \
 
 GST_TOOL_ARGS = -I $(top_builddir)/gst.im --kernel-dir $(top_srcdir)/kernel
 GST_DOC = $(top_builddir)/gst-tool gst-doc $(GST_TOOL_ARGS)
+GST_PACKAGE = $(top_builddir)/gst-tool gst-package $(GST_TOOL_ARGS)
 
 ####################################################
 ##
@@ -82,37 +83,58 @@ install-data-local: install-man
 PUBLISHED_CLASSES = Smalltalk.* SystemExceptions.* NetClients.* VFS.*
 
 $(srcdir)/blox.texi: $(top_srcdir)/packages/blox/tk/stamp-classes
- $(GST_DOC) -p BloxTK -o $(srcdir)/blox.texi BLOX.* || \
+ $(GST_PACKAGE) $(patsubst %, %/package.xml, $(^D)) \
+  --load --list-files=BloxTK | \
+  sed s,^,-f, | \
+  xargs $(GST_DOC) -n BLOX -o $(srcdir)/blox.texi BLOX.* || \
   rm -f $(srcdir)/blox.texi
  test -f $(srcdir)/blox.texi && touch $(srcdir)/gst-libs.texi
 
 $(srcdir)/tcp.texi: $(top_srcdir)/packages/tcp/stamp-classes
- $(GST_DOC) -p TCP -o $(srcdir)/tcp.texi TCP.* || \
+ $(GST_PACKAGE) $(patsubst %, %/package.xml, $(^D)) \
+  --load --list-files=TCP | \
+  sed s,^,-f, | \
+  xargs $(GST_DOC) -n TCP -o $(srcdir)/tcp.texi TCP.* || \
   rm -f $(srcdir)/tcp.texi
  test -f $(srcdir)/tcp.texi && touch $(srcdir)/gst-libs.texi
 
 $(srcdir)/complex.texi: $(top_srcdir)/packages/complex/stamp-classes
- $(GST_DOC) -p Complex -o $(srcdir)/complex.texi Complex || \
+ $(GST_PACKAGE) $(patsubst %, %/package.xml, $(^D)) \
+  --load --list-files=Complex | \
+  sed s,^,-f, | \
+  xargs $(GST_DOC) -o $(srcdir)/complex.texi Complex || \
   rm -f $(srcdir)/complex.texi
  test -f $(srcdir)/complex.texi && touch $(srcdir)/gst-libs.texi
 
 $(srcdir)/debug.texi: $(top_srcdir)/packages/debug/stamp-classes
- $(GST_DOC) -p DebugTools -o $(srcdir)/debug.texi Debugger* || \
+ $(GST_PACKAGE) $(patsubst %, %/package.xml, $(^D)) \
+  --load --list-files=DebugTools | \
+  sed s,^,-f, | \
+  xargs $(GST_DOC) -o $(srcdir)/debug.texi Debugger* || \
   rm -f $(srcdir)/debug.texi
  test -f $(srcdir)/debug.texi && touch $(srcdir)/gst-libs.texi
 
-$(srcdir)/zlib.texi: $(top_srcdir)/packages/dbi/stamp-classes
- $(GST_DOC) -p ZLib -o $(srcdir)/zlib.texi ZLib.* || \
+$(srcdir)/zlib.texi: $(top_srcdir)/packages/zlib/stamp-classes
+ $(GST_PACKAGE) $(patsubst %, %/package.xml, $(^D)) \
+  --load --list-files=ZLib | \
+  sed s,^,-f, | \
+  xargs $(GST_DOC) -n ZLib -o $(srcdir)/zlib.texi ZLib.* || \
   rm -f $(srcdir)/zlib.texi
  test -f $(srcdir)/zlib.texi && touch $(srcdir)/gst-libs.texi
 
 $(srcdir)/dbi.texi: $(top_srcdir)/packages/dbi/stamp-classes
- $(GST_DOC) -p DBI -o $(srcdir)/dbi.texi DBI.* || \
+ $(GST_PACKAGE) $(patsubst %, %/package.xml, $(^D)) \
+  --load --list-files=DBI | \
+  sed s,^,-f, | \
+  xargs $(GST_DOC) -n DBI -o $(srcdir)/dbi.texi DBI.* || \
   rm -f $(srcdir)/dbi.texi
  test -f $(srcdir)/dbi.texi && touch $(srcdir)/gst-libs.texi
 
 $(srcdir)/i18n.texi: $(top_srcdir)/packages/iconv/stamp-classes $(top_srcdir)/packages/i18n/stamp-classes
- $(GST_DOC) -p Iconv -p I18N -o $(srcdir)/i18n.texi I18N.* || \
+ $(GST_PACKAGE) $(patsubst %, %/package.xml, $(^D)) \
+  --load --list-files=Iconv --list-files=I18N | \
+  sed s,^,-f, | \
+  xargs $(GST_DOC) -n I18N -o $(srcdir)/i18n.texi I18N.* || \
   rm -f $(srcdir)/i18n.texi
  test -f $(srcdir)/i18n.texi && touch $(srcdir)/gst-libs.texi
 
diff --git a/gst-tool.c b/gst-tool.c
index 78d5022..542e614 100644
--- a/gst-tool.c
+++ b/gst-tool.c
@@ -117,7 +117,7 @@ struct tool tools[] = {
   {
     "gst-doc", "scripts/GenDoc.st",
     "-h|--help --version -p|--package: -f|--file: -I|--image-file: \
-        -o|--output: --kernel-directory:",
+        -n|--namespace: -o|--output: --kernel-directory:",
     NULL
   },
   { NULL, NULL, NULL, NULL }
diff --git a/packages/stinst/parser/GSTParser.st b/packages/stinst/parser/GSTParser.st
index 5a1a045..a452eb0 100644
--- a/packages/stinst/parser/GSTParser.st
+++ b/packages/stinst/parser/GSTParser.st
@@ -8,7 +8,7 @@
 
 "======================================================================
 |
-| Copyright 2007 Free Software Foundation, Inc.
+| Copyright 2007, 2008 Free Software Foundation, Inc.
 | Written by Daniele Sciascia.
 |
 | This file is part of the GNU Smalltalk class library.
@@ -111,15 +111,18 @@ STInST.STFileInParser subclass: GSTFileInParser [
     ]
     
     parseNamespace: node [  
-        | namespace fullNamespace |
+        | namespace fullNamespace newNamespace |
         namespace := RBVariableNode
     named: self driver currentNamespace name asString.
         fullNamespace := RBVariableNode
     named: (self driver currentNamespace nameIn: Smalltalk).
 
-        self evaluateMessageOn: namespace
-             selector: #addSubspace:
-             argument: node arguments first name asSymbol.
+ newNamespace := node arguments first name asSymbol.
+ (self driver currentNamespace includesKey: newNamespace)
+    ifFalse: [
+        self evaluateMessageOn: namespace
+             selector: #addSubspace:
+             argument: node arguments first name asSymbol ].
           
         self evaluateStatement: node.      
         self parseDoits.
diff --git a/packages/stinst/parser/STLoader.st b/packages/stinst/parser/STLoader.st
index 5557ff5..4488a12 100644
--- a/packages/stinst/parser/STLoader.st
+++ b/packages/stinst/parser/STLoader.st
@@ -8,7 +8,7 @@
 
 "======================================================================
 |
-| Copyright 2001, 2002, 2007 Free Software Foundation, Inc.
+| Copyright 2001, 2002, 2007, 2008 Free Software Foundation, Inc.
 | Written by Paolo Bonzini.
 |
 | This file is part of GNU Smalltalk.
@@ -231,6 +231,10 @@ loadedClasses
     ^loadedClasses
 !
 
+fullyDefinedLoadedClasses
+    ^loadedClasses select: [ :each | each isFullyDefined ]
+!
+
 result
     "This is what #parseSmalltalk answers"
     ^self loadedClasses
diff --git a/packages/stinst/parser/STLoaderObjs.st b/packages/stinst/parser/STLoaderObjs.st
index d48a624..d02cb05 100644
--- a/packages/stinst/parser/STLoaderObjs.st
+++ b/packages/stinst/parser/STLoaderObjs.st
@@ -8,7 +8,7 @@
 
 "======================================================================
 |
-| Copyright 1999, 2000, 2001, 2002, 2007 Free Software Foundation, Inc.
+| Copyright 1999, 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc.
 | Written by Paolo Bonzini.
 |
 | This file is part of GNU Smalltalk.
@@ -557,6 +557,11 @@ isDefined
     ^true
 !
 
+isFullyDefined
+    self isDefined ifFalse: [ ^false ].
+    ^self superclass isNil or: [ self superclass isFullyDefined ]
+! !
+
 
 !PseudoBehavior methodsFor: 'abstract'!
 
@@ -655,6 +660,16 @@ on: aClass for: aSTClassLoader
     ^(self for: aSTClassLoader) setProxy: aClass
 ! !
 
+!ProxyClass methodsFor: 'testing'!
+
+isDefined
+     ^true
+!
+
+isFullyDefined
+     ^true
+! !
+
 !ProxyClass methodsFor: 'delegation'!
 
 = anObject
diff --git a/scripts/GenDoc.st b/scripts/GenDoc.st
index a79af18..b5e2b78 100644
--- a/scripts/GenDoc.st
+++ b/scripts/GenDoc.st
@@ -31,19 +31,21 @@
 "Load the prerequisites"
 PackageLoader fileInPackage: #ClassPublisher!
 
-| package outFile publisher files classes classPatterns loader |
+| package outFile publisher files classes classPatterns loader defaultNamespace |
 
 classPatterns := OrderedCollection new.
 publisher := STInST.TexinfoDocPublisher.
+defaultNamespace := Smalltalk.
 
 helpString :=
 'Usage:
     gst-doc [ flag ... ] class ...
 
 Options:
+    -I --image-file=FILE  look for classes in the given image
     -p --package=PKG      look for classes in the given package
     -f --file=FILE        look for classes in the given file
-    -I --image-file=FILE  look for classes in the given image
+    -n --namespace=NAMESP load files in the given namespace
     -o --output=FILE      emit documentation in the given file (default=stdout)
        --kernel-dir=PATH  use the specified kernel directory
     -h --help             show this message
@@ -56,7 +58,7 @@ Options:
 
     "Parse the command-line arguments."
     Smalltalk
-        arguments: '-h|--help --version -p|--package: -f|--file:
+        arguments: '-h|--help --version -p|--package: -f|--file: -n|--namespace:
                     -I|--image-file: -o|--output: --kernel-directory:'
         do: [ :opt :arg |
 
@@ -73,6 +75,17 @@ Options:
         self error: '--output specified multiple times' ].
     outFile := arg ].
 
+ opt = 'namespace' ifTrue: [
+            defaultNamespace := Smalltalk.
+            (arg subStrings: $.) do:
+                [:each |  
+                | key |
+                key := each asSymbol.
+                (defaultNamespace includesKey: key)
+    ifFalse: [defaultNamespace addSubspace: key].
+                defaultNamespace := defaultNamespace at: key].
+        loader currentNamespace: defaultNamespace ].
+
         opt = 'package' ifTrue: [
     package := PackageLoader packageAt: arg.
     loader currentNamespace: package createNamespace.
@@ -83,7 +96,7 @@ Options:
             parseSmalltalkStream: file
             with: STInST.GSTFileInParser ].
 
-    loader currentNamespace: Smalltalk ].
+    loader currentNamespace: defaultNamespace ].
 
         opt = 'file' ifTrue: [
     file := FileStream open: arg mode: FileStream read.
@@ -99,12 +112,12 @@ Options:
 
     classPatterns isEmpty
         ifTrue: [
-            classes := loader loadedClasses.
+            classes := loader fullyDefinedLoadedClasses.
             classes isEmpty
         ifTrue: [ self error: 'specify -p, -f, or a class name' ] ]
         ifFalse: [
     allClasses :=
-        loader loadedClasses,
+        loader fullyDefinedLoadedClasses,
         (Class allSubclasses collect: [ :each | each instanceClass ]).
 
     classes := IdentitySet new.
diff --git a/scripts/Package.st b/scripts/Package.st
index d02b53f..be352a3 100644
--- a/scripts/Package.st
+++ b/scripts/Package.st
@@ -267,14 +267,23 @@ Object subclass: Command [
     runOnPackage: aPackage [ ]
 
     listFiles: listFiles [
- | base vpathBase vpath |
+ | base vpathBase vpath source test |
  vpath := self isOption: 'vpath'.
+ source := self isOption: 'load'.
+ test := self isOption: 'test'.
  base := self installDir.
  vpathBase := Directory name: self srcdir.
 
-        listFiles do: [ :each || package |
+        listFiles do: [ :each || package files |
     package := self packages at: each.
-    package allFiles do: [ :file |
+    files := source
+ ifFalse: [ package allFiles ]
+ ifTrue: [ package fileIns ].
+
+    (test and: [ source and: [ package test notNil ]])
+ ifTrue: [ files := files, package test fileIns ].
+
+    files do: [ :file |
  | path relativePath |
  path := package fullPathOf: file.
  relativePath := base pathTo: path.
@@ -474,8 +483,14 @@ Command subclass: PkgUninstall [
 ]
 
 Command subclass: PkgList [
-    validOptions [ ^#('list-files' 'vpath') ]
-    validateDestDir: destdir installDir: installDir [ ]
+    validOptions [ ^#('list-files' 'vpath' 'load') ]
+    validateDestDir: destdir installDir: installDir [
+ destdir = ''
+    ifFalse: [ self error: '--destdir not needed with --list-files' ].
+ installDir isNil
+    ifFalse: [ self error: '--target-directory not needed with --list-files' ]
+    ]
+    defaultInstallDir [ ^'.' ]
 ]
 
 PkgList subclass: PkgPackageList [
@@ -682,6 +697,8 @@ Common suboptions:
  --load                  also load the Smalltalk files in the image
 
 --list-files suboptions:
+ --load                  only list files that are filed in when loading
+ --test                  with --load, also include unit test files
  --vpath Omit path to srcdir for files that are there
 
 --dist suboptions:
@@ -730,7 +747,8 @@ The default target directory is ', Directory image, '
  mode isNil ifFalse: [ self error: 'multiple modes specified' ].
  mode := PkgPrepare ].
             opt = 'list-files' ifTrue: [
- mode isNil ifFalse: [ self error: 'multiple modes specified' ].
+ (mode isNil or: [ mode = PkgList ])
+     ifFalse: [ self error: 'multiple modes specified' ].
  listFiles add: arg.
  mode := PkgList ].
 

_______________________________________________
help-smalltalk mailing list
[hidden email]
http://lists.gnu.org/mailman/listinfo/help-smalltalk