Difference between revisions of "GNUstep and HPMS HowTO"

From GNUstepWiki
Jump to navigation Jump to search
Line 174: Line 174:
  
 
== Examples ==
 
== Examples ==
 +
Following are quick examples for GNUsteppers. It is not an HellowWorld type of example.
 +
 
=== Software Build: gnustep-core-1.0.sb in a XML file ===
 
=== Software Build: gnustep-core-1.0.sb in a XML file ===
 
* This sb file can reproduce the build process with following command
 
* This sb file can reproduce the build process with following command

Revision as of 04:47, 20 February 2005

Documentation

Abstract

This article will explain using HPMS to package GNUstep for deploying GNUstep on different OS platform easily. Also we explore the possiblity of intergrating HPMS funcation into GNUstep to add HPMS into GNUstep.

Overview

Have you ever take a look of current computing environments on Earth from outerspace ? Seeing so many Operating Systems got created in the name of inovation(it is true in most cases). End users end up with lots of incompatible operating systems,programming languages and applications to deal with. Each OS vendor/supporter will make their OS as different as possible and label it as features. In some cases, they will spend exra efforts to make sure other OS users can't use their features. All of these actions create high maintence cost. We need a solution to deal with these diversions to avoid the chaos.

The Java environment is a good example aim to do same "things" across different incompatible paltforms. GNUstep is another example aim to provide unified and consistent programming environment for applicaiton developers.

A solution to deal with application management across different OS is needed. Given GNUstep's cross-platform declaration on application development activities, so should the application mangement activies cross-platform united.

In this project we like to use GNUstep application as an example to demostrate the benifits of using CPAM. There are currently different package sources to create GNUstep package for different OS paltforms. We will demostrate using one package source to create native package for different OS. and also using same tool to maintain GNUstep package.

Project Overview slides

TBA.

What are PMS, HPMS, CPAD and CPAM ?

In order to better describe the cross-platform package management activities, following terms are defined for easy reference.

  • PMS: Package Management system is a group of software tools design to create and maintain software in a package format. Example of software tools are rpm,pkgadd,dpkg,ipkg,inst and lpp in AIX.
  • CPAM: Cross-platform Application Management, is the activities to manage application on different OS platforms. The goal is to use better software solution to minimize the administration cost.
  • CPAD: Cross-platform Application Developement is the activities on devloping a software that can run on different OS platforms to maxmize the software deployment.
  • HPMS: Hyper Package Management System is a software tool for CPAM. It will respect and work with the local PMS to create and manage software package. When a package need to be created, the HPMS will call
  • Brief introduction of a few PMS.
    • RPM
    • Solaris pkgadd
    • HP-UX SD-UX
    • GNUstep .app (What is the name of GNUstep PMS ?)
    • MacOS X
    • Debian dpkg
    • ipkg for Embeded Linux system.
  • Comparison of PMS
  • Comparison of HPMS
Architecture of a HPMS

TBA.

Why doing it

  • A software compiling process is very complex and need to be exact on what other software you need to compile with and how you configure the compilation flags to the compiler. This complex process can actually be digitalize into a script and be repeatable by easy commands without waiting for the guru give you a hint.
  • Lots of time is spent by experienced GNUsteppers to assist new GNUsteppers with compiling the source, and this waste will continue to occur unless we resolve certain issues.
  • Time can be better spent on GNUstep developement, and not on the compling and packaging process.
  • Easy installation and removal of GNUstep encourges the deployment of GNUstep in corporate environments.
  • The softare adn pacakge creation processes can be reproduced easliy by others with simple commands.
  • Improves QA testing by generating GNUstep bug fixed instances quickly.

How

When

TBA.

Who

Technology Provider: TWW Inc. http://www.thewrittenword.com

This project is using CPAM tools created by TWW Inc.The commpany created TWW tool sets to help cross-platform open-source package creation and deployment. Currently GNUstep is not avaible in the list of their supported packages. The good thing is that we have a chance to invite steppers create the package sources together. All source of their supported packages are avaiable at ftp://support.thewrittenword.com. Those package sources need to be compiled with vendor compiler. gcc compiler is used only on RedHat plaform.

Motorola Inc. http://www.motorola.com

They have a simliar CPAM homegrown solution to deal with supporting open-source across OS platform. That tool was dropped in favor of TWW's GPL opensourced tool sets. Currently TWW HPMS tool is used in certain parts of the company.

Team member

  • T.J. Yang: tj_yang at hotmail dot com.
 I have been working as a system administator and I am interested 
 to bring the CPAM experience to work on this project. I promised myslef to digitalize the 
 compiling process when "Adam Fedor" kindly answered my emails regarding to the compiling issues
 I econcuntered. 
 Please email me if you have comment/questions. 
 For detail about TWW, please see http://www.thewrittenword.com.
 I have used CPAM tool at work to bring cross-platform open-source software support 
 nightmare under control. TWW CPAM tool is battle field tested ;)
  • Put your name and contact information here if you are serious about this project.

