FGSDevNotes

The MapTools FGS Pages contain a variety of information for FGS users, and those wanting to develop packages for it. This page is mostly suplementary information as I learn my way around developing for FGS.

FAQs
Q: Some of the source distributions are no longer available at their original urls so my builds fail.

A: Download packages from http://dl.maptools.org/dl/fgs/fgs-dev/fgs-cache/ to your fgs-dev/cache directory. In some cases, downloads will *appear* to succeed, like libpng, but in fact all you get is an html file indicating the path is wrong. Caveat emptor.

Q: When I use "fgsdev custom_build_list create _module_name_1_ _module_name_2_" what do I use for module names?

A: Look in fgs-dev/pkg_def/build.list, and use names from that file, with "-base" appended. So the file has "tiff:3.7.2" but you would use "tiff-base" as the package name. I'm not sure why the -base.

notes on FGS-DEV layout
Basic Directory Structure of FGS-DEV

fgs-dev/-| |--bin/--| |       |--lib/ |         |--cache/ |         |src/ |         |          |--pkg_def/--| |           |--_misc/ |           |--/--| |                               |--base.skeleton/ |--built/--| |         |--_lib/ |         |--/ |         |--modules/--| |--base/ |--/

definitions:
 * package - source code package
 * module - fgs-dev tar gzipped of compiled package

fgs-dev/
 * Root directory for fgs-dev environment.

Contains:
 * Setenv.sh
 * sets up the fgs-dev env vars
 * FGS_DEV_HOME (location fgs-dev)
 * PATH ($FGS_DEV_HOME/bin to beginning of PATH)
 * PYTHONPATH
 * LD_LIBRARY_PATH ($FGS_DEV_HOME/built/_lib)
 * FGS_SRC_CACHE_DIR ($FGS_DEV_HOME/cache)

fgs-dev/bin
 * Main directory for all fgsdev commands used to build fgs modules

Contains:
 * fgsdev
 * wrapper for fgsdev commands
 * fgsdev custom_build_list
 * fgsdev build_all
 * fgsdev build_pkg 


 * fgs_build_all.sh
 * builds all packages listed in fgs-dev/build.list by calling fgs_build_pkg.sh for each entry


 * fgs_build_pkg.sh
 * build a single package by calling:
 * fgs-dev/src//fgs_build.sh
 * fgs-dev/src//fgs_install.sh


 * fgs_installer.sh
 * script to install fgs

fgs-dev/bin/lib


 * Dirctory that contains all commands and functions used by scripts in fgs-dev/bin

Contains:
 * fgsdev_env.sh -
 * sets FGS-DEV env vars to configure and compile src packages
 * UNAME_MACHINE
 * UNAME_SYSTEM
 * FGS_PKGS_DEF_HOME ($FGS_DEV_HOME/pkg_def)
 * FGS_STANDARD_BUILD_FILE ($FGS_PKGS_DEF_HOME/build.list)
 * FGS_CUSTOM_BUILD_FILE ($FGS_DEV_HOME/build.list)
 * FGS_BUILD_HOME ($FGS_DEV_HOME/built)
 * FGS_LIB_DIR ($FGS_DEV_HOME/built/_lib)
 * FGS_MODULES_HOME ($FGS_DEV_HOME/modules)
 * FGS_CUSTOM_BUILD_FILE ($FGS_DEV_HOME/build.list)
 * FGSENV_MODULES_DIR
 * export PATH="$FGS_DEV_HOME:$PATH"
 * export LD_LIBRARY_PATH="$FGS_LIB_DIR:$LD_LIBRARY_PATH"
 * custom_build_list.sh
 * creates a custom $FGS_DEV_HOME/build.list file


 * build_base.sh
 * creates the fgs-base module


 * install_src.sh
 * Uses build.list files to determine what package and version to build
 * build.list is a list of source code packages with version number that fgs-dev will build
 * checks for FGS_CUSTOM_BUILD_FILE
 * compares FGS_CUSTOM_BUILD_FILE with FGS_STANDARD_BUILD_FILE
 * if CUSTOM_BUILD_FILE doesn't contain a version number then gets version number from STANDARD_BUILD_FILE
 * checks if package in the FGS_SRC_CACHE_DIR if not in source directory will download the source using information in fgs-dev/pkg_def//def.sh file
 * extract source archive to fgs-dev/src/


 * check_dep.sh
 * Checks that a packages dependencies are built before building a packages
 * references fgs-dev/pkg_defs//base.required (listing of dependencies)


 * list_module_dep.sh
 * get module dependicies of a specific module


 * module.sh
 * create module directory fgs-dev/modules/
 * copy fgs-dev/pkg_def//base.skeleton to module directory
 * create module by tar gzipping module directory


 * self-installer.sh
 * create self extracing installer for fgs modules


 * self-extractor_header.sh


 * specific-freebsd.sh
 * fix for freebsd make install options

fgs-dev/cache

