Commit 9a1a3998 authored by Graham Leggett's avatar Graham Leggett
Browse files

AIX: Add build scripts for AIX.

Submitted by: Michael Felt <mamfelt gmail com>


git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/branches/2.2.x@1294380 13f79535-47bb-0310-9956-ffa450edef68
parent a975686e
Loading
Loading
Loading
Loading

build/aix/README

0 → 100644
+38 −0
Original line number Diff line number Diff line
The script buildaix.ksh will attempt to build a AIX installp fileset
out of a source tree for ASF project

REQUIREMENTS:
  Fileset                      Level  State  Type  Description (Uninstaller)
  ----------------------------------------------------------------------------
  bos.adt.insttools          5.3.7.2    C     F    Tool to Create installp
                                                   Packages
  Fileset                      Level  State  Type  Description (Uninstaller)
  ----------------------------------------------------------------------------
  rpm.rte                   3.0.5.41    C     F    RPM Package Manager

Additional:
Preferred: download zlib sources and copy zlib.h and zconf.h to /opt/include
and, if configure cannot find them directly, add symbolic links from /usr/include to /opt/include

To build a package, make sure you are in the root of the source tree,
and run:

build/aix/buildaix.ksh

An AIX fileset named $PKG.$NAME.$ARCH.$VERSION.I will be
created in the build/aix directory. the .template file created is also there.

KNOWN issues:
on AIX libtool is known to have issues with the install command.
Some of these issues have been resolved by extracting the apr/apu utilities
from the projects (i.e. NOT using the embedded version)
In case of problems I recommend that you install the GNU 'install' program (part of coreutils)
If make DESTDIR=$TEMPDIR install command continues to fail, try 'make install' and then run
the buildaix.ksh command again