Plan

  • Introduce CPAM(Cross-Platform Application Management) tool implemented by TWW Inc. to GNUstep CPAD community
    • Cross-Platform is easier said then done becuase each platform's features are barriers for others.
  • Release GNUstep package source implemented by TWW CPAM.
    • I will release a working package source for others to try and review.
    • The package soruces can generate native package format for RHAS rpm,Solaris pkgadd and HP-UX depot formats.
  • Write tutorial on learning TWW CPAM.
    • I am willing to help/assist a few persons to get familliar with TWW tools if they promise to write up what they learned in a tutorial article. As you can see I am really not good on documenation work.

Integrate GNUstep developement process with TWW CPAM

Current TWW HPMS supported Systems

Porting TWW HPMS to other OS

Linksys NSLU2

Mac OS X

Microsoft Windows

FreeBSD

Package Management Processes

Software engineering process include desgin and implement software via software developers to generate source codes. The source codes will then need to be built,packaged and be managed. We can divide software packagement into three general steps.

  • Software build process(SB) and SB can be devided into following processes on a build machine
    • source unpack
    • source patch
    • source configure
    • source build to generate binary and documentation
    • binary test
    • binary install
    • binary uninstall
  • Package build (PB) process is much straight forward
    • prepare the configuration script
    • prepare init script to start/stop application service
    • call up local PMS to pack the binary,documentation and scripts into local PMS format.
  • Package Management (PKGUTIL) Process
    • upload and administrate packages on package depot server.
    • install
    • remove
    • upgrade
    • auto installation upon package dependence.

TWW HPMS introduction

TWW Inc. has three tools to match the package management processes.

  • Softeware build
    • sbutils
[root] ls -l /opt/TWWfsw/sbutils12/bin/
total 164
-rwxr-xr-x   1 root     root       38551 Dec  1 15:17 gen-sb-db
-rwxr-xr-x   1 root     root       44418 Dec  1 15:17 sb
[root]
  • Package build
    • pbutils
[root] ls -l /opt/TWWfsw/pbutils11/bin/
total 186
-rwxr-xr-x   1 root     root       29975 Apr 30  2004 gen-pb-db
-rwxr-xr-x   1 root     root       29169 Apr 30  2004 gen-pkg-db
-rwxr-xr-x   1 root     root       34023 Apr 30  2004 pb
[root]

  • Package Management
    • pkgutils
[root] ls -l /opt/TWWfsw/pkgutils15/bin/
total 542
-rwxr-xr-x   1 root     root       32434 Jan 25  2004 chk-pkg-updates
-rwxr-xr-x   1 root     root       18751 Jan 25  2004 pkg-config
-rwxr-xr-x   1 root     root       48281 Jan 25  2004 pkg-info
-rwxr-xr-x   1 root     root       70570 Jan 25  2004 pkg-inst
-rwxr-xr-x   1 root     other      68887 May 18  2003 pkg-inst~
-rwxr-xr-x   1 root     root       35692 Jan 25  2004 pkg-rm
[root]
  • How to get TWW tools ?

Notes about TWW Inc.

 All the TWW tools and sources of their supported packages are GPL open-source compliant. 
 They are freely avaiable at their ftp site ftp://support.thewrittenword.com. 
 But theired support labor and binary packages require purchases. We are glad TWW Inc. find a way
 to do open-source works and still can make a living out of it. Please support TWW Inc. if your workplace 
 need such kind of service. T.J. Yang is just one of happy customer of TWW Inc.

Examples

Following are quick examples for GNUsteppers. It is not an HellowWorld type of example.

Software Build: gnustep-core-1.0.sb in a XML file

  • This sb file can reproduce the build process with following command
sb gnustep-core-1.10.sb;sb -i gnustep-core-1.10.sb
  • Following command will list out the software modules in a GNUstep core
[root] sb -q module-names gnustep-core-1.10.sb
gnustep-base
ffcall
gnustep-examples
gnustep-gui
gworkspace
gnustep-make
gnustep-back
[root]
  • gnustep-core-1.10.sb

Note: HPUX portion of instruction is most like not correct.

[root] cat gnustep-core-1.10.sb
<?xml version="1.0"?>
<programs>
  <program name="gnustep-core" version="1.10.0" revision="1">

    <module name="gnustep-make">
      <build-name>gnustep-make-1.10.0</build-name>
      <install-name>GNUstep</install-name>
      <sources>
      <source  path="src/core/gnustep-make-1.10.0.tar.gz" />
      </sources>
      <dependencies>
        <depend var="GCC332R">gcc332r</depend>
      </dependencies>

      <configure>
