Difference between revisions of "FGSDevNotes"
Wiki-Sbarnes (talk | contribs) |
|||
Line 10: | Line 10: | ||
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. | 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/ | ||
+ | | |--<package_name>/--| | ||
+ | | |--base.skeleton/ | ||
+ | |--built/--| | ||
+ | | |--_lib/ | ||
+ | | |--<package_name>/ | ||
+ | | | ||
+ | |--modules/--| | ||
+ | |--base/ | ||
+ | |--<module_name>/ | ||
+ | |||
+ | |||
+ | '''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 <package_name> | ||
+ | |||
+ | **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/<package_name>/fgs_build.sh | ||
+ | ****fgs-dev/src/<package_name>/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/<package_name>/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/<package_name>/base.required (listing of dependencies) | ||
+ | |||
+ | **list_module_dep.sh | ||
+ | ***get module dependicies of a specific module | ||
+ | |||
+ | **module.sh | ||
+ | ***create module directory fgs-dev/modules/<module_name> | ||
+ | ***copy fgs-dev/pkg_def/<package_name>/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/<package_name>''' | ||
+ | |||
+ | 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/<package_name> | ||
+ | |||
+ | **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/<module_name> | ||
+ | |||
+ | **base.skeleton/ | ||
+ | ***skeleton directory used to create the modules base strucuture | ||
+ | |||
+ | **base.skeleton/etc/fgs/pkgs/<module_name>/ | ||
+ | ***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/<package_name> add: | ||
+ | |||
+ | ''def.sh'' | ||
+ | |||
+ | -------------------def.sh----------- | ||
+ | PKG_NAME='<package_name' | ||
+ | ARCHIVE_SITE=http://<package_archive_url> | ||
+ | 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'' | ||
+ | ** example file to edit for package's specific needs | ||
+ | -----------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 | ||
+ | |||
+ | ''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) |
Latest revision as of 06:54, 9 July 2007
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/ | |--<package_name>/--| | |--base.skeleton/ |--built/--| | |--_lib/ | |--<package_name>/ | |--modules/--| |--base/ |--<module_name>/
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)
- sets up the fgs-dev env vars
- Setenv.sh
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 <package_name>
- wrapper for fgsdev commands
- fgsdev
- fgs_build_all.sh
- builds all packages listed in fgs-dev/build.list by calling fgs_build_pkg.sh for each entry
- fgs_build_all.sh
- fgs_build_pkg.sh
- build a single package by calling:
- fgs-dev/src/<package_name>/fgs_build.sh
- fgs-dev/src/<package_name>/fgs_install.sh
- build a single package by calling:
- fgs_build_pkg.sh
- fgs_installer.sh
- script to install fgs
- fgs_installer.sh
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"
- sets FGS-DEV env vars to configure and compile src packages
- fgsdev_env.sh -
- custom_build_list.sh
- creates a custom $FGS_DEV_HOME/build.list file
- custom_build_list.sh
- build_base.sh
- creates the fgs-base module
- build_base.sh
- 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/<package_name>/def.sh file
- extract source archive to fgs-dev/src/
- Uses build.list files to determine what package and version to build
- install_src.sh
- check_dep.sh
- Checks that a packages dependencies are built before building a packages
- references fgs-dev/pkg_defs/<package_name>/base.required (listing of dependencies)
- check_dep.sh
- list_module_dep.sh
- get module dependicies of a specific module
- list_module_dep.sh
- module.sh
- create module directory fgs-dev/modules/<module_name>
- copy fgs-dev/pkg_def/<package_name>/base.skeleton to module directory
- create module by tar gzipping module directory
- module.sh
- self-installer.sh
- create self extracing installer for fgs modules
- self-installer.sh
- self-extractor_header.sh
- specific-freebsd.sh
- fix for freebsd make install options
- specific-freebsd.sh
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/<package_name>
Instructions for building package and creating modules
Contains:
- def.sh
- contains information for downloading source code
- def.sh
- base.required
- list of required modules
- base.required
- 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/<package_name>
- fgs_build.sh
- 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/<module_name>
- fgs_install.sh
- base.skeleton/
- skeleton directory used to create the modules base strucuture
- base.skeleton/
- base.skeleton/etc/fgs/pkgs/<module_name>/
- contains install.sh - a post install script used when installing the module in fgs
- base.skeleton/etc/fgs/pkgs/<module_name>/
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/<package_name> add:
def.sh
-------------------def.sh----------- PKG_NAME='<package_name' ARCHIVE_SITE=http://<package_archive_url> 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
- example file to edit for package's specific needs
-----------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
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)