swpkg - Software Packaging

Old Deprecated Documentation
Site Map
News
Overview
Philosophy
Building Software
Docs
Maintenance
Download

Related Work
Other Projects

The following applies to the old set of swpkg tools only!


Basic documentation

Basic documentation of swpkg tools is found in manual pages. Please refer to the latest version as the following are provided for convenience and may slightly be out of date:


Step by step guide

The following describes how the swpkg tools fit together and provides a step by step guide to installing software using them. The swbuild manual page contains a summary of all this.

  1. Source the appropriate swbuild file to clean up your environment.
  2. Run swdirs to create the basic directory structure for the software you are about to install. This is the "base install directory". (This is optionally done by swbuild.)
  3. Read the instructions that come with the software on how to build it, and follow them. This is the most crucial step: The above can be tricky, and requires scrutiny and attention.
  4. Read the instructions that come with the software on how to install it, and follow them. In most cases, this should not be done as root. There are exceptions, as some software requires special privileges and the provided installation scripts may fail if they are not run as root.
  5. At this point, you may either run swinstall or the following three steps manually.
  6. Run swdirs again to remove unused directories created above.
  7. Run swrecord to record some information about the build and installation.
  8. Run swperms to check that all permissions seem fine, and that the owner of the files below the base installation directory can safely be changed. If swperms reports problematic permissions, you may need to reinstall the software as root. Deal with such situations on a case by case basis as they arise.
  9. Run chown as recommended by swperms.
  10. Optionally test the software.
  11. Inspect the installed files and create a package specific .swrc file if needed.
  12. Run swln to create the necessary links under the target directory.


Migration guide

If you're lucky, you're building a collection of software packages from scratch, and have no existing base of installed software in /usr/local (or elsewhere). If this is the case, you can pretty much stop reading this already. On the other hand, if you live in the real world, you probably aren't that lucky and the following will help you.

It is important to realize that successfully migrating an environment to one setup using the swpkg philosophy and tools is no simple or quick task. For most people it will be a large project requiring a significant deal of effort and dedication. However, it is well worth it, and isn't one of these impossible to achieve goals. There are (at least) two ways you can go about it:

No matter where your installed software resides, you should carefully consider where your target directory will be. While /usr/local is the default set for the swpkg tools, it is easy to override. And avoiding /usr/local is a good thing to prevent (too) smart "configure" type scripts from finding binaries, libraries are other dependencies in there. Be sure to read this section of the swpkg philosophy before making your decision.

Whether your target directory will be the same as where your existing software is or not brings two different approaches. Both are doable, although the former quite preferrable. However, in both cases, you will probably need to inventory (and identify) the already installed software packages. (This can be a daunting tasks as random files are often not easy to attribute to a software. Enlist the help of a senior UNIX admin if you have trouble with this.) This is the best way to get to have an idea of what you will need to install. It is also a good opportunity to decide on what you probably don't want to reinstall for things that are no longer used.

The rest of this only applies to the case where you use the same target directory.

