SourceFiles.org - Use the Source, Luke
Home | Register | News | Forums | Guide | MyLinks | Bookmark

Related Sites

Latest News
  General News
  Reviews
  Press Releases
  Software
  Hardware
  Security
  Tutorials
  Off Topic


Back to files

README Updated June 23, 1999

gbuild script environment
by Stephen Rust <steve@tp.org>
Current version = 0.6

Table of Contents (TOC)

I. Introduction
II. Distribution Files
III. Current Features
IV. TODO
V. gbuildrc syntax
VI. Examples

I. Introduction

gbuild was created to automate the build process when checking out new cvs code and compiling it for gnome. It was created because no tools that I currently found available did the job that I wanted done, namely: easy to work with, powerful, and possible to have the entire process automated from cvs checkout --> compile --> tar file --> rpm.

The current tools such as CvsToRPM or gnometool were both good for their functions but didn't offer the whole package.

It is hoped that this gbuild package will be useful to you. It seems robust enough to work in a variety of ways. It is not perfect and will not work for all cases, but should work quite well in most cases. If there are problems that you find, or features that you would like to see, or trouble with some of the features please don't hesitate to let me know. I should be reachable at <mailto:steve@tp.org>. I want to make it as bug-free was possible so it can be usable in nearly all situations.

II. Distribution Files

gbuild/README                   -- This README file
gbuild/AUTHORS                  -- List of Contributors to gbuild
gbuild/ChangeLog                -- The list of latest changes
gbuild/INSTALL                  -- INSTALL notes on installation
gbuild/data/PARTS               -- PARTS file the module list.  One module per line.
gbuild/data/gbuildrc            -- A sample .gbuildrc file.  Copy to $HOME/.gbuildrc
gbuild/scripts/autospec         -- Perl script used to auto-create .spec files
gbuild/scripts/gbuild           -- the main gbuild script

gbuild/scripts/geninstallfiles -- generates file list for a module gbuild/scripts/gbuild-config -- current gbuild install info

gbuild is now using the automake/autoconf system. The scripts are generated at configure time. The default install location will be /usr/local. The scripts will be installed in $prefix/bin, and all other data files will be placed in $prefix/share/gbuild. This includes the PARTS file, sample gbuildrc, this README file, and the directories of log, rpm, spec, srpm, and tar.

NOTE: For users who don't have write permission to the gbuild install location, $HOME/.gbuild will be used as the equivalent to $prefix/share/gbuild. Meaning, that on a per-user basis, the log, rpm, spec, srpm, and tar files built by that user will be placed in this place in their home directory. Also, the PARTS file if placed in $HOME/.gbuild/PARTS will override any system defined parts located in $prefix/share/gbuild/PARTS. This allows for any user to customize their PARTS file without needing to have write access to the system default.

NOTE2: I will refer to $ioprefix as $prefix/share/gbuild or $HOME/.gbuild or the directory specified in the -sd option, throughout this file.

The following files are created when gbuild is run. They are placed in the $ioprefix/log directory. In other words, they are placed in $prefix/share/gbuild/log if you have write access to that directory when running gbuild, or are placed in $HOME/.gbuild/log. Also, you can specify the directory explicitly. See the -sd option below.

AUTOGEN.<name>.LOG      -- All configure, make, make install output
                           goes here.  The package name you are compiling
                           for is put in place of <name>.  
COMPILE.LOG             -- A log description of what modules were
                           compiled when, and if they were successful.

III. Current Features

gbuild accepts the following command-line options:

