Let's say you have a package that has the following build process:
./configure ---prefix=/path/to/install make make install
and you want to turn it into a GPT package. Let's assume it doesn't depend on any other GPT packages. How do we do it?
First, we add a pkgdata/ subdirectory to the package. This is where GPT will find its metadata. Then, we create a file called pkgdata/pkg_data_src.gpt.in from the following template:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE gpt_package_metadata SYSTEM "package.dtd"> <gpt_package_metadata Format_Version="0.01" Name="package_name"> <Aging_Version Major="1" Minor="0" Age="0"/> <Description> Your Package </Description> <Functional_Group>Anything you want>/Functional_Group> <Version_Stability Release="groovy" /> <src_pkg > <Source_Dependencies Type="compile" > </Source_Dependencies> <Build_Environment > <cflags ></cflags> <external_includes ></external_includes> <pkg_libs ></pkg_libs> <external_libs ></external_libs> </Build_Environment> <With_Flavors build="no" /> <Version_Label>0.1</Version_Label> <Build_Instructions> <Build_Step>./configure --prefix=INSTALLDIR_GPTMACRO</Build_Step> <Build_Step>make</Build_Step> <Build_Step>make install</Build_Step> </Build_Instructions> </src_pkg > </gpt_package_metadata>
This will tell GPT that your package name is package_name, that it is version 1.0, and how it builds. If other packages are going to depend on your package, you should fill out the Build_Environment. The cflags are for any cflags that your package needs defined by people who include your headers. The external_includes are for system headers that need to be included when compiling against your package. pkg_libs are the linklines (like -lyour_lib) that must be specified to link against your package. External libs are for system libraries (like -lz or -lm) that must be specified to link against your package.
You can test this against a Globus installation by running "$GLOBUS_LOCATION/sbin/gpt-build -srcdir=." from the top directory of your package. It should follow the build steps and install your package. It will say that you have a lot of EMPTY PACKAGES though, which means you're not quite done.
The last step is to create a filelist so GPT knows what to package up in binaries. You can usually figure this out by touching a file in $GLOBUS_LOCATION, installing your package, then finding all the new files:
$ touch $GLOBUS_LOCATION/timestamp $ gpt-build -srcdir=. $ cd $GLOBUS_LOCATION $ find . -newer timestamp -type f > filelist
Put that filelist in your srcdir (one level above pkgdata/), and do another build. You should get fewer empty packages, and more to the point, you should now be able to grab your package in binary form:
$ $GLOBUS_LOCATION/sbin/gpt-pkg package_name
Double-check that the resulting .tar.gz under the binaries/ directory has all the files your package needs.
Your source directory with the pkgdata/ subdir is now your source GPT package.