<![CDATA[
case "${SB_SYSTYPE}" in
*-hpux11.11)
  ;;
*-hpux10.20)
CFLAGS="-O2"
CC_LD_RT="-R"
GCCR_LIB=/opt/TWWfsw/gcc332r/lib
./configure  CC="${CC:-gcc}" CFLAGS="${CFLAGS:--O2}" \
LDFLAGS="${CC_LD_RT}${GCCR_LIB}" \
--prefix=${INSTALL_PREFIX}
  ;;
*-linux*)
CFLAGS="-O2"
CC_LD_RT="-R"
GCCR_LIB=/opt/TWWfsw/gcc332r/lib
CC=/opt/TWWfsw/gcc332/bin/gcc
./configure  CC="${CC:-gcc}" CFLAGS="${CFLAGS:--O2}" \
LDFLAGS="${CC_LD_RT}${GCCR_LIB}" \
--prefix=${INSTALL_PREFIX}

 ;;
*-solaris2.[689])
set -x
CFLAGS="-O2 -mcpu=v8"
CC_LD_RT="-R"
CC=/opt/TWWfsw/bin/gcc
GCCR_LIB=/opt/TWWfsw/gcc332r/lib
./configure  CC="${CC:-gcc}" CFLAGS="${CFLAGS:--O2}" \
LDFLAGS="${CC_LD_RT}${GCCR_LIB}" \
--prefix=${INSTALL_PREFIX}
;;
esac
]]>
</configure>
<build>
![CDATA[
ase "${SB_SYSTYPE}" in
-hpux11.11)
 ;;
-hpux10.20)
make clean
make
 ;;
-linux*)
;;
-solaris2.[689])
make clean
make
;
sac
]>
</build>

<install>
![CDATA[
make install
 make sure GNUstep.sh script can be accessd via /opt/TWWfsw/bin
kdir -p ${INSTALL_PREFIX}/bin
n -s ${INSTALL_PREFIX}/System/Makefiles/GNUstep.sh \
{INSTALL_PREFIX}/bin/GNUstep.sh
]>
</install>

      <uninstall>

<![CDATA[
case "${SB_SYSTYPE}" in
*-hpux11.11)
  ;;
*-hpux10.20)
  ;;
*-linux*)
  ;;
*-solaris2.[689])

;;
esac
]]>
      </uninstall>
    </module>

    <module name="ffcall">
      <build-name>ffcall-1.9</build-name>
      <install-name>ffcall19</install-name>
      <sources>
      <source  path="src/core/ffcall-1.9.tar.gz"  />
      </sources>
      <dependencies>
        <depend var="GCC332R">gcc332r</depend>
      </dependencies>

      <script-header>
      </script-header>

      <configure>
<![CDATA[

case "${SB_SYSTYPE}" in
*-hpux11.11)
  ;;
*-hpux10.20)
CFLAGS="-O2 -march=1.1"
CC_LD_RT="-R"
GCC332R_LIB=/opt/TWWfsw/gcc332r
SSL_LIB=/opt/TWWfsw/libopenssl097/lib/
XML_LIB=/opt/TWWfsw/libxml242/lib
XML=/opt/TWWfsw/libxml242
ICONV=/opt/TWWfsw/libiconv16
CC=gcc
./configure CC="${CC:-gcc}" CFLAGS="${CFLAGS:--O2}" \
LDFLAGS="${CC_LD_RT}${XML_LIB}:${GCC332R_LIB}:${LDFLAGS+${LDFLAGS}}"  \
--prefix=${INSTALL_PREFIX} \
--enable-shared
  ;;
*-linux*)
CFLAGS="-O2"
GCC332R_LIB=/opt/TWWfsw/gcc332r
SSL_LIB=/opt/TWWfsw/libopenssl097/lib/
XML_LIB=/opt/TWWfsw/libxml242/lib
XML=/opt/TWWfsw/libxml242
INSTALL_PREFIX=/opt/TWWfsw/ffcall19
./configure --prefix=${INSTALL_PREFIX} --enable-shared
 ;;
*-solaris2.[689])
CFLAGS="-O2 -mcpu=v8"
CC_LD_RT="-R"
GCC332R_LIB=/opt/TWWfsw/gcc332r
SSL_LIB=/opt/TWWfsw/libopenssl097/lib/
XML_LIB=/opt/TWWfsw/libxml242/lib
XML=/opt/TWWfsw/libxml242
INSTALL_PREFIX=/opt/TWWfsw/ffcall19
CC=gcc
./configure CC="${CC:-gcc}" CFLAGS="${CFLAGS:--O2}" \
LDFLAGS="${CC_LD_RT}${XML_LIB}:${GCC332R_LIB}:${LDFLAGS+${LDFLAGS}}"  \
--prefix=${INSTALL_PREFIX} \
--enable-shared

  ;;