-h, --help

                View the command line options help screen.
                Shows a brief description with -h, or a longer
                description with --help.

        -version, --version

                Show gbuild version information

        --norc

                Bypass the rc file. This option is used mainly by
                gbuild itself when recursive calls are made to setup
                the variables correctly.  Untested when using it
                manually yourself.
 
        -v      
                Verbose operating mode
                This will show the processing that occurs of the command
                line arguments.  Each step of the processing will be 
                described step by step as things go along.

        -V
                Extra verbose mode
                
                This function doesn't currently do much.  The idea is
                to print the Autogen, and compile output to the screen
                as well as to the output files.
                
        -d <directory>

                Specify a working directory

                Use this option to specify where the code to compile is,
                or where to place code that is updated through cvs.

                This is the directory where all the modules' directories
                are located or will be located.  If the sub-directories of
                your current directory is not where the modules are
                located, supply this option to tell gbuild where to look.
                This is one of the more important options, as it is 
                necessary to be looking in the right directory for what
                you want done.  See Examples section below for better
                clarification

        -sd <directory>

                Specify directory for I/O files
                This sets the $ioprefix for gbuild.

                The directory specified by -sd is usually the base
                directory of gbuild.  This directory should contain
                the PARTS file, the spec directory, the tar directory,
                the log directory, the rpm and srpm directory.

                The default search order uses $prefix/share/gbuild if you
                have write access to that directory, or secondly        
                $HOME/.gbuild, or the dir specified with the -sd option.

        -cd <directory>

                Specify the compile directory.

                The package will be copied (archived: cp -au) to the compile
                directory.  This insures that the code is pristine where it
                is downloaded, and any object files are placed in a separate
                space.  Its generally a good idea to use this option.

        -co <commands>

                Specify checkout option.
                By default, -co is set to 'checkout'.

                This option is used to specify the cvs option on how to checkout 
                or update the code.  Can specify update, checkout or any variations 
                of the CVS commands.  Usable to checkout specific versions of the 
                packages and similar capabilities.

                Common choices include: -co checkout, -co update, -co update -d
                Or for the case of a specific version: -co update -r 1.1

        -u [module list]

                Perform CVS update of code

                This is one of the main gbuild options.

                With no modules listed after the -u option, the PARTS file will be
                used to get the module names.

                gbuild will attach to the cvs server specified in
                shell environment variable CVSROOT (by running cvs) and
                will use the command specified with the -co option.  The modules 
                specified on the command line, or in the PARTS file, will
                be updated.  Any number of modules to update can be supplied 
                after a -u option.

                See Examples section below. 

        -c [module list]

                Perform compile of code

                This option runs autogen.sh or configure (or make if those
                aren't found), then runs make, and then make install on
                the specified modules.

                gbuild will enter the directory specified by the -d option
                (or the current directory, if no -d option is given) and
                attempt to compile.  It will try autogen.sh, configure, or
                just plain make, in that order, using the first one that
                exists, or returning an error if none of the 3 work.  Any
                number of modules to compile can be supplied after a -c.
                If no modules after the -c option are given, the PARTS variable
                will be set from the .gbuildrc or the default PARTS file found
                in the ioprefix directory.  See -sd above.

        -opt <option-list>

                specify an optlist to pass to the compile line.
                Use this option to supply additional parameters to
                autogen.sh or configure.  Any number of parameters can
                be supplied after a -opt.  Some examples include:

                -opt --prefix=/opt/Package --disable-static

                and others.

        --tar
                Supply this option in conjunction with the -c option to
                build a tar file of the code.  The tar file is placed
                in $ioprefix/tar.  It basically runs a 'make dist' 
                command on the module.

        --spec
                Use the autospec perl script to build a .spec file of the
                module.  This option can only be used if the -c option is
                also specified.  The resultant spec file will be placed
                in $ioprefix/spec.

                The spec file search order will first look in $ioprefix/spec,
                and then in the module directory for one that might have
                been distributed with the module itself.  If you want to use
                the spec file distributed with the module, don't use the
                --spec option.  Otherwise, if a spec file exists in 
                $ioprefix/spec for that module the one distributed with the
                package won't be used.

        --rpm
                Build an rpm file of the modules.  This option can
                only be used along with the -c option.  The module
                code is installed in a temporary working space, and
                the rpm is created without doing another build of the
                code.  The resultant rpm file will be placed in
                $ioprefix/rpm.  This option builds only a binary rpm, 
                not an srpm.  A very stripped down spec file is
                created and used so none of the prep, build, or other
                rpm options are used at all during the building of the
                rpm.

        --srpm
                Same as the --rpm option, only builds both binary rpm
                and source rpm (srpm) files

        --init
                If you don't have write access to $prefix/share/gbuild
                you will get a message back telling you to use the --init
                option.  This will create the $HOME/.gbuild directory
                structure, creating the log, rpm, spec, srpm, and tar
                directories in your home directory.     

        --tmp <directory>

                Allows you to specify the tmp directory for tmp working
                space.  By default, the /tmp directory is used.

        --includes <options>

                The includes add to the GLOBAL options specified in the
                .gbuildrc file.  It is ':' delimited options list adding
                package specific parameters to use when building a specific
                package.  This option can also be supplied in the .gbuildrc
                file as the INCLUDES variable.  Its recommended to use the
                .gbuildrc file instead of supplying these type of options
                on the cmdline.  See the gbuildrc section for more.
        
        --excludes <options>
        
                The 'excludes' remove items from the GLOBAL options specified
                in the .gbuildrc file.  It is used to remove options for a
                specific package.  For example, if you want to compile
                everything with a certain option, but remove that option for
                one specific package.  See Examples section below.  This option
                can also be supplied in the .gbuildrc file as the EXCLUDES
                variable.  See the gbuildrc section for more.

        --replace <options>

                The 'replace' options replaces package specific options with new
                fields.  For example, if you want to install all packages except
                for one or two into the same location on your drive, specify this
                option to change the install location for those few specific
                packages.  See Examples section below.  This option can also be
                supplied in the .gbuildrc file as the REPLACE variable.  See the
                gbuildrc section for more.

IV. TODO

  • Implement the -V extra verbose option. Currently does nothing.
  • Parse Makefile.am or similar file so we can build dependency lists and automatically choose the order of building packages, given a list.
  • Run all builds, and dependency checks, without actually doing an install. This is important, as we aren't always able or wanting to install the packages right away.

V. gbuildrc syntax

There are usually 3 main variables that should be set in the .gbuildrc. This includes the GLOBAL variable which applies options to every module, the INCLUDES variable which applies options to specific modules, the EXCLUDES variable which removes options from specific modules, and the REPLACE variable which does a string replace on an option for specific modules.

The variables are set with a string, with each module's options of INCLUDES, EXCLUDES, REPLACE separated by newlines or tabs. Use spaces inside of the : options to specify more than one option for the module on the same line.

The module name and its options are separated by a :

#.gbuildrc:

GLOBAL="-opt --disable-static --prefix=/usr/local -d/home/cvs -cd/home/compile"

INCLUDES="      imlib:--tar
                gimp:--spec --rpm
                esound:--spec --rpm"
EXCLUDES="      ORBit:--disable-static"
REPLACE="       gimp:--prefix=/usr/local:--prefix=/opt/gimp"

# end .gbuildrc

Stepping through this file line by line. We first have the GLOBAL option. The line of GLOBAL will apply all the gbuild options to each module. Any standard gbuild option can be supplied here in the GLOBAL variable. It is the equivalent of supplying each of those options on the cmdline.

The INCLUDES variable is set next. the syntax is:

<module-name>:<options>

the 'imlib:--tar line' will add the --tar gbuild option only for the imlib module. the 'gimp:--spec --rpm' line will add the --spec and --rpm options only for the gimp module. the 'esound:--spec --rpm' line will add the --spec and --rpm options for the esound module.

Each of these 3 lines are separated only by newlines and by tabs. Specific options, like in the gimp & esound lines are separated just by spaces between the --spec and --rpm options.

The EXCLUDES variable is set next. the syntax is:

<module-name>:<options>

'ORBit:--disable-static' removes the global option --disable-static which was set in the GLOBAL settings, for the module ORBit. ORBit can't compile with this option, so this allows us to remove the option for the specific module ORBit but still compile all our other modules with the --disable-static option.

The REPLACE variable is next. The syntax is:

<module-name>:<current-string>:<replace-string>

If you're familiar with sed search and replace syntax, this option works the same way. Whatever is placed in the '<current-string>' part, will be replaced with whatever is in '<replace-string>' for the module name '<module-name>'. In this case, we want to install gimp in a different location so we change the prefix line from: --prefix=/usr/local to --prefix=/opt/gimp.

There is no limit to how many different modules you can supply inside of the options.

A default setup is installed as $prefix/share/gbuild/gbuildrc. Copy, and edit that file to your specifications into $HOME/.gbuildrc

VI. Examples

Q) Compile all modules from PARTS