Contains all packages needed for building fgs-dev modules. FGS-DEV will download a specific package version if it does not already exist in this directory.

fgs-dev/src

Used for extracting and compiling source code packages

fgs-dev/pkg_def

Contains the standard build.list file

Contains a directory for each fgs package

fgs-dev/pkg_def/

Instructions for building package and creating modules

Contains:
 * def.sh
 * contains information for downloading source code


 * base.required
 * list of required modules


 * fgs_build.sh
 * calls fgs-dev/bin/lib/fgsdev_env.sh to create build env
 * configures and makes package
 * minimally sets --prefix=$FGS_BUILD_HOME/
 * fgs_install.sh
 * calls fgs-dev/bin/lib/fgsdev_env.sh to create build env
 * calls fgs-dev/bin/lib/module.sh
 * creates module in fgs-dev/modules/


 * base.skeleton/
 * skeleton directory used to create the modules base strucuture


 * base.skeleton/etc/fgs/pkgs//
 * contains install.sh - a post install script used when installing the module in fgs

fgs-dev/built

All packages intalled to this directory with "make install"

fgs-dev/built/_lib

FGS_DEV's library directory (LD_LIBRARY_PATH). Each packages fgs_install.sh script copies *.so files to this directory

fgs-dev/modules

Contains all fgs-dev modules that can then by installed via the fgs installer script.

Basic usage of fgs-dev

Get fgs-dev environment $ cvs -d :pserver:cvsanon@cvs.maptools.org:/cvs/maptools/cvsroot login $ cvs -d :pserver:cvsanon@cvs.maptools.org:/cvs/maptools/cvsroot co fgs-dev $ cd fgs-dev ** set fgs-dev's environment $ . setenv.sh   ** create custom build.list $ fgsdev custom_build_list create mapserver-base - creates fgs-dev/build.list - this file can be edited (I.E. require specific versions) - to require a specific version add it to the 2nd column

-- build.list -- jpeg::: tiff::: pdflib_lite::: libpng::: freetype::: libiconv::: gd::: openssl::: netcdf::: curl::: proj::: libgeotiff::: postgresql::: unixODBC::: xerces_c::: libungif::: gdal::: expat::: apache::: libxml2::: sablotron::: php::: mapserver:::

** build all mapserver-base modules and all of it's dependencies $ fgsdev build_all

To Add a package to fgs-dev

Add the package and any dependencies not provided by fgs to fgs-dev/pkg_def/build.list


 * For every package added do:

Add directory to with the package name to fgs-dev/pkg_def

To the fgs-dev/pkg_def/ add:

def.sh

---def.sh--- PKG_NAME=' ARCHIVE_PREFIX='<packages_archive_prefix>' SRC_FILE="${ARCHIVE_PREFIX}${SRC_VERSION}.tar.gz" # change to archives postfix ARCHIVE_DOWNLOAD=$ARCHIVE_SITE/${SRC_FILE} ARCHIVE_DIR=${ARCHIVE_PREFIX}${SRC_VERSION}

base.required
 * list of required modules

fgs_build.sh ---fgs_build.sh- #!/bin/bash ####  ## fgs_build ## $Id: fgs_build,v 1.9 2006/01/17 16:26:15 gdallaire Exp $ ## Called by the build_pkg routine. Can be run manually. ## Custom version of this file should live in $FGS_HOME_DEV directory with ## this file name pattern : package_name-fgs_build ####  if [ -z "$FGS_DEV_HOME" ] ; then echo "FGS_DEV_HOME not set, please load setenv.sh first..." exit 1 fi  . $FGS_DEV_HOME/bin/lib/fgsdev_env.sh   rm -rf $FGS_BUILD_HOME/<package_name> ./configure --prefix=$FGS_BUILD_HOME/<package_name \ in_error_abort make clean in_error_abort make $FGS_MAKE_OPT all in_error_abort
 * example file to edit for package's specific needs

fgs_install.sh
 * example file to edit for package's specific needs

#!/bin/bash ####  ## fgs_install ## $Id: fgs_install,v 1.7 2005/04/19 03:29:01 gdallaire Exp $ ## Called by the build_pkg routine. Can be run manually. ## Custom version of this file should live in $FGS_HOME_DEV directory with ## this file name pattern : package_name-fgs_install ####  if [ -z "$FGS_DEV_HOME" ] ; then echo "FGS_DEV_HOME not set, please load setenv.sh first..." exit 1 fi  . $FGS_DEV_HOME/bin/lib/fgsdev_env.sh   . $FGS_DEV_HOME/bin/lib/module.sh   ## Installs all in $FGS_BUILD_HOME make install ####  ## MODULE_NAME : <module_name> ####  create_module_home <module_name> base # or lib if creating a library # copy all needed files from FGS_BUILD_HOME/<package_name> to   # FGS_MODULE_HOME/<module_name> create_module

Once the new package and all it's required dependencies are added to fgs-dev you can now use the normal fgsdev commands to build the new module(s)