esac
]]>
      </configure>
      <build>
<![CDATA[
case "${SB_SYSTYPE}" in
*-hpux11.11)
  ;;
*-hpux10.20)
gmake clean
gmake

  ;;
*-linux*)
 ;;
*-solaris2.[689])
esac
]]>
      </build>
      <install>
<![CDATA[
gmake install
]]>
      </install>

      <uninstall>
<![CDATA[
case "${SB_SYSTYPE}" in
*-hpux11.11)
  ;;
*-hpux10.20)
  ;;
*-linux*)
  ;;
*-solaris2.[689])
;;
esac
]]>
      </uninstall>
    </module>

    <module name="gnustep-base">
      <build-name>gnustep-base-1.10.1</build-name>
      <install-name>GNUstep</install-name>
      <sources>
      <source  path="src/core/gnustep-base-1.10.1.tar.gz"  />
      </sources>
      <dependencies>
        <depend var="GCC332R">gcc332r</depend>
        <depend var="LIBXML">libxml242</depend>
        <depend var="LIBOPENSSL">libopenssl097</depend>
        <depend var="LIBEXPAT">libexpat</depend>
        <depend var="FFCALL">ffcall19</depend>
      </dependencies>

      <script-header>
      </script-header>

      <configure>
<![CDATA[

case "${SB_SYSTYPE}" in
*-hpux11.11)
  ;;
*-hpux10.20)
CFLAGS="-O2 -march=1.1"
CC_LD_RT="-Wl,+b -Wl,"
GCC332R_LIB=/opt/TWWfsw/gcc332r
SSL_LIB=/opt/TWWfsw/libopenssl097/lib/
XML_LIB=/opt/TWWfsw/libxml242/lib
XML=/opt/TWWfsw/libxml242
ICONV=/opt/TWWfsw/libiconv16
CC=gcc
  ;;
*-linux*)
#LDFLAGS="${CC_LD_RT}${GCCR_LIB}"
CFLAGS="-O2"
CC_LD_RT="-Wl,-rpath,"
GCCR_LIB=/opt/TWWfsw/gcc332r/lib
CC=/opt/TWWfsw/gcc332/bin/gcc
. ${INSTALL_PREFIX}/System/Library/Makefiles/GNUstep.sh
export  LD_LIBRARY_PATH=/opt/TWWfsw/ffcall19:/opt/TWWfsw/libopenssl097/lib:/opt/TWWfsw/gcc332r/lib:$LD_LIBRARY_PATH
./configure  CC="${CC:-gcc}" CFLAGS="${CFLAGS:--O2}" \
--prefix=${INSTALL_PREFIX} \
--with-include-flags=-I/opt/TWWfsw/libtiff35/include \
--with-library-flags=-L/opt/TWWfsw/libtiff35/lib \
--with-ffi-include=/opt/TWWfsw/ffcall19/inlcude \
--with-ffi-library=/opt/TWWfsw/ffcall19/lib \
--with-libiconv-library="${ICONV}" \
--with-xml-prefix="${XML}" \
--with-openssl-include=/opt/TWWfsw/libopenssl097/include \
--with-openssl-library=/opt/TWWfsw/libopenssl097/lib \
--disable-xmltest


 ;;
*-solaris2.[689])
CFLAGS="-O2 -mcpu=v8"
CC_LD_RT="-R"
GCC332R_LIB=/opt/TWWfsw/gcc332r
SSL_LIB=/opt/TWWfsw/libopenssl097/lib/
XML_LIB=/opt/TWWfsw/libxml242/lib
XML=/opt/TWWfsw/libxml242
ICONV=/opt/TWWfsw/libiconv16
CC=/opt/TWWfsw/bin/gcc
. ${INSTALL_PREFIX}/System/Library/Makefiles/GNUstep.sh
export  LD_LIBRARY_PATH=/opt/TWWfsw/ffcall19:/opt/TWWfsw/libopenssl097/lib:/opt/TWWfsw/gcc332r/lib:$LD_LIBRARY_PATH
./configure CC="${CC:-gcc}" CFLAGS="${CFLAGS:--O2}" LDFLAGS="${CC_LD_RT}${XML_LIB}:${GCC332R_LIB}:${LDFLAGS+${LDFLAGS}}"  \
--prefix=${INSTALL_PREFIX} \
--with-include-flags=-I/opt/TWWfsw/libtiff35/include \
--with-library-flags=-L/opt/TWWfsw/libtiff35/lib \
--with-ffi-include=/opt/TWWfsw/ffcall19/inlcude \
--with-ffi-library=/opt/TWWfsw/ffcall19/lib \
--with-libiconv-library="${ICONV}" \
--with-xml-prefix="${XML}" \
--with-openssl-include=/opt/TWWfsw/libopenssl097/include \
--with-openssl-library=/opt/TWWfsw/libopenssl097/lib \
--disable-xmltest

  ;;