gbuild -c

Q) Compile all modules, building spec files, tar files and rpms

gbuild -c --spec --tar --rpm

Q) Compile glib module located in subdirectory gnome

gbuild -d gnome -c glib

Q) Update and then compile glib located in subdirectory gnome

gbuild -d gnome -u glib -c glib

Q) Update lots of modules, only compiling a few

gbuild -d gnome -u glib gtop imlib ORBit -c gtop imlib

Q) Update gnome module into current directory

gbuild -u

        Q) Update a module, Compile it, build a tar file, build the spec
           file, then build an rpm

                gbuild -u glib -c glib --tar --spec --rpm

        Q) Compile gnome-libs with --prefix=/opt/gnome option.
           gnome-libs is located in the /opt/gnome-compile directory

                gbuild -d /opt/gnome-compile -c gnome-libs -opt --prefix=/opt/gnome

        Q) gbuild root is not the current working directory, its in 
           /home/user/gbuild.  modules need to be checked out in another
           subdirectory also, /opt/gnome.
           I need a tar file of imlib, ORBit, and gtk+

                gbuild -d /opt/gnome -sd /home/user/gbuild -c imlib ORBit gtk+ --tar

        Q) Specify checkout option
        
                gbuild -u gnome-libs -co checkout -r GNOME_STABLE

        Q) Don't use --disable-static with ORBit, even though we specified --disable-static
           in the .gbuildrc file as a GLOBAL option.

                gbuild -c ORBit --excludes ORBit:--disable-static

        Q) Install gimp in /opt/gimp, even though we specified /opt/gnome as the default
           install location in the GLOBAL option of the .gbuildrc file.

                gbuild -c gimp --replace gimp:/opt/gnome:/opt/gimp

VII. Feedback

Please contact me with questions, bug-reports, or general feedback regarding gbuild. Gbuild's home is currently http://www.cryon.com/gbuild. Email contact is: steve@tp.org

Thanks and enjoy!
Steve


Other Sites

Discussion Groups
  Beginners
  Distributions
  Networking / Security
  Software
  PDAs

About | FAQ | Privacy | Awards | Contact
Comments to the webmaster are welcome.
Copyright 2006 Sourcefiles.org All rights reserved.