Merge pull request #506 from andrewcsmith/patch-2
[supercollider.git] / HelpSource / Guides / UsingQuarks.schelp
blobfe6c6a86cf16db37d9442c7e243c3cef8727bf0e
1 title:: Using Quarks
2 summary:: A guide to Quarks
3 categories:: Quarks
4 related:: Classes/Quark, Classes/Quarks
6 SC supports extensions to its class library, documentation, and server UGen plugins. These extensions are stored in
7 subfolders of code::Platform.userExtensionDir::. For more info see link::Guides/UsingExtensions::.
9 A Quark is a more formalized kind of extension folder. It can be shared with others and can be easily installed or
10 uninstalled using the Quarks package manager. The package manager has a directory of "quarkfiles" which describe the
11 quarks and how to install them automatically for you.
13 There is a shared library of these packages on SourceForge http://quarks.sourceforge.net offering a variety of useful
14 extra capabilities for SC.
17 section:: Obtaining quarks
19 There are two standard ways to obtain this shared Quarks library.
21 subsection:: Downloaded binary
23 If you have downloaded the full binary of SC then you already have them in the Optional Extras folder of the SC
24 download. If so, move the 'quarks' folder into this directory:
26 code::
27 // execute this code to post the directory path
28 Platform.userAppSupportDir
31 note:: do not place it inside Extensions. If you place all of them inside extensions, then they will all be in the
32 compile path. ::
34 The Quarks package manager will now be able to install and uninstall individual Quark packages.  It does so by making a
35 symlink in the Extensions/quarks/ folder, pointing back to the quark's source code which stays in the User App Support
36 directory.
38 code::
39 // manage Quarks packages from a gui
40 Quarks.gui
43 note:: Do not turn everything on. Start slowly::
45 Some Quarks depend on other Quarks and will automatically install the other ones they need. Conflicts of classes and
46 package dependencies are always a possibility, so be aware that you may "break" your SC so that it cannot compile what
47 has been placed in its compile path.
49 If this happens, simply open the extension folder (code::Platform.userExtensionDir::) and delete the symlinks inside the
50 quarks folder. (Remember: these symlinks point back to the actual quarks sitting harmlessly in your app support
51 directory)
54 subsection:: Getting Quarks from the SVN repository
56 The other way to obtain the Quarks library is to checkout a copy using Subversion (SVN). SC is fully integrated with SVN
57 and can checkout single quarks or update them whenever developers make changes.  This is a wonderful thing since you can
58 complain about a broken knob, somebody in Belgium will fix it and a few hours later its working for you.
60 You will need the subversion client software installed (link::http://subversion.tigris.org::). To check whether you
61 already have it, type "svn help" in a terminal window.
63 If you have previously installed the quarks library from the binary download, you should move or delete that folder now.
65 The Quarks class and the quarks gui manager will be executing subversion commands.
67 On Mac, those commands will launch in a terminal window. The first time you run a SourceForge quarks svn command you
68 will be asked whether to accept the SSL certificate for SourceForge.  Press 'p' to accept it permanently.
70 section:: Using Quarks
71 subsection:: The DIRECTORY
73 The quarks folder contains a folder called DIRECTORY filled with quarkfiles xxxxxxxxy.quark. These file describe the
74 quark, the developer and note any dependencies.  You can update the directory without downloading all of the quarks.
76 The following command will make sure you have an up-to-date directory listing (you can run this whether or not it's your
77 first time using quarks):
79 code::
80 Quarks.updateDirectory
82 // list all quarks in the repository
83 Quarks.repos.quarks
86 Note that checking out or updating the directory touches only the list of quarks. It does not check out or update any
87 code or help files that belong to a quark. If you want to get the latest code for an individual quark, use the
88 instructions in the next section. To checkout or update the entire Quarks repository:
90 code::
91 Quarks.checkoutAll; // NB: most users don't want ALL quarks, so getting them all might be a waste of disk space!
92 Quarks.update;
95 Individual Quarks can be updated by providing the name to the update method:
97 code::
98 Quarks.update("testquark"); // much better use of your hard disk. (NB this assumes you already have installed "testquark")
101 subsection:: Checking out and Installing a Quark
103 Either launch the package manager to install/uninstall individual Quarks:
105 code::
106 Quarks.gui
109 which we hope is somewhat self explanatory.  (and steadily improving)
111 ...or use the "checkout" command directly:
113 code::
114 // checks it out from svn
115 Quarks.checkout("testquark");
117 // this installs it
118 Quarks.install("testquark");
121 This symlinks the quark's sourcecode folder into your Extensions directory.  The source code itself stays in the quarks
122 folder, but the symlink is in your Extensions directory (and thus in SC's compile path).
124 After a quark is installed you must recompile the language. Installing simply places the code into SC's compile path.
125 You must then recompile the class library.
127 Then you can use it:
128 code::
129 TestQuark.sayHello
132 subsection:: Uninstall
134 You can of course uninstall quarks if you decide you don't need them:
136 code::
137 Quarks.uninstall("testquark");
139 // list those installed
140 Quarks.installed
143 subsection:: Dependencies
145 Quarks may specify other quarks that they are dependent on. code::Quarks.install:: will also attempt to install those
146 other quarks that the desired quark depends upon, if not already installed. You can prevent this if neccessary by
147 passing false as the second argument to code::Quarks.install::.
149 code::
150 Quarks.install( "somequark", includeDependencies: false )
153 Similarly the install command will attempt to download quarks if you don't already have them locally. You can prevent
154 this using the allowCheckout argument:
156 code::
157 Quarks.install( "somequark", checkoutIfNeeded: false )
159 // list those in the repository that you could checkout
160 Quarks.repos.quarks
162 // list those that you have checked out and could now install
163 Quarks.local.quarks
166 subsection:: Check out all available Quarks
168 code::
169 Quarks.checkoutAll
172 This downloads all of them into {Application Support Directory}/quarks but does not yet install them into your class
173 library. It can be particularly helpful because you won't in future need to have an internet connection to install the
174 quarks: they are already downloaded even if not installed.
176 code::
177 // post those checked out
178 Quarks.checkedOut
180 // post those checked out with a description
181 Quarks.listCheckedOut
183 // post all available with a description
184 Quarks.listAvailable
187 subsection:: Standard SVN tools
189 The Quarks class interface mirrors the familar svn commands while substituting in the correct paths.
191 code::
192 Quarks.update( "testquark" )
193 Quarks.update // updates all
195 Quarks.status( "testquark" )
196 Quarks.status // status of all
199 You may also use any standard SVN tools which is probably easier especially for add and commit.
201 The principal repository is located at: link::https://quarks.svn.sourceforge.net/svnroot/quarks::
204 section:: Creating a Quark
206 Adding a Quark requires using standard SVN tools. Create your folder in {Application Support}/quarks/ (we'll assume it's
207 called quarkname). Place your classes in this folder. Place a quark file called quarkname.quark into {Application
208 Support}/quarks/DIRECTORY (see link::Classes/Quark:: for the format). You can now install, re-compile, test and
209 uninstall install the quark from your local system without having added it into the public repository. You can use
210 quarks for your own private purposes to install and uninstall packages of classes.
212 subsection:: Adding a quark to the public repository
214 You will need a SourceForge account to publish a quark to the subversion repository. You will need to be familiar with
215 the basics of svn. You also need the account to be added to the "quarks" project - contact one of the admins listed at
216 link::http://sourceforge.net/projects/quarks:: to do that.
218 Once you're authorised:
220 In a shell go to {Application Support}/quarks/ and execute:
222 teletype::
223 svn add quarkname
225 svn add DIRECTORY/quarkname.quark
227 svn commit -m "adding quarkname" quarkname
228 svn commit -m "adding directory entry for quarkname" DIRECTORY/quarkname.quark
231 Be careful to commit only changes to your own quark and to the directory entry you have added.
234 subsection:: Local Repository Example
236 Besides the public repos at sourceforge you can use any other subversion host including a repository running on your
237 local machine. Running a local repository is suprisingly easy. This is useful in that you get version control and an
238 easy way to manage package installation.
240 For obvious reasons you need to have a running subversion system somewhere in order to use this feature.  Nevertheless
241 it is possible to use alreadily existing subversion quarks directories (as the SonEnvir one).
243 numberedList::
245 ## Create a directory in svn-repos (e.g. quarks-<yourname/id/institution>). note:: This name has to be unique across all
246 Quark repositories you will ever check out! :: Create a dir within it called "DIRECTORY" containing quark files.
248 ## Fill repos with your work
250 ## Now use Quarks to make it accessible in SC (shown at hand of the existing and publicly available SonEnvir quarks):
252 code::
253 ~qSonEnvir = Quarks(
254     reposPath: "https://svn.sonenvir.at/repos/SonEnvir/trunk/src/quarks-sonenvir",
255     localPath: Platform.userAppSupportDir ++ "/quarks-sonenvir"
258 ~qSonEnvir.checkoutAll;
259 // or, if alreadily checked out at the appropriate place:
260 ~qSonEnvir.update;
263 ## now install your quarks:
265 code::
266 // post all checked out
267 ~qSonEnvir.listCheckedOut;
269 // or post all available with a description
270 ~qSonEnvir.listAvailable
272 ~qSonEnvir.install("sonenvir-testquark");
273 ~qSonEnvir.isInstalled("sonenvir-testquark");
275 ~qSonEnvir.listInstalled
278 ## recompile
279 ## test
281 code::
282 SonEnvirTestQuark.sayHello
284 ~qSonEnvir = Quarks(
285     reposPath: "https://svn.sonenvir.at/repos/SonEnvir/trunk/src/quarks-sonenvir",
286     localPath: Platform.userAppSupportDir ++ "/quarks-sonenvir"
290 ## remove what you're don't need
291 code::
292 ~qSonEnvir.uninstall("sonenvir-testquark")
294 // recompile
295 SonEnvirTestQuark.sayHello
296 // -> error
300 ## update
302 code::
303 ~qSonEnvir.updateDirectory
304 ~qSonEnvir.update