esac
]]>

      </configure>
      <build>
<![CDATA[
case "${SB_SYSTYPE}" in
*-hpux11.11)
  ;;
*-hpux10.20)
  ;;
*-linux*)
. ${INSTALL_PREFIX}/System/Library/Makefiles/GNUstep.sh
export  LD_LIBRARY_PATH=/opt/TWWfsw/gcc332r/lib:$LD_LIBRARY_PATH
gmake clean
# Turn verbose support in GNUstep's makefile system.
#gmake messages=yes
gmake
 ;;
*-solaris2.[689])
. ${INSTALL_PREFIX}/System/Library/Makefiles/GNUstep.sh
export  LD_LIBRARY_PATH=/opt/TWWfsw/gcc332r/lib:$LD_LIBRARY_PATH
gmake clean
gmake
;;
esac
]]>
      </build>

      <install>
<![CDATA[
. ${INSTALL_PREFIX}/System/Library/Makefiles/GNUstep.sh
export  LD_LIBRARY_PATH=/opt/TWWfsw/gcc332r/lib:$LD_LIBRARY_PATH
gmake install
]]>
      </install>

      <uninstall>
<![CDATA[
case "${SB_SYSTYPE}" in
*-hpux11.11)
  ;;
*-hpux10.20)
  ;;
*-linux*)
  ;;
*-solaris2.[689])
;;
esac
]]>
      </uninstall>
    </module>

    <module name="gnustep-gui">
      <build-name>gnustep-gui-0.9.4</build-name>
      <install-name>GNUstep</install-name>
      <sources>
      <source  path="src/core/gnustep-gui-0.9.4.tar.gz" systype="*-solaris*" />
      </sources>
      <dependencies>
        <depend var="JPEG">jpeg</depend>
        <depend var="UNGIF">libungif</depend>
        <depend var="CUPS">cups1120</depend>
        <depend var="TIFF">tiff</depend>
        <depend var="PNG">libpng12</depend>
        <depend var="ASPELL">aspell05</depend>
      </dependencies>

      <configure>
<![CDATA[

case "${SB_SYSTYPE}" in
*-hpux11.11)
  ;;
*-hpux10.20)
  ;;
*-linux*)
 ;;
*-solaris2.[689])
CFLAGS="-O2 -mcpu=v8"
CC_LD_RT="-R"
JPEG_LIB=/opt/TWWfsw/jpeg/lib
UNGIF_LIB=/opt/TWWfsw/libungif/lib
CUPSR_LIB=/opt/TWWfsw/cups1120/lib
TIFF_LIB=/opt/TWWfsw/tiff/lib
PNG_LIB=/opt/TWWfsw/libpng12/lib
. ${INSTALL_PREFIX}/System/Library/Makefiles/GNUstep.sh
export  LD_LIBRARY_PATH=/opt/TWWfsw/gcc332r/lib:$LD_LIBRARY_PATH:/opt/TWWfsw/libpng12/lib:/opt/TWWfsw/cups1120/lib

export PATH=/opt/TWWfsw/cups1120/bin:${PATH}
set -x
./configure CC="${CC:-gcc}" CFLAGS="${CFLAGS:--O2}" \
LDFLAGS="${CC_LD_RT}${JPEG_LIB}:${UNGIF_LIB}:/opt/TWWfsw/aspell05/lib:\
${CUPSR_LIB}:${TIFF_LIB}:\
${PNG_LIB}:${LDFLAGS+${LDFLAGS}}"  \
--prefix=${INSTALL_PREFIX} \
--with-jpeg-include="/opt/TWWfsw/libpng12/include \
-I/opt/TWWfsw/libungif/include \
-I/opt/TWWfsw/tiff/include \
-I/opt/TWWfsw/cups1120/include \
-I/opt/TWWfsw/jpeg/include  \
-I/opt/TWWfsw/libopenssl097/include" \
--with-jpeg-library="/opt/TWWfsw/libpng12/lib \
-L/opt/TWWfsw/libungif/lib \
-L/opt/TWWfsw/jpeg/lib \
-L/opt/TWWfsw/cups1120/lib \
-L/opt/TWWfsw/tiff/lib \
-L/opt/TWWfsw/libopenssl097/lib" \
--disable-gsnd
;;
esac
]]>
      </configure>
      <build>
     <![CDATA[
     case "${SB_SYSTYPE}" in
     *-hpux11.11)
       ;;
     *-hpux10.20)
       ;;
     *-linux*)
      ;;
     *-solaris2.[689])
     . ${INSTALL_PREFIX}/System/Library/Makefiles/GNUstep.sh