TODO
Add Copyright display/banner
Add Apache LICENSE to fileset and require acceptance
Add special instructions for TCB - to ignore /etc/* /var/httpd/htdocs/*
Add _config_i scripts to setup autostart
Add _pre_i scripts to verify pre-requisites, required users/groups, etc.

build/aix/aixinfo

0 → 100644
+16 −0
Original line number Diff line number Diff line

PKG="ASF"
NAME="httpd"
ARCH="powerpc"
VERSION="2.2.22"
CATEGORY="application"
VENDOR="Apache Software Foundation"
EMAIL="dev@httpd.apache.org"
VMMN=`build/get-version.sh mmn include/ap_mmn.h MODULE_MAGIC_NUMBER`
REVISION=`build/get-version.sh all include/ap_release.h AP_SERVER`
VERSION=`echo $REVISION | cut -d- -s -f1`
RELEASE=`echo $REVISION | cut -d- -s -f2`
if [ "x$VERSION" = "x" ]; then
      VERSION=$REVISION
      RELEASE=0
fi

build/aix/buildaix.ksh

0 → 100755
+124 −0
Original line number Diff line number Diff line
#!/usr/bin/ksh
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements.  See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You under the Apache License, Version 2.0
# (the "License"); you may not use this file except in compliance with
# the License.  You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
#

# buildaix.ksh: This script builds an AIX fileset of Apache httpd

# if arguments - try to run fast
cmd=$0

export CFLAGS='-O2'

lslpp -L bos.adt.insttools >/dev/null
 [[ $? -ne 0 ]] && echo "must have bos.adt.insttools installed" && exit -1

apr_config=`which apr-1-config`
apu_config=`which apu-1-config`

if [[ -z ${apr_config} && -z ${apu_config} ]]
then
	export PATH=/opt/bin:${PATH}
	apr_config=`which apr-1-config`
	apu_config=`which apu-1-config`
fi

while test $# -gt 0
do
  # Normalize
  case "$1" in
  -*=*) optarg=`echo "$1" | sed 's/[-_a-zA-Z0-9]*=//'` ;;
  *) optarg= ;;
  esac

  case "$1" in
  --with-apr=*)
  apr_config=$optarg
  ;;
  esac

  case "$1" in
  --with-apr-util=*)
  apu_config=$optarg
  ;;
  esac

  shift
  argc--
done

if [ ! -f "$apr_config" -a ! -f "$apr_config/configure.in" ]; then
  echo "The apr source directory / apr-1-config could not be found"
  echo "If available, install the ASF.apu.rte and ASF.apr.rte filesets"
  echo "Usage: $cmd [--with-apr=[dir|file]] [--with-apr-util=[dir|file]]"
  exit 1
fi

if [ ! -f "$apu_config" -a ! -f "$apu_config/configure.in" ]; then
  echo "The apu source directory / apu-1-config could not be found"
  echo "If available, install the ASF.apu.rte and ASF.apr.rte filesets"
  echo "Usage: $cmd [--with-apr=[dir|file]] [--with-apr-util=[dir|file]]"
  exit 1
fi

. build/aix/aixinfo
LAYOUT=AIX
TEMPDIR=/var/tmp/$USER/${NAME}.${VERSION}
rm -rf $TEMPDIR

if [[ ! -e ./Makefile ]] # if Makefile exists go faster
then
	echo "+ ./configure \n\
		--enable-layout=$LAYOUT \n\
		--with-apr=$apr_config \n\
		--with-apr-util=$apu_config \n\
		--with-mpm=worker \n\
		--enable-ssl \n\
		--enable-mods-shared=all > build/aix/configure.out"
	./configure \
		--enable-layout=$LAYOUT \
		--with-apr=$apr_config \
		--with-apr-util=$apu_config \
		--with-mpm=worker \
		--enable-ssl \
		--enable-mods-shared=all > build/aix/configure.out
		 [[ $? -ne 0 ]] && echo './configure' returned an error && exit -1
else
	echo $0: using existing Makefile
	echo $0: run make distclean to get a standard AIX configure
	echo
	ls -l ./Makefile config.*
	echo
fi

echo "+ make > build/aix/make.out"
make > build/aix/make.out
 [[ $? -ne 0 ]] && echo 'make' returned an error && exit -1

echo "+ make install DESTDIR=$TEMPDIR > build/aix/install.out"
make install DESTDIR=$TEMPDIR > build/aix/install.out
 [[ $? -ne 0 ]] && echo 'make install' returned an error && exit -1

echo "+ build/aix/mkinstallp.ksh $TEMPDIR > build/aix/mkinstallp.out"
build/aix/mkinstallp.ksh $TEMPDIR > build/aix/mkinstallp.out
 [[ $? -ne 0 ]] && echo mkinstallp.ksh returned an error && exit -1

rm -rf $TEMPDIR

# list installable fileset(s)
echo ========================
installp -d build/aix -L
echo ========================
+200 −0
Original line number Diff line number Diff line
#!/usr/bin/ksh
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements.  See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You under the Apache License, Version 2.0
# (the "License"); you may not use this file except in compliance with
# the License.  You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
#

# minstallp.ksh # create an installp image of ${NAME} (defined in aixinfo)
# from TEMPDIR using mkinstallp (part of bos.adt.insttools)

[[ $# == 0 ]] && echo $0: Syntax error && echo "Syntax: $0 <BaseDirectory>" && exit -1

umask 022
TEMPDIR=$1
BASE=`pwd`
cd ${TEMPDIR}
[[ $? != 0 ]] && echo $0: ${TEMPDIR} -- bad directory && exit -1

# clean up side-effects from DEBUG passes - usr/local might be there as
# a circular link i.e. usr/local points at /usr/local
# as we are not using /usr/local for ASF packaging, remove it!
# mkinstallp seems to make usr/local -> /usr/local 
[[ -f usr/local ]] && rm -f usr/local && echo removed unexpected usr/local !!
[[ -L usr/local ]] && rm -f usr/local && echo removed unexpected usr/local !!
[[ -d usr/local ]] && rm -rf usr/local && echo removed unexpected usr/local !!

# use the aixinfo for PKG NAME VERSION etc labels
cd ${BASE}
. build/aix/aixinfo
# INFO=${BASE}/build/aix/.info
# mkdir -p $INFO
INFO=${BASE}/build/aix
template=${INFO}/${PKG}.${NAME}.${VERSION}.template
>$template

# mkinstallp template definitions
# TODO: add AIX oslevel/uname information for package filename
package=$PKG
name=$NAME
vrmf=$VERSION
release=$RELEASE
descr="$NAME version ${VERSION} for $ARCH ${VENDOR}"

# copy LICENSE information
# TODO: setup template so that license acceptance is required
# TODO: add Copyright Information for display during install
mkdir -p ${TEMPDIR}/usr/swlag/en_US
cp ${BASE}/LICENSE ${TEMPDIR}/usr/swlag/en_US/${PKG}.${NAME}.la

cd ${TEMPDIR}
# remove files we do not want as "part" possibly
# left-over from a previous packaging
rm -rf .info lpp_name tmp usr/lpp
[[ $? -ne 0 ]] && echo $cmd: cleanup error && pwd && ls -ltr && exit -1

#if we are going to add extra symbolic links - do it now
[[ -r build/aix/aixlinks ]] && ksh build/aix/aixlinks

# get the directory sizes in blocks
for d in etc opt var
do
	if [[ -d $d/${NAME} ]]
	then
		set `du -s $d/${NAME}`
	else
		[[ -d $d ]] && set `du -s $d`
	fi
	# make sure the argument exists before using setting values
	if [[ -d $d ]]
	then
		eval nm$d=/"$2"
		let sz$d=$1
	fi
done

files=./${NAME}.${VERSION}
cd ${TEMPDIR}/..
find ${files} -type d -exec chmod og+rx {} \;
chmod -R go+r ${files}
chown -R 0.0 ${files}

cat - <<EOF >>$template
Package Name: ${PKG}.${NAME}
Package VRMF: ${VERSION}.${RELEASE}
Update: N
Fileset
  Fileset Name: ${PKG}.${NAME}.rte
  Fileset VRMF: ${VERSION}.${RELEASE}
  Fileset Description: ${descr}
  USRLIBLPPFiles
  EOUSRLIBLPPFiles
  Bosboot required: N
  License agreement acceptance required: N
  Name of license agreement: 
  Include license files in this package: N
  Requisites:
EOF

[[ $szetc -ne 0 ]] && echo "        Upsize: ${nmetc} $szetc;" >> $template
[[ $szopt -ne 0 ]] && echo "        Upsize: ${nmopt} $szopt;" >> $template
[[ $szvar -ne 0 ]] && echo "        Upsize: ${nmvar} $szvar;" >> $template
echo "  USRFiles" >> $template

# USR part -- i.e. files in /usr and /opt
cd ${TEMPDIR}/..
find ${files}/usr/swlag ${files}/opt \
	| sed -e s#^${files}## | sed -e "/^$/d" >>$template
echo "  EOUSRFiles" >> $template

if [[ $szetc -gt 0 || $szvar -gt 0 ]]
then
INSTROOT=${TEMPDIR}/usr/lpp/${PKG}.${NAME}/inst_root
mkdir -p ${INSTROOT}
cd ${TEMPDIR}
[[ $szetc -gt 0 ]] && find ./etc -type d | backup -if - | (cd ${INSTROOT}; restore -xqf -) >/dev/null
[[ $szvar -gt 0 ]] && find ./var -type d | backup -if - | (cd ${INSTROOT}; restore -xqf -) >/dev/null
cat - <<EOF >>$template
  ROOT Part: Y
  ROOTFiles
EOF

# ROOT part 
cd ${TEMPDIR}/..
find ${files}/etc ${files}/var \
	| sed -e s#^${files}## | sed -e "/^$/d" >>$template
else
# no ROOT parts to include
cat - <<EOF >>$template
  ROOT Part: N
  ROOTFiles
EOF
fi
cat - <<EOF >>$template
  EOROOTFiles
  Relocatable: N
EOFileset
EOF
# man pages as seperate fileset
cd ${TEMPDIR}
if [[ -d usr/share/man ]]
then
	# manual pages, space required calculation
	set `du -s usr/share/man`
	szman=$1
	descr="$NAME ${VERSION} man pages ${VENDOR}"
	cat - <<EOF >>$template
Fileset
  Fileset Name: ${PKG}.${NAME}.man.en_US
  Fileset VRMF: ${VERSION}.${RELEASE}
  Fileset Description: ${descr}
  USRLIBLPPFiles
  EOUSRLIBLPPFiles
  Bosboot required: N
  License agreement acceptance required: N
  Name of license agreement:
  Include license files in this package: N
  Requisites:
EOF

	echo "        Upsize: /usr/share/man ${szman};" >> $template
	echo "  USRFiles" >> $template
	cd ${TEMPDIR}/..
	find ${files}/usr/share | sed -e s#^${files}## | sed -e "/^$/d" >>$template
	cat - <<EOF >>$template
  EOUSRFiles
  ROOT Part: N
  ROOTFiles
  EOROOTFiles
  Relocatable: N
EOFileset
EOF
fi

# use mkinstallp to create the fileset. result is in ${TEMPDIR}/tmp
# must actually sit in TEMPDIR for ROOT part processing to succeed
# also - need "empty" directories to exist, as they do not get copied
# in the inst_root part
cd ${TEMPDIR}
mkinstallp -d ${TEMPDIR} -T ${template}
[[ $? -ne 0 ]] && echo mkinstallp returned error status && exit -1

# copy package to build/aix
# create TOC
cp ${TEMPDIR}/tmp/$PKG.$NAME.$VERSION.0.bff ${BASE}/build/aix
cd ${BASE}/build/aix
rm -f $PKG.$NAME.$VERSION.$ARCH.I
mv $PKG.$NAME.$VERSION.0.bff $PKG.$NAME.$ARCH.$VERSION.I
rm -f .toc
inutoc .
+24 −0
Original line number Diff line number Diff line
@@ -322,3 +322,27 @@
    installbuilddir: ${prefix}/etc/apache2/build
    errordir:      ${datadir}/error
</Layout>

# AIX layout
<Layout AIX>
    prefix:        /opt/httpd
    exec_prefix:   /opt/httpd
    bindir:        ${exec_prefix}/bin
    sbindir:       ${exec_prefix}/sbin
    libdir:        ${exec_prefix}/lib
    libexecdir:    ${exec_prefix}/libexec
    mandir:        /usr/share/man
    sysconfdir:    /etc/httpd
    datadir:       /var/httpd
    installbuilddir: ${datadir}/build
    errordir:      ${datadir}/error
    htdocsdir:     ${datadir}/htdocs
    cgidir:        ${datadir}/cgi-bin
    iconsdir:      ${prefix}/icons
    manualdir:     ${prefix}/manual
    includedir:    ${prefix}/include
    localstatedir: /var/httpd
    runtimedir:    ${localstatedir}/run
    logfiledir:    ${localstatedir}/logs
    proxycachedir: ${localstatedir}/proxy
</Layout>