By default, swln will NOT replace any file in order to create a link for a package. This is something that you will need to do as you reinstall existing software. Such behaviour is easy to override by using the -I flag to swln, and in most cases, you'll be fine. Things can of course break as other installed programs may depend on what you're just blowing away (and especially files that don't get linked in the target directory), but this is pretty much the same as if you were simply installing the new version the old fashioned way, directly in the target directory.

As time goes by, you have more and more links in your target directory, and less and less real files. However, unless you are a god, you probably will never be able to get rid of all such files simply by reinstalling packages. At some point, you will want to audit such remaining files, and blow them away as the final step (once you get over the likely surprises you will uncover during the audit).


Example: installing wget

Here is a practical example showing how to install "wget". This example pre-dates version 0.3 of the swpkg tools suite, and therefore does not show many of the improvements found in current releases. In particular, swbuild was still (somewhat) primitive, while swinstall did not even exist yet. However, everything found below still applies and is a good detailed example to look at when learning the intricacies of using swpkg tools.

$ ls -l /usr/local/pkgs/wget-1.7
ls: /usr/local/pkgs/wget-1.7: No such file or directory
$ swdirs -c wget-1.7
$ ls -l /usr/local/pkgs/wget-1.7
total 14
drwxr-xr-x   2 user  wheel  512 Oct 21 20:06 bin
drwxr-xr-x   2 user  wheel  512 Oct 21 20:06 etc
drwxr-xr-x   2 user  wheel  512 Oct 21 20:06 include
drwxr-xr-x   2 user  wheel  512 Oct 21 20:06 info
drwxr-xr-x  10 user  wheel  512 Oct 21 20:06 man
drwxr-xr-x   2 user  wheel  512 Oct 21 20:06 sbin
drwxr-xr-x   2 user  wheel  512 Oct 21 20:06 share
$ . /usr/local/etc/swbuild.sh
Environment cleared.
Setting build PATH
Setting umask to 002

Make sure to run env(1) to double check that this script was properly invoked.

$ cd wget-1.7
$ ./configure --prefix=/usr/local/pkgs/wget-1.7
creating cache ./config.cache
configuring for GNU Wget 1.7
checking host system type... sparc-unknown-netbsdelf1.5.1
checking whether make sets ${MAKE}... yes
checking for a BSD compatible install... /usr/bin/install -c
checking build system type... sparc-unknown-netbsdelf1.5.1
checking for ranlib... ranlib
checking for gcc... gcc
checking whether the C compiler (gcc  ) works... yes
checking whether the C compiler (gcc  ) is a cross-compiler... no
checking whether we are using GNU C... yes
checking whether gcc accepts -g... yes
checking for ld used by GCC... /usr/bin/ld
checking if the linker (/usr/bin/ld) is GNU ld... yes
checking for BSD-compatible nm... /usr/bin/nm -B
checking whether ln -s works... yes
updating cache ./config.cache
loading cache ./config.cache within ltconfig
checking for object suffix... o
checking for executable suffix... no
checking for gcc option to produce PIC... -fPIC
checking if gcc PIC flag -fPIC works... yes
checking if gcc supports -c -o file.o... yes
checking if gcc supports -c -o file.lo... yes
checking if gcc supports -fno-rtti -fno-exceptions ... yes
checking if gcc static flag -static works... -static
checking if the linker (/usr/bin/ld) is GNU ld... yes
checking whether the linker (/usr/bin/ld) supports shared libraries... yes
checking command to parse /usr/bin/nm -B output... ok
checking how to hardcode library paths into programs... immediate
checking for /usr/bin/ld option to reload object files... -r
checking dynamic linker characteristics... NetBSD ld.elf_so
checking if libtool supports shared libraries... yes
checking whether to build shared libraries... yes
checking whether to build static libraries... yes
checking for objdir... .libs
creating libtool
updating cache ./config.cache
loading cache ./config.cache
checking for gcc... (cached) gcc
checking whether the C compiler (gcc -g -O2 ) works... yes
checking whether the C compiler (gcc -g -O2 ) is a cross-compiler... no
checking whether we are using GNU C... (cached) yes
checking whether gcc accepts -g... (cached) yes
checking how to run the C preprocessor... gcc -E
checking for AIX... no
checking for gcc option to accept ANSI C...
checking for function prototypes... yes
checking for working const... yes
checking for inline... inline
checking for size_t... yes
checking for pid_t... yes
checking whether byte ordering is bigendian... yes
checking size of long... 4
checking size of long long... 8
checking for string.h... yes
checking for stdarg.h... yes
checking for unistd.h... yes
checking for sys/time.h... yes
checking for utime.h... yes
checking for sys/utime.h... no
checking for sys/select.h... yes
checking for sys/utsname.h... yes
checking for pwd.h... yes
checking for signal.h... yes
checking whether time.h and sys/time.h may both be included... yes
checking return type of signal handlers... void
checking for struct utimbuf... yes
checking for working alloca.h... no
checking for alloca... yes
checking for unistd.h... (cached) yes
checking for getpagesize... yes
checking for working mmap... yes
checking for strdup... yes
checking for strstr... yes
checking for strcasecmp... yes
checking for strncasecmp... yes
checking for gettimeofday... yes
checking for mktime... yes
checking for strptime... yes
checking for strerror... yes
checking for snprintf... yes
checking for vsnprintf... yes
checking for select... yes
checking for signal... yes
checking for symlink... yes
checking for access... yes
checking for isatty... yes
checking for uname... yes
checking for gethostname... yes
checking for gethostbyname... yes
checking for socket in -lsocket... no
checking for runtime libraries flag... "-R"
checking whether NLS is requested... yes
language catalogs: cs da de el es et fr gl hr it ja nl no pl pt_BR ru sk sl
sv tr zh_TW
checking for msgfmt... msgfmt
checking for xgettext... :
checking for gmsgfmt... msgfmt
checking for locale.h... yes
checking for libintl.h... no
checking for gettext... no
checking for gettext in -lintl... no
gettext not found; disabling NLS
checking for makeinfo... makeinfo
checking for perl5... no
checking for perl... no
checking for pod2man... no
updating cache ./config.cache
creating ./config.status
creating Makefile
creating src/Makefile
creating doc/Makefile
creating util/Makefile
creating po/Makefile.in
creating windows/Makefile
creating src/config.h
generating po/POTFILES from ./po/POTFILES.in
creating po/Makefile
$

The above shows that configure looked for the gettext library as well as perl (and in particular pod2man) and didn't find them. The former is needed for NLS (Native Language Support), and the latter to (produce and install) manual pages (as indicated by the Makefile and ChangeLog). This system doesn't have perl, but has gettext installed, and NLS is desired.

So we use swln to add the dependency:

$ /usr/local/bin/swln -vvv -T wget-1.7 gettext-0.10.40
-- scanning package gettext-0.10.40...
.s /usr/local/pkgs/wget-1.7/include/libintl.h: linked [gettext-0.10.40]
.d /usr/local/pkgs/wget-1.7/lib: created
.s /usr/local/pkgs/wget-1.7/lib/charset.alias: linked [gettext-0.10.40]
.s /usr/local/pkgs/wget-1.7/lib/libintl.a: linked [gettext-0.10.40]
.s /usr/local/pkgs/wget-1.7/lib/libintl.la: linked [gettext-0.10.40]
.s /usr/local/pkgs/wget-1.7/lib/libintl.so: linked [gettext-0.10.40]
.s /usr/local/pkgs/wget-1.7/lib/libintl.so.1: linked [gettext-0.10.40]
.s /usr/local/pkgs/wget-1.7/lib/libintl.so.1.1: linked [gettext-0.10.40]
-- gettext-0.10.40: 7 link(s), 0 missed, 0 warning(s), 0 error(s)
-- 1 package added
$

And we start over. Notice the additional settings for configure:

$ make distclean
for subdir in src doc po util windows; do  target=`echo distclean-recursive
| sed s/-recursive//`;  (cd $subdir && make CC='gcc' CPPFLAGS=''
DEFS='-DHAVE_CONFIG_H
-DSYSTEM_WGETRC=\"/usr/local/pkgs/wget-1.7/etc/wgetrc\"
-DLOCALEDIR=\"/usr/local/pkgs/wget-1.7/share/locale\"'  CFLAGS='-g -O2'
LDFLAGS='' LIBS=''  prefix='/usr/local/pkgs/wget-1.7'
exec_prefix='/usr/local/pkgs/wget-1.7'
bindir='/usr/local/pkgs/wget-1.7/bin'
infodir='/usr/local/pkgs/wget-1.7/info'
mandir='/usr/local/pkgs/wget-1.7/man' manext='1' $target) || exit 1;  done
rm -f *.o wget *~ *.bak core  *._o *._c
rm -f Makefile config.h
rm -f *~ *.bak *.cat *.pod *.html
rm -f *.dvi *.aux *.cp *.cps *.fn *.toc *.tp *.vr *.ps *.ky *.pg *.log
rm -f Makefile
rm -f wget.1 ./texi2pod.pl
rm -f core core.* *.pox wget.po *.old.po
rm -fr *.o
rm -f Makefile Makefile.in POTFILES *.mo *.msg
rm -f Makefile
rm -f Makefile
rm -f *~ *.bak wget-1.7.tar.gz
rm -f Makefile config.status config.log config.cache stamp-h
$ CPPFLAGS=-I/usr/local/pkgs/wget-1.7/include CFLAGS=-L/usr/local/pkgs/wget-1.7/lib LDFLAGS=-R/usr/local/pkgs/wget-1.7/lib ./configure --prefix=/usr/local/pkgs/wget-1.7
creating cache ./config.cache
configuring for GNU Wget 1.7
[...]
checking whether NLS is requested... yes
language catalogs: cs da de el es et fr gl hr it ja nl no pl pt_BR ru sk sl
sv tr zh_TW
checking for msgfmt... msgfmt
checking for xgettext... :
checking for gmsgfmt... msgfmt
checking for locale.h... yes
checking for libintl.h... yes
checking for gettext... no
checking for gettext in -lintl... yes
checking for makeinfo... makeinfo
checking for perl5... no
checking for perl... no
checking for pod2man... no
updating cache ./config.cache
creating ./config.status
creating Makefile
creating src/Makefile
creating doc/Makefile
creating util/Makefile
creating po/Makefile.in
creating windows/Makefile
creating src/config.h
generating po/POTFILES from ./po/POTFILES.in
creating po/Makefile
$

Once everything looks fine, it's just a matter of building and installing it:

$ make
[...]
$ make install
cd src && make CC='gcc' CPPFLAGS='-I/usr/local/pkgs/wget-1.7/include'
DEFS='-DHAVE_CONFIG_H
-DSYSTEM_WGETRC=\"/usr/local/pkgs/wget-1.7/etc/wgetrc\"
-DLOCALEDIR=\"/usr/local/pkgs/wget-1.7/share/locale\"'
CFLAGS='-L/usr/local/pkgs/wget-1.7/lib' LDFLAGS='' LIBS='-lintl'
prefix='/usr/local/pkgs/wget-1.7' exec_prefix='/usr/local/pkgs/wget-1.7'
bindir='/usr/local/pkgs/wget-1.7/bin'
infodir='/usr/local/pkgs/wget-1.7/info'
mandir='/usr/local/pkgs/wget-1.7/man' manext='1' install.bin
../mkinstalldirs /usr/local/pkgs/wget-1.7/bin
/usr/bin/install -c wget /usr/local/pkgs/wget-1.7/bin/wget
cd doc && make CC='gcc' CPPFLAGS='-I/usr/local/pkgs/wget-1.7/include'
DEFS='-DHAVE_CONFIG_H
-DSYSTEM_WGETRC=\"/usr/local/pkgs/wget-1.7/etc/wgetrc\"
-DLOCALEDIR=\"/usr/local/pkgs/wget-1.7/share/locale\"'
CFLAGS='-L/usr/local/pkgs/wget-1.7/lib' LDFLAGS='' LIBS='-lintl'
prefix='/usr/local/pkgs/wget-1.7' exec_prefix='/usr/local/pkgs/wget-1.7'
bindir='/usr/local/pkgs/wget-1.7/bin'
infodir='/usr/local/pkgs/wget-1.7/info'
mandir='/usr/local/pkgs/wget-1.7/man' manext='1' install.info
../mkinstalldirs /usr/local/pkgs/wget-1.7/info
for file in wget.info wget.info-*[0-9]; do  test -f $file &&
/usr/bin/install -c -m 644 $file /usr/local/pkgs/wget-1.7/info/$file ;
done
cd doc && make CC='gcc' CPPFLAGS='-I/usr/local/pkgs/wget-1.7/include'
DEFS='-DHAVE_CONFIG_H
-DSYSTEM_WGETRC=\"/usr/local/pkgs/wget-1.7/etc/wgetrc\"
-DLOCALEDIR=\"/usr/local/pkgs/wget-1.7/share/locale\"'
CFLAGS='-L/usr/local/pkgs/wget-1.7/lib' LDFLAGS='' LIBS='-lintl'
prefix='/usr/local/pkgs/wget-1.7' exec_prefix='/usr/local/pkgs/wget-1.7'
bindir='/usr/local/pkgs/wget-1.7/bin'
infodir='/usr/local/pkgs/wget-1.7/info'
mandir='/usr/local/pkgs/wget-1.7/man' manext='1' install.wgetrc
../mkinstalldirs /usr/local/pkgs/wget-1.7/etc
cd po && make CC='gcc' CPPFLAGS='-I/usr/local/pkgs/wget-1.7/include'
DEFS='-DHAVE_CONFIG_H
-DSYSTEM_WGETRC=\"/usr/local/pkgs/wget-1.7/etc/wgetrc\"
-DLOCALEDIR=\"/usr/local/pkgs/wget-1.7/share/locale\"'
CFLAGS='-L/usr/local/pkgs/wget-1.7/lib' LDFLAGS='' LIBS='-lintl'
prefix='/usr/local/pkgs/wget-1.7' exec_prefix='/usr/local/pkgs/wget-1.7'
bindir='/usr/local/pkgs/wget-1.7/bin'
infodir='/usr/local/pkgs/wget-1.7/info'
mandir='/usr/local/pkgs/wget-1.7/man' manext='1' install.mo
mkdir /usr/local/pkgs/wget-1.7/share/locale
mkdir /usr/local/pkgs/wget-1.7/share/locale/cs
mkdir /usr/local/pkgs/wget-1.7/share/locale/cs/LC_MESSAGES
installing cs.gmo as
/usr/local/pkgs/wget-1.7/share/locale/cs/LC_MESSAGES/wget.mo
mkdir /usr/local/pkgs/wget-1.7/share/locale/da
mkdir /usr/local/pkgs/wget-1.7/share/locale/da/LC_MESSAGES
installing da.gmo as
/usr/local/pkgs/wget-1.7/share/locale/da/LC_MESSAGES/wget.mo
mkdir /usr/local/pkgs/wget-1.7/share/locale/de
mkdir /usr/local/pkgs/wget-1.7/share/locale/de/LC_MESSAGES
installing de.gmo as
/usr/local/pkgs/wget-1.7/share/locale/de/LC_MESSAGES/wget.mo
mkdir /usr/local/pkgs/wget-1.7/share/locale/el
mkdir /usr/local/pkgs/wget-1.7/share/locale/el/LC_MESSAGES
installing el.gmo as
/usr/local/pkgs/wget-1.7/share/locale/el/LC_MESSAGES/wget.mo
mkdir /usr/local/pkgs/wget-1.7/share/locale/es
mkdir /usr/local/pkgs/wget-1.7/share/locale/es/LC_MESSAGES
installing es.gmo as
/usr/local/pkgs/wget-1.7/share/locale/es/LC_MESSAGES/wget.mo
mkdir /usr/local/pkgs/wget-1.7/share/locale/et
mkdir /usr/local/pkgs/wget-1.7/share/locale/et/LC_MESSAGES
installing et.gmo as
/usr/local/pkgs/wget-1.7/share/locale/et/LC_MESSAGES/wget.mo
mkdir /usr/local/pkgs/wget-1.7/share/locale/fr
mkdir /usr/local/pkgs/wget-1.7/share/locale/fr/LC_MESSAGES
installing fr.gmo as
/usr/local/pkgs/wget-1.7/share/locale/fr/LC_MESSAGES/wget.mo
mkdir /usr/local/pkgs/wget-1.7/share/locale/gl
mkdir /usr/local/pkgs/wget-1.7/share/locale/gl/LC_MESSAGES
installing gl.gmo as
/usr/local/pkgs/wget-1.7/share/locale/gl/LC_MESSAGES/wget.mo
mkdir /usr/local/pkgs/wget-1.7/share/locale/hr
mkdir /usr/local/pkgs/wget-1.7/share/locale/hr/LC_MESSAGES
installing hr.gmo as
/usr/local/pkgs/wget-1.7/share/locale/hr/LC_MESSAGES/wget.mo
mkdir /usr/local/pkgs/wget-1.7/share/locale/it
mkdir /usr/local/pkgs/wget-1.7/share/locale/it/LC_MESSAGES
installing it.gmo as
/usr/local/pkgs/wget-1.7/share/locale/it/LC_MESSAGES/wget.mo
mkdir /usr/local/pkgs/wget-1.7/share/locale/ja
mkdir /usr/local/pkgs/wget-1.7/share/locale/ja/LC_MESSAGES
installing ja.gmo as
/usr/local/pkgs/wget-1.7/share/locale/ja/LC_MESSAGES/wget.mo
mkdir /usr/local/pkgs/wget-1.7/share/locale/nl
mkdir /usr/local/pkgs/wget-1.7/share/locale/nl/LC_MESSAGES
installing nl.gmo as
/usr/local/pkgs/wget-1.7/share/locale/nl/LC_MESSAGES/wget.mo
mkdir /usr/local/pkgs/wget-1.7/share/locale/no
mkdir /usr/local/pkgs/wget-1.7/share/locale/no/LC_MESSAGES
installing no.gmo as
/usr/local/pkgs/wget-1.7/share/locale/no/LC_MESSAGES/wget.mo
mkdir /usr/local/pkgs/wget-1.7/share/locale/pl
mkdir /usr/local/pkgs/wget-1.7/share/locale/pl/LC_MESSAGES
installing pl.gmo as
/usr/local/pkgs/wget-1.7/share/locale/pl/LC_MESSAGES/wget.mo
mkdir /usr/local/pkgs/wget-1.7/share/locale/pt_BR
mkdir /usr/local/pkgs/wget-1.7/share/locale/pt_BR/LC_MESSAGES
installing pt_BR.gmo as
/usr/local/pkgs/wget-1.7/share/locale/pt_BR/LC_MESSAGES/wget.mo
mkdir /usr/local/pkgs/wget-1.7/share/locale/ru
mkdir /usr/local/pkgs/wget-1.7/share/locale/ru/LC_MESSAGES
installing ru.gmo as
/usr/local/pkgs/wget-1.7/share/locale/ru/LC_MESSAGES/wget.mo
mkdir /usr/local/pkgs/wget-1.7/share/locale/sk
mkdir /usr/local/pkgs/wget-1.7/share/locale/sk/LC_MESSAGES
installing sk.gmo as
/usr/local/pkgs/wget-1.7/share/locale/sk/LC_MESSAGES/wget.mo
mkdir /usr/local/pkgs/wget-1.7/share/locale/sl
mkdir /usr/local/pkgs/wget-1.7/share/locale/sl/LC_MESSAGES
installing sl.gmo as
/usr/local/pkgs/wget-1.7/share/locale/sl/LC_MESSAGES/wget.mo
mkdir /usr/local/pkgs/wget-1.7/share/locale/sv
mkdir /usr/local/pkgs/wget-1.7/share/locale/sv/LC_MESSAGES
installing sv.gmo as
/usr/local/pkgs/wget-1.7/share/locale/sv/LC_MESSAGES/wget.mo
mkdir /usr/local/pkgs/wget-1.7/share/locale/tr
mkdir /usr/local/pkgs/wget-1.7/share/locale/tr/LC_MESSAGES
installing tr.gmo as
/usr/local/pkgs/wget-1.7/share/locale/tr/LC_MESSAGES/wget.mo
mkdir /usr/local/pkgs/wget-1.7/share/locale/zh_TW
mkdir /usr/local/pkgs/wget-1.7/share/locale/zh_TW/LC_MESSAGES
installing zh_TW.gmo as
/usr/local/pkgs/wget-1.7/share/locale/zh_TW/LC_MESSAGES/wget.mo
if test "wget" = "gettext"; then  /usr/bin/install -c -m 644
./Makefile.in.in  /usr/local/pkgs/wget-1.7/share/gettext/po/Makefile.in.in;
else  : ;  fi

Once the software is successfully built and installed, it is now just a matter of cleaning up and putting the finishing touches:

$ swdirs -d wget-1.7
$ swrecord wget-1.7
Recording information about package "wget-1.7" in .swrecord
$ swperms wget-1.7
Looking for bad (as in problematic) permissions:


If there was any output above,
        then you MOST certainly have to fix permissions by hand.
        (it is possible that this package needs to be installed as root.)

If not, then you should run the following as root:
        chown -hR 0:0 /usr/local/pkgs/wget-1.7

# chown -hR 0:0 /usr/local/pkgs/wget-1.7
# swln -vv wget-1.7
-- scanning package wget-1.7...
.s /usr/local/bin/wget: linked [wget-1.7]
-- 1 package added
#

That's all!

In summary, here is how things look like once wget has been installed with a dependency on gettext:

$ swln -T wget-1.7 -i
gettext-0.10.40
$ ldd /usr/local/pkgs/wget-1.7/bin/wget 
/usr/local/pkgs/wget-1.7/bin/wget:
	-lintl.1 => /usr/local/pkgs/wget-1.7/lib/libintl.so.1
	-lc.12 => /usr/lib/libc.so.12
$ ls -l /usr/local/pkgs/wget-1.7/lib/libintl.so.1
lrwxr-xr-x  1 root  wheel  48 Oct 29 19:43 /usr/local/pkgs/wget-1.7/lib/libintl.so.1 -> /usr/local/pkgs/gettext-0.10.40/lib/libintl.so.1
$ cat /usr/local/pkgs/gettext-0.10.40/.swrc
deplink ^include
deplink ^lib
$


© 2001-2008 - Christophe Kalt