export  LD_LIBRARY_PATH=/opt/TWWfsw/gcc332r/lib:$LD_LIBRARY_PATH:/opt/TWWfsw/libpng12/lib:/opt/TWWfsw/cups1120/lib:/opt/TWWfsw/libpng12/lib
     gmake
     ;;
     esac
     ]]>
      </build>

      <install>
     <![CDATA[
     . ${INSTALL_PREFIX}/System/Library/Makefiles/GNUstep.sh
     gmake install
     ]]>
      </install>

      <uninstall>

<![CDATA[
case "${SB_SYSTYPE}" in
*-hpux11.11)
  ;;
*-hpux10.20)
  ;;
*-linux*)
  ;;
*-solaris2.[689])

;;
esac
]]>
      </uninstall>
    </module>


    <module name="gnustep-back">
      <build-name>gnustep-back-0.9.4</build-name>
      <install-name>GNUstep</install-name>
      <sources>
      <source  path="src/core/gnustep-back-0.9.4.tar.gz" systype="*-solaris*" />
      </sources>
      <dependencies>
      </dependencies>

      <configure>
<![CDATA[
case "${SB_SYSTYPE}" in
*-hpux11.11)
  ;;
*-hpux10.20)
  ;;
*-linux*)
 ;;
*-solaris2.[689])
. ${INSTALL_PREFIX}/System/Library/Makefiles/GNUstep.sh
export  LD_LIBRARY_PATH=/opt/TWWfsw/gcc332r/lib:$LD_LIBRARY_PATH:/opt/TWWfsw/libpng12/lib:/opt/TWWfsw/cups1120/lib
set -x
echo $LD_LIBRARY_PATH
./configure  CC="${CC:-gcc}" CFLAGS="${CFLAGS:--O2}" \
--prefix=${INSTALL_PREFIX} \
--disable-glx \
--disable-xim \
--disable-glitz \
--enable-server=x11 \
--enable-graphics=xlib \
--with-x
;;
esac
]]>
      </configure>
      <build>
     <![CDATA[
     case "${SB_SYSTYPE}" in
     *-hpux11.11)
       ;;
     *-hpux10.20)
       ;;
     *-linux*)
      ;;
     *-solaris2.[689])
     . ${INSTALL_PREFIX}/System/Library/Makefiles/GNUstep.sh
export  LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/opt/TWWfsw/libungif/lib:\
/opt/TWWfsw/jpeg/lib:/opt/TWWfsw/cups1120/lib:/opt/TWWfsw/tiff/lib:\
/opt/TWWfsw/libpng12/lib
     gmake
     ;;
     esac
     ]]>
      </build>

      <install>
     <![CDATA[
     . ${INSTALL_PREFIX}/System/Library/Makefiles/GNUstep.sh
     gmake install
     ]]>
      </install>

      <uninstall>
<![CDATA[
case "${SB_SYSTYPE}" in
*-hpux11.11)
  ;;
*-hpux10.20)
  ;;
*-linux*)
  ;;
*-solaris2.[689])
;;
esac
]]>
      </uninstall>
    </module>


    <module name="gworkspace">
      <build-name>GWorkspace-0.6.5</build-name>
      <install-name>GNUstep</install-name>
      <sources>
      <source  path="src/core/gworkspace-0.6.5.tar.gz" />
      </sources>
      <dependencies>
      </dependencies>

      <configure>
<![CDATA[

case "${SB_SYSTYPE}" in
*-hpux11.11)
  ;;
*-hpux10.20)
  ;;
*-linux*)

 ;;
*-solaris2.[689])
. ${INSTALL_PREFIX}/System/Library/Makefiles/GNUstep.sh
export  LD_LIBRARY_PATH=/opt/TWWfsw/gcc332r/lib:$LD_LIBRARY_PATH:/opt/TWWfsw/libpng12/lib:/opt/TWWfsw/cups1120/lib
set -x
echo $LD_LIBRARY_PATH
./configure  CC="${CC:-gcc}" CFLAGS="${CFLAGS:--O2}" \
--prefix=${INSTALL_PREFIX} \
;;
esac
]]>
      </configure>
      <build>
     <![CDATA[
     case "${SB_SYSTYPE}" in
     *-hpux11.11)
       ;;
     *-hpux10.20)
       ;;
     *-linux*)
      ;;
     *-solaris2.[689])
     . ${INSTALL_PREFIX}/System/Library/Makefiles/GNUstep.sh
export  LD_LIBRARY_PATH=/opt/TWWfsw/gcc332r/lib:$LD_LIBRARY_PATH:/opt/TWWfsw/libpng12/lib:/opt/TWWfsw/cups1120/lib
cd FSNode;gmake install
export  LD_LIBRARY_PATH=/opt/TWWfsw/gcc332r/lib:$LD_LIBRARY_PATH:/opt/TWWfsw/libpng12/lib:/opt/TWWfsw/cups1120/lib
cd ..; gmake
     ;;
     esac
     ]]>
      </build>

      <install>
     <![CDATA[
     . ${INSTALL_PREFIX}/System/Library/Makefiles/GNUstep.sh
     gmake install
     ]]>
      </install>

      <uninstall>

<![CDATA[
case "${SB_SYSTYPE}" in
*-hpux11.11)
  ;;
*-hpux10.20)
  ;;
*-linux*)
  ;;
*-solaris2.[689])

;;
esac
]]>
      </uninstall>
    </module>

    <module name="gnustep-examples">
      <build-name>gnustep-examples-1.0.0</build-name>
      <install-name>GNUstep</install-name>
      <sources>
      <source  path="src/core/gnustep-examples-1.0.0.tar.gz" />
      </sources>
      <dependencies>
      </dependencies>

      <configure>
<![CDATA[

case "${SB_SYSTYPE}" in
*-hpux11.11)
  ;;
*-hpux10.20)
  ;;
*-linux*)

 ;;
*-solaris2.[689])
:
;;
esac
]]>
      </configure>
      <build>
     <![CDATA[
     case "${SB_SYSTYPE}" in
     *-hpux11.11)
       ;;
     *-hpux10.20)
       ;;
     *-linux*)
      ;;
     *-solaris2.[689])
     . ${INSTALL_PREFIX}/System/Library/Makefiles/GNUstep.sh
export  LD_LIBRARY_PATH=/opt/TWWfsw/gcc332r/lib:$LD_LIBRARY_PATH:/opt/TWWfsw/libpng12/lib:/opt/TWWfsw/cups1120/lib
cd FSNode;gmake install
export  LD_LIBRARY_PATH=/opt/TWWfsw/gcc332r/lib:$LD_LIBRARY_PATH:/opt/TWWfsw/libpng12/lib:/opt/TWWfsw/cups1120/lib
cd ..; gmake
     ;;
     esac
     ]]>
      </build>

      <install>
     <![CDATA[
     . ${INSTALL_PREFIX}/System/Library/Makefiles/GNUstep.sh
     gmake install
     ]]>
      </install>

      <uninstall>

<![CDATA[
case "${SB_SYSTYPE}" in
*-hpux11.11)
  ;;
*-hpux10.20)
  ;;
*-linux*)
  ;;
*-solaris2.[689])

;;
esac
]]>
      </uninstall>
    </module>


    <notes>
      <note type="installation">
        <para>
Gnustep core packges
</para>

       </note>
    </notes>

    <changelog>
    </changelog>
  </program>
</programs>
[root]

Package build: gnustep-core-1.0.pb in a XML file

This pb file can reproduce the package build process with following command to generate a native package for a local PMS.

pb -1 gnustep-core-1.10.pb

Note: HPUX portion of instruction is most like not correct.

[root] cat  gnustep-core-1.10.pb
<?xml version="1.0"?>
<packages>
  <package name="gnustep-core" version="1.10" revision="1">
    <package-manager name="depot">
      <title>GNUstep</title>
      <vendor>GNU Free Software Foundation.</vendor>
      <description >
GNUstep is a cross-platform, object-oriented framework for desktop application development.
      </description>
      <install-name>GNUstep</install-name>

      <pkgname-base>TWccase</pkgname-base>

      <version>1.10</version>
      <revision>1</revision>

      <subpkg type="conf">
      </subpkg>
      <subpkg type="runtime">
      </subpkg>
    </package-manager>

    <package-manager name="pkgadd">
      <category>System Environment/Daemons</category>
      <title>GNUstep</title>
      <vendor>GNU Free Software Foundation.</vendor>
      <description >
GNUstep is a cross-platform, object-oriented framework for desktop application development.
      </description>

      <install-name>GNUstep</install-name>
      <pkgname-base>GNUstp1a</pkgname-base>
      <version>1.10</version>
      <revision>1</revision>


      <subpkg type="runtime">
<!--
        <postinstall path="pkg/postinstall-sol"/>
        <preremove   path="pkg/preremove-sol"/>
        <preinstall  path="pkg/preinstall-sol"/>
        <postremove  path="pkg/postremove-sol"/>
-->
      </subpkg>


      <changelog>
        <change date="2004 Sept 28" revision="1"
        author="T.J. Yang" email="tj_yang@hotmail.com">
          <item><para> GNUstep core  1.10 for Solaris </para></item>
        </change>
      </changelog>
    </package-manager>

    <package-manager name="rpm4">
      <category>System Environment/Daemons</category>
      <title>ClearCase 1.10</title>
      <vendor>GNU Free Software Foundation.</vendor>

      <description >
GNUstep is a cross-platform, object-oriented framework for desktop application development.
      </description>

      <install-name>GNUstep</install-name>

      <pkgname-base>TWgnustep</pkgname-base>

      <version>1.10</version>
      <revision>1</revision>

      <subpkg type="conf">
      </subpkg>
      <subpkg type="runtime">
        <postinstall path="pkg/postinstall-linux"/>
        <preremove   path="pkg/preremove-linux"/>
<!--
        <preinstall  path="pkg/preinstall-sol"/>
        <postremove  path="pkg/postremove-sol"/>
-->
      </subpkg>


<!--
      <files>
      <file>/var/adm/atria</file>
      <file>/etc/rc.d/init.d/gnustep</file>
      </files>
-->
    </package-manager>
  </package>
</packages>
[root]

Makefile entry to automate the sb,pb and package upload to package depot

#############################################################################
gnustep-core-1.10:  \
 /opt/TWWfsw/gnustep-core-1.10  /opt/dist/cd/GNUstp1au gnustep-core-1.10-gen-pkg-inst gnustep-core-1.10-upload

#############################################################################
/opt/TWWfsw/gnustep-core-1.10: /opt/TWWfsw/ffcall19 \
/opt/TWWfsw/GNUstep/System/Library/Makefiles \
/opt/TWWfsw/GNUstep/System/Library/Libraries/Resources/gnustep-base/Languages \
/opt/TWWfsw/GNUstep/System/Library/KeyBindings \
/opt/TWWfsw/GNUstep/System/Library/Documentation/man

/opt/TWWfsw/ffcall19:
        ${SB} -m ffcall ${SRCDIR}/gnustep-core-1.10/gnustep-core-1.10.sb
        ${SB} -m ffcall -i ${SRCDIR}/gnustep-core-1.10/gnustep-core-1.10.sb
/opt/TWWfsw/GNUstep/System/Library/Makefiles:
        ${SB} -m gnustep-make ${SRCDIR}/gnustep-core-1.10/gnustep-core-1.10.sb
        ${SB} -m gnustep-make -i ${SRCDIR}/gnustep-core-1.10/gnustep-core-1.10.sb
/opt/TWWfsw/GNUstep/System/Library/Libraries/Resources/gnustep-base/Languages:
        ${SB} -m gnustep-base ${SRCDIR}/gnustep-core-1.10/gnustep-core-1.10.sb
        ${SB} -m gnustep-base -i ${SRCDIR}/gnustep-core-1.10/gnustep-core-1.10.sb
/opt/TWWfsw/GNUstep/System/Library/KeyBindings:
        ${SB} -m gnustep-gui ${SRCDIR}/gnustep-core-1.10/gnustep-core-1.10.sb
        ${SB} -m gnustep-gui -i  ${SRCDIR}/gnustep-core-1.10/gnustep-core-1.10.sb
/opt/TWWfsw/GNUstep/System/Library/Documentation/man:
        ${SB} -m gnustep-back ${SRCDIR}/gnustep-core-1.10/gnustep-core-1.10.sb
        ${SB} -m gnustep-back -i ${SRCDIR}/gnustep-core-1.10/gnustep-core-1.10.sb
/opt/dist/cd/GNUstp1au:
        ${PB}  -1 ${SRCDIR}/gnustep-core-1.10/gnustep-core-1.10.pb
gnustep-core-1.10-gen-pkg-inst:
        ${GPD}  ${SRCDIR}/gnustep-core-1.10/gnustep-core-1.10.pb >> /opt/dist/cd/pkg-db.xml
        (cd /opt/dist/cd;zip  data.zip  GNUstp1a* ;${M5S}  data.zip |awk '{print $$1}' > data.zip.md5)
        (cd /opt/dist/cd;zip -r  gnustep-core-1.10.pkgadd.pkg-inst pkg-db.xml data.zip data.zip.md5; ${M5S}  gnustep-core-1.10.pkgadd.pkg-inst  |awk '{print $$1}' > gnustep-core-1.10.pkgadd.pkg-inst.md5)
        cd /opt/dist/cd;rm -f pkg-db.xml data.zip data.zip.md5
gnustep-core-1.10-upload:
        cd /opt/dist/cd;${RSYNC} -azpv gnustep-core-1.10.pkgadd.pkg-inst gnustep-core-1.10.pkgadd.pkg-inst.md5 root@gnustep.example.com:${DEST}/${ARCHI}
        cd /opt/dist/cd;rm -f /opt/dist/cd/pkg-db.xml gnustep-core-1.10.pkgadd.pkg-inst gnustep-core-1.10.pkgadd.pkg-inst.md5
gnustep-core-1.10-clean:
        rm -rf /opt/TWWfsw/GNUstep /opt/dist/cd/GNUstp1a*