Browse Source

Get rid of the old buildsystem

Bye, bye, old friend.
tags/devuan/2.0.1+devuan1
Julian Andres Klode 4 years ago
parent
commit
c85c4bed0a
43 changed files with 0 additions and 2732 deletions
  1. +0
    -84
      COMPILING
  2. +0
    -53
      Makefile
  3. +0
    -112
      README.make
  4. +0
    -26
      apt-inst/makefile
  5. +0
    -37
      apt-pkg/makefile
  6. +0
    -21
      apt-private/makefile
  7. +0
    -30
      buildlib/apti18n.h.in
  8. +0
    -60
      buildlib/config.h.in
  9. +0
    -62
      buildlib/configure.mak
  10. +0
    -31
      buildlib/copy.mak
  11. +0
    -185
      buildlib/defaults.mak
  12. +0
    -75
      buildlib/docbook.mak
  13. +0
    -85
      buildlib/environment.mak.in
  14. +0
    -20
      buildlib/fail.mak
  15. +0
    -250
      buildlib/install-sh
  16. +0
    -77
      buildlib/library.mak
  17. +0
    -14
      buildlib/libversion.mak
  18. +0
    -46
      buildlib/makefile.in
  19. +0
    -30
      buildlib/manpage.mak
  20. +0
    -6
      buildlib/netdb.h.in
  21. +0
    -74
      buildlib/po4a_manpage.mak
  22. +0
    -27
      buildlib/podomain.mak
  23. +0
    -60
      buildlib/program.mak
  24. +0
    -68
      buildlib/python.mak
  25. +0
    -60
      buildlib/staticlibrary.mak
  26. +0
    -13
      buildlib/statvfs.h.in
  27. +0
    -110
      buildlib/tools.m4
  28. +0
    -119
      cmdline/makefile
  29. +0
    -218
      configure.ac
  30. +0
    -37
      doc/en/makefile
  31. +0
    -11
      doc/lang.makefile
  32. +0
    -113
      doc/makefile
  33. +0
    -17
      dselect/makefile
  34. +0
    -21
      ftparchive/makefile
  35. +0
    -110
      methods/makefile
  36. +0
    -7
      po/LINGUAS
  37. +0
    -114
      po/makefile
  38. +0
    -16
      test/Makefile
  39. +0
    -10
      test/integration/makefile
  40. +0
    -53
      test/interactive-helper/makefile
  41. +0
    -84
      test/libapt/makefile
  42. +0
    -58
      vendor/makefile
  43. +0
    -28
      vendor/vendor.makefile

+ 0
- 84
COMPILING View File

@@ -1,84 +0,0 @@
General Information
~~~~~~~~~~~~~~~~~~~
To compile this you need a couple things
- A working POSIX system with working POSIX gcc, g++, make (GNU),
ar, sh, awk and sed in the path
- GNU Make 3.74 or so, -- normal UNIX make will NOT work
* Note 3.77 is broken.
- A working ANSI C++ compiler, this is not g++ 2.7.*
g++ 2.8 works OK and newer egcs work well also. Nobody has tried it
on other compilers :< You will need a properly working STL as well.
- A C library with the usual POSIX functions and a BSD socket layer.
If your OS conforms to the Single Unix Spec then you are fine:
http://www.opengroup.org/onlinepubs/7908799/index.html
- Refer to the Build-Depends information in debian/control for
additional requirements (some of which are Debian-specific)

** NOTICE **
The C++ global constructors do not link correctly when using non-shared
libraries. This is probably the correct behavior of the linker, but I have
not yet had time to devise a work around for it. The correct thing to
do is add a reference to debSystem in apt-pkg/init.cc,
assert(&debSystem == 0) would be fine for instance.

Guidelines
~~~~~~~~~~
I am not interested in making 'ultra portable code'. I will accept patches
to make the code that already exists conform more to SUS or POSIX, but
I don't really care if your not-SUS OS doesn't work. It is simply too
much work to maintain patches for dysfunctional OSs. I highly suggest you
contact your vendor and express interest in a conforming C library.

That said, there are lots of finicky problems that must be dealt with even
between the supported OS's. Primarily the path I choose to take is to put
a shim header file in build/include that transparently adds the required
functionality. Patches to make autoconf detect these cases and generate the
required shims are OK.

Current shims:
* sys/statvfs.h to convert from BSD/old-glibc statfs to SUS statvfs
* rfc2553 hostname resolution (methods/rfc*), shims to normal gethostbyname.
The more adventurous could steal the KAME IPv6 enabled resolvers for those
OS's with IPv6 support but no rfc2553 (why?)
* define _XOPEN_EXTENDED_SOURCE to bring in h_errno on HP-UX
* socklen_t shim in netdb.h if the OS does not have socklen_t
The only completely non-shimmed OS is Linux with glibc2.1, glibc2.0 requires
the first three shims.

Platform Notes
~~~~~~~~~~~~~~
Debian GNU Linux 2.1 'slink'
Debian GNU Linux 'potato'
Debian GNU Linux 'woody'
* All Archs
- Works flawlessly
- You will want to have docbook-xml and docbook2man installed to get
best results.
- No IPv6 Support in glibc's < 2.1.

Sun Solaris
SunOS cab101 5.7 Generic_106541-04 sun4u sparc
SunOS csu201 5.8 Generic_108528-04 sun4u sparc
- Works fine
- Note, no IPv6 Support, OS lacks RFC 2553 hostname resolution

OpenBSD
OpenBSD gsb086 2.5 CMPUT#0 i386 unknown
OpenBSD csu101 2.7 CMPUT#1 i386 unknown
- OS needs 'ranlib' to generate the symbol table after 'ar'.. (not using
GNU ar with the gnu tool chain :<)
- '2.5' does not have RFC 2553 hostname resolution, but '2.7' does
- Testing on '2.7' suggests the OS has a bug in its handling of
ftruncate on files that have been written via mmap. It fills the page
that crosses the truncation boundary with 0's.
HP-UX
HP-UX nyquist B.10.20 C 9000/780 2016574337 32-user license
- Evil OS, does not conform very well to SUS
1) snprintf exists but is not prototyped, ignore spurious warnings
2) No socklen_t
3) Requires -D_XOPEN_SOURCE_EXTENDED for h_errno
configure should fix the last two (see above)
- Note, no IPv6 Support, OS lacks RFC 2553 hostname resolution

+ 0
- 53
Makefile View File

@@ -1,53 +0,0 @@
# -*- make -*-

# This is the top level make file for APT, it recurses to each lower
# level make file and runs it with the proper target
ifndef NOISY
.SILENT:
endif

.PHONY: default
default: startup all

.PHONY: fast headers library clean veryclean all binary program doc test update-po
all headers library clean veryclean binary program doc manpages docbook test update-po startup dirs:
$(MAKE) -C vendor $@
$(MAKE) -C apt-pkg $@
$(MAKE) -C apt-inst $@
$(MAKE) -C apt-private $@
$(MAKE) -C methods $@
$(MAKE) -C cmdline $@
$(MAKE) -C ftparchive $@
$(MAKE) -C dselect $@
$(MAKE) -C doc $@
$(MAKE) -C po $@
# FIXME: -C test has issue swith parallel builds, investigate!
-$(MAKE) -C test $@

fast:
$(MAKE) -C vendor all
$(MAKE) -C apt-pkg all
$(MAKE) -C apt-inst all
$(MAKE) -C apt-private all
$(MAKE) -C methods all
$(MAKE) -C cmdline all
$(MAKE) -C ftparchive all
$(MAKE) -C test all

all headers library clean veryclean binary program doc manpages docbook test update-po: startup dirs

dirs: startup

# Some very common aliases
.PHONY: maintainer-clean dist-clean distclean pristine sanity
maintainer-clean dist-clean distclean pristine sanity: veryclean
veryclean: clean

# The startup target builds the necessary configure scripts. It should
# be used after a CVS checkout.
CONVERTED=environment.mak include/config.h include/apti18n.h build/doc/Doxyfile makefile
include buildlib/configure.mak
$(BUILDDIR)/include/config.h: buildlib/config.h.in
$(BUILDDIR)/include/apti18n.h: buildlib/apti18n.h.in
$(BUILDDIR)/environment.mak: buildlib/environment.mak.in
$(BUILDDIR)/makefile: buildlib/makefile.in

+ 0
- 112
README.make View File

@@ -1,112 +0,0 @@
The Make System
~~~ ~~~~ ~~~~~~
To compile this program you require GNU Make. In fact you probably need
GNU Make 3.76.1 or newer. The makefiles contained make use of many
GNU Make specific features and will not run on other makes.

The make system has a number of interesting properties that are not found
in other systems such as automake or the GNU makefile standards. In
general some semblance of expectedness is kept so as not to be too
surprising. Basically the following will work as expected:

./configure
make
or
cd build
../configure
make

There are a number of other things that are possible that may make software
development and software packaging simpler. The first of these is the
environment.mak file. When configure is run it creates an environment.mak
file in the build directory. This contains -all- configurable parameters
for all of the make files in all of the subdirectories. Changing one
of these parameters will have an immediate effect. The use of makefile.in
and configure substitutions across build makefiles is not used at all.

Furthermore, the make system runs with a current directory equal to the
source directory regardless of the destination directory. This means
#include "" and #include <> work as expected and more importantly
running 'make' in the source directory will work as expected. The
environment variable or make parameter 'BUILD' sets the build directory.
It may be an absolute path or a path relative to the top level directory.
By default build-arch/ then build/ will be used with a fall back to ./ This
means you can get all the advantages of a build directory without having to
cd into it to edit your source code!

The make system also performs dependency generation on the fly as the
compiler runs. This is extremely fast and accurate. There is however
one failure condition that occurs when a header file is erased. In
this case you should run make clean to purge the .o and .d files to
rebuild.

The final significant deviation from normal make practices is
in how the build directory is managed. It is not nearly a mirror of
the source directory but is logically divided in the following manner
bin/
methods/
doc/
examples/
include/
apt-pkg/
obj/
apt-pkg/
cmdline/
[...]
Only .o and .d files are placed in the obj/ subdirectory. The final compiled
binaries are placed in bin, published headers for inter-component linking
are placed in include/ and documentation is generated into doc/. This means
all runnable programs are within the bin/ directory, a huge benefit for
debugging inter-program relationships. The .so files are also placed in
bin/ for simplicity.

By default make is put into silent mode. During operation there should be
no shell or compiler messages only status messages from the makefiles,
if any pop up that indicates there may be a problem with your environment.
For debugging you can disable this by setting NOISY=1, ala
make NOISY=1

Using the makefiles
~~~~~ ~~~ ~~~~~~~~~
The makefiles for the components are really simple. The complexity is hidden
within the buildlib/ directory. Each makefile defines a set of make variables
for the bit it is going to make then includes a makefile fragment from
the buildlib/. This fragment generates the necessary rules based on the
originally defined variables. This process can be repeated as many times as
necessary for as many programs or libraries as are in the directory.

Many of the make fragments have some useful properties involving sub
directories and other interesting features. They are more completely
described in the fragment code in buildlib. Some tips on writing fragments
are included in buildlib/defaults.mak

The fragments are NEVER processed by configure, so if you make changes to
them they will have an immediate effect.

Autoconf
~~~~~~~~
Straight out of CVS you have to initialize autoconf. This requires
automake (I really don't know why) and autoconf and requires doing
aclocal -I buildlib
autoconf
[Alternatively you can run make startup in the top level build dir]

Autoconf is configured to do some basic system probes for optional and
required functionality and generate an environment.mak and include/config.h
from it's findings. It will then write a 'makefile' and run make dirs to
create the output directory tree.

It is not my belief that autoconf should be used to generate substantial
source code markup to escape OS problems. If an OS problem does crop up
it can likely be corrected by installing the correct files into the
build include/ dir and perhaps writing some replacement code and
linking it in. To the fullest extent possible the source code should conform
to standards and not cater to broken systems.

Autoconf will also write a makefile into the top level of the build dir,
this simply acts as a wrapper to the main top level make in the source tree.
There is one big warning, you can't use both this make file and the
ones in the top level tree. Make is not able to resolve rules that
go to the same file through different paths and this will confuse the
depends mechanism. I recommend always using the makefiles in the
source directory and exporting BUILD.

+ 0
- 26
apt-inst/makefile View File

@@ -1,26 +0,0 @@
# -*- make -*-
BASE=..
SUBDIR=apt-inst

# Header location
SUBDIRS = contrib deb
HEADER_TARGETDIRS = apt-pkg

# Bring in the default rules
include ../buildlib/defaults.mak

# The library name and version (indirectly used from init.h)
include ../buildlib/libversion.mak

# The library name
LIBRARY=apt-inst
MAJOR=2.0
MINOR=0
SLIBS=$(PTHREADLIB) -lapt-pkg
APT_DOMAIN:=libapt-inst$(MAJOR)
LIBRARYDEPENDS=$(LIB)/libapt-pkg.so

SOURCE = $(sort $(wildcard *.cc */*.cc))
HEADERS = $(addprefix apt-pkg/,$(notdir $(sort $(wildcard *.h */*.h))))

include $(LIBRARY_H)

+ 0
- 37
apt-pkg/makefile View File

@@ -1,37 +0,0 @@
# -*- make -*-
BASE=..
SUBDIR=apt-pkg

# Header location
SUBDIRS = deb edsp contrib
HEADER_TARGETDIRS = apt-pkg

# Bring in the default rules
include ../buildlib/defaults.mak

# The library name and version (indirectly used from init.h)
include ../buildlib/libversion.mak

CPPFLAGS+=-DAPT_PKG_EXPOSE_STRING_VIEW
LIBRARY=apt-pkg
MAJOR=$(LIBAPTPKG_MAJOR)
MINOR=$(LIBAPTPKG_RELEASE)
SLIBS=$(PTHREADLIB) $(INTLLIBS) -lutil -ldl -lresolv
ifeq ($(HAVE_ZLIB),yes)
SLIBS+= -lz
endif
ifeq ($(HAVE_BZ2),yes)
SLIBS+= -lbz2
endif
ifeq ($(HAVE_LZMA),yes)
SLIBS+= -llzma
endif
ifeq ($(HAVE_LZ4),yes)
SLIBS+= -llz4
endif
APT_DOMAIN:=libapt-pkg$(LIBAPTPKG_MAJOR)

SOURCE = $(sort $(wildcard *.cc */*.cc))
HEADERS = $(addprefix apt-pkg/,$(notdir $(sort $(wildcard *.h */*.h))))

include $(LIBRARY_H)

+ 0
- 21
apt-private/makefile View File

@@ -1,21 +0,0 @@
# -*- make -*-
BASE=..
SUBDIR=apt-private

# Header location
HEADER_TARGETDIRS = apt-private

# Bring in the default rules
include ../buildlib/defaults.mak

# The library name
LIBRARY=apt-private
MAJOR=0.0
MINOR=0
SLIBS=$(PTHREADLIB) -lapt-pkg
CXXFLAGS += -fvisibility=hidden -fvisibility-inlines-hidden

SOURCE = $(sort $(wildcard *.cc))
HEADERS = $(addprefix apt-private/,$(sort $(wildcard *.h)))

include $(LIBRARY_H)

+ 0
- 30
buildlib/apti18n.h.in View File

@@ -1,30 +0,0 @@
// -*- mode: cpp; mode: fold -*-
// $Id: apti18n.h.in,v 1.6 2003/01/11 07:18:18 jgg Exp $
/* Internationalization macros for apt. This header should be included last
in each C file. */

// Set by autoconf
#undef USE_NLS

#ifdef USE_NLS
// apt will use the gettext implementation of the C library
#include <libintl.h>
#include <locale.h>
# ifdef APT_DOMAIN
# define _(x) dgettext(APT_DOMAIN,x)
# define P_(msg,plural,n) dngettext(APT_DOMAIN,msg,plural,n)
# else
# define _(x) gettext(x)
# define P_(msg,plural,n) ngettext(msg,plural,n)
# endif
# define N_(x) x
#else
// apt will not use any gettext
# define setlocale(a, b)
# define textdomain(a)
# define bindtextdomain(a, b)
# define _(x) x
# define P_(msg,plural,n) (n == 1 ? msg : plural)
# define N_(x) x
# define dgettext(d, m) m
#endif

+ 0
- 60
buildlib/config.h.in View File

@@ -1,60 +0,0 @@
/* Define if your processor stores words with the most significant
byte first (like Motorola and SPARC, unlike Intel and VAX). */
#undef WORDS_BIGENDIAN

/* Define if we have the timegm() function */
#undef HAVE_TIMEGM

/* Define if we have the zlib library for gzip */
#undef HAVE_ZLIB

/* Define if we have the bz2 library for bzip2 */
#undef HAVE_BZ2

/* Define if we have the lzma library for lzma/xz */
#undef HAVE_LZMA

/* Define if we have the lz4 library for lz4 */
#undef HAVE_LZ4

/* These two are used by the statvfs shim for glibc2.0 and bsd */
/* Define if we have sys/vfs.h */
#undef HAVE_VFS_H
#undef HAVE_STRUCT_STATFS_F_TYPE

/* Define if we have sys/mount.h */
#undef HAVE_MOUNT_H

/* Define if we have enabled pthread support */
#undef HAVE_PTHREAD

/* If there is no socklen_t, define this for the netdb shim */
#undef NEED_SOCKLEN_T_DEFINE

/* Check for getresuid() function and similar ones */
#undef HAVE_GETRESUID
#undef HAVE_GETRESGID
#undef HAVE_SETRESUID
#undef HAVE_SETRESGID

/* Define to the size of the filesize containing structures */
#undef _FILE_OFFSET_BITS

/* Define the arch name string */
#undef COMMON_ARCH

/* The package name string */
#undef PACKAGE

/* The version number string */
#undef PACKAGE_VERSION

/* The mail address to reach upstream */
#undef PACKAGE_MAIL

#define APT_8_CLEANER_HEADERS
#define APT_9_CLEANER_HEADERS
#define APT_10_CLEANER_HEADERS

/* unrolling is faster combined with an optimizing compiler */
#define SHA2_UNROLL_TRANSFORM

+ 0
- 62
buildlib/configure.mak View File

@@ -1,62 +0,0 @@
# -*- make -*-

# This make fragment is included by the toplevel make to handle configure
# and setup. It defines a target called startup that when run will init
# the build directory, generate configure from configure.ac, create aclocal
# and has rules to run config.status should one of the .in files change.

# Input
# BUILDDIR - The build directory
# CONVERTED - List of files output by configure $(BUILD) is prepended
# The caller must provide depends for these files
# It would be a fairly good idea to run this after a cvs checkout.
BUILDDIR=build

.PHONY: startup missing-config-files
startup: $(BUILDDIR)/configure-stamp $(addprefix $(BUILDDIR)/,$(CONVERTED))

# use the files provided from the system instead of carry around
# and use (most of the time outdated) copycats
ifeq (file-okay,$(shell test -r buildlib/config.sub && echo 'file-okay'))
buildlib/config.sub:
else
ifeq (file-okay,$(shell test -r /usr/share/misc/config.sub && echo 'file-okay'))
buildlib/config.sub:
ln -sf /usr/share/misc/config.sub buildlib/config.sub
else
buildlib/config.sub: missing-config-files
endif
endif

ifeq (file-okay,$(shell test -r buildlib/config.guess && echo 'file-okay'))
buildlib/config.guess:
else
ifeq (file-okay,$(shell test -r /usr/share/misc/config.guess && echo 'file-okay'))
buildlib/config.guess:
ln -sf /usr/share/misc/config.guess buildlib/config.guess
else
buildlib/config.guess: missing-config-files
endif
endif

missing-config-files:
@echo "APT needs 'config.guess' and 'config.sub' in buildlib/ for configuration."
@echo "On Debian systems these are available in the 'autotools-dev' package."
@echo
@echo "The latest versions can be acquired from the upstream git repository:"
@echo "http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD"
@echo "http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD"
exit 100

configure: aclocal.m4 configure.ac
autoconf

aclocal.m4: $(wildcard buildlib/*.m4)
aclocal -I buildlib

$(BUILDDIR)/configure-stamp: configure buildlib/config.guess buildlib/config.sub
/usr/bin/test -e '$(BUILDDIR)' || mkdir '$(BUILDDIR)'
(HERE="`pwd`"; cd '$(BUILDDIR)' && "$$HERE/configure")
touch '$(BUILDDIR)/configure-stamp'

$(addprefix $(BUILDDIR)/,$(CONVERTED)): $(BUILDDIR)/configure-stamp

+ 0
- 31
buildlib/copy.mak View File

@@ -1,31 +0,0 @@
# -*- make -*-

# This installs arbitrary files into a directory

# Input
# $(SOURCE) - The documents to use
# $(TO) - The directory to put them in
# $(TARGET) - The global target to add the local target as a dependency
# to.
# All output is writtin to files in the build/$(TO) directory

# See defaults.mak for information about LOCAL

# Some local definitions
LOCAL := copy-$(firstword $(SOURCE))
$(LOCAL)-LIST := $(addprefix $(TO)/,$(SOURCE))

# Install generation hooks
$(TARGET): $($(LOCAL)-LIST)
veryclean: veryclean/$(LOCAL)

MKDIRS += $(dir $($(LOCAL)-LIST))

$($(LOCAL)-LIST) : $(TO)/% : %
echo Installing $< to $(@D)
cp $< $(@D)

# Clean rule
.PHONY: veryclean/$(LOCAL)
veryclean/$(LOCAL):
-rm -rf $($(@F)-LIST)

+ 0
- 185
buildlib/defaults.mak View File

@@ -1,185 +0,0 @@
# -*- make -*-

# This file configures the default environment for the make system
# The way it works is fairly simple, each module is defined in it's
# own *.mak file. It expects a set of variables to be set to values
# for it to operate as expected. When included the module generates
# the requested rules based on the contents of its control variables.

# This works out very well and allows a good degree of flexibility.
# To accommodate some of the features we introduce the concept of
# local variables. To do this we use the 'Computed Names' feature of
# gmake. Each module declares a LOCAL scope and access it with,
# $($(LOCAL)-VAR)
# This works very well but it is important to remember that within
# a rule the LOCAL var is unavailable, it will have to be constructed
# from the information in the rule invocation. For stock rules like
# clean this is simple, we use a local clean rule called clean/$(LOCAL)
# and then within the rule $(@F) gets back $(LOCAL)! Other rules will
# have to use some other mechanism (filter perhaps?) The reason such
# lengths are used is so that each directory can contain several 'instances'
# of any given module. I notice that the very latest gmake has the concept
# of local variables for rules. It is possible this feature in conjunction
# with the generated names will provide a very powerful solution indeed!

# A build directory is used by default, all generated items get put into
# there. However unlike automake this is not done with a VPATH build
# (vpath builds break the distinction between #include "" and #include <>)
# but by explicitly setting the BUILD variable. Make is invoked from
# within the source itself which is much more compatible with compilation
# environments.
ifndef NOISY
.SILENT:
endif

# Search for the build directory
ifdef BUILD
BUILD_POSSIBLE := $(BUILD) $(BASE)/$(BUILD)
else
BUILD_POSSIBLE := $(BASE) $(BASE)/build-$(shell uname -m) $(BASE)/build
endif

BUILDX:= $(foreach i,$(BUILD_POSSIBLE),$(wildcard $(i)/environment.mak*))

ifeq ($(words $(BUILDX)),0)

# Check for a busted wildcard function. We use this function in several
# places, it must work.
ifeq ($(words $(wildcard *)),0)
error-all/environment.mak:
echo You have a broken version of GNU Make - upgrade.
error-out-and-die
else
error-all/environment.mak:
echo Can not find the build directory in $(BUILD_POSSIBLE) -- use BUILD=
error-out-and-die
endif

# Force include below to come to the error target
BUILDX := error-all
else
BUILDX:= $(patsubst %/,%,$(firstword $(dir $(BUILDX))))
endif

override BUILD := $(BUILDX)

# Base definitions
INCLUDE := $(BUILD)/include
BIN := $(BUILD)/bin
LIB := $(BIN)
OBJ := $(BUILD)/obj/$(SUBDIR)
DEP := $(OBJ)
DOC := $(BUILD)/docs
PO := $(BUILD)/po
LOCALE := $(BUILD)/locale
PO_DOMAINS := $(BUILD)/po/domains

# Module types
LIBRARY_H = $(BASE)/buildlib/library.mak
DOCBOOK_H = $(BASE)/buildlib/docbook.mak
MANPAGE_H = $(BASE)/buildlib/manpage.mak
PROGRAM_H = $(BASE)/buildlib/program.mak
PYTHON_H = $(BASE)/buildlib/python.mak
COPY_H = $(BASE)/buildlib/copy.mak
PO4A_MANPAGE_H = $(BASE)/buildlib/po4a_manpage.mak
FAIL_H = $(BASE)/buildlib/fail.mak
PODOMAIN_H = $(BASE)/buildlib/podomain.mak

include $(BUILD)/environment.mak

ifdef STATICLIBS
LIBRARY_H += $(BASE)/buildlib/staticlibrary.mak
endif

ifdef ONLYSTATICLIBS
LIBRARY_H = $(BASE)/buildlib/staticlibrary.mak
endif

# Source location control
# SUBDIRS specifies sub components of the module that
# may be located in subdirectories of the source dir.
# This should be declared before including this file
SUBDIRS+=

# Header file control.
# TARGETDIRS indicates all of the locations that public headers
# will be published to.
# This should be declared before including this file
HEADER_TARGETDIRS+=

# Options
CPPFLAGS+= -I$(INCLUDE)
LDFLAGS+= -L$(LIB)

# Directors to create
MKDIRS := $(BIN)

# Phony rules. Other things hook these by appending to the dependency
# list
.PHONY: headers library clean veryclean all binary program doc dirs
.PHONY: maintainer-clean dist-clean distclean pristine sanity
all: dirs binary doc
binary: library program
maintainer-clean dist-clean distclean pristine sanity: veryclean
startup headers library clean veryclean program test update-po manpages docbook:

veryclean:
echo Very Clean done for $(SUBDIR)
clean:
echo Clean done for $(SUBDIR)
dirs:
mkdir -p $(patsubst %/,%,$(sort $(MKDIRS)))

# Header file control. We want all published interface headers to go
# into the build directory from their source dirs. We setup some
# search paths here
vpath %.h $(SUBDIRS)
$(INCLUDE)/%.h $(addprefix $(INCLUDE)/,$(addsuffix /%.h,$(HEADER_TARGETDIRS))) : %.h
cp $< $@

# Dependency generation. We want to generate a .d file using gnu cpp.
# For GNU systems the compiler can spit out a .d file while it is compiling,
# this is specified with the INLINEDEPFLAG. Other systems might have a
# makedep program that can be called after compiling, that's illustrated
# by the DEPFLAG case.
# Compile rules are expected to call this macro after calling the compiler
ifdef GCC3DEP
DFILE = $(DEP)/$(basename $(@F)).d
else
DFILE = $(basename $(@F)).d
endif
ifdef INLINEDEPFLAG
define DoDep
sed -e "1s/.*:/$(subst /,\\/,$@):/" $(DFILE) > $(DEP)/$(@F).d
#sed -e "1s/.*:/$(subst /,\\/,$@):/" $(DEP)/$(basename $(@F)).d > $(DEP)/$(@F).d
-rm -f $(basename $(@F)).d
endef
else
ifdef DEPFLAG
define DoDep
$(CXX) $(DEPFLAG) $(CPPFLAGS) -o $@ $<
sed -e "1s/.*:/$(subst /,\\/,$@):/" $(basename $(@F)).d > $(DEP)/$(@F).d
-rm -f $(basename $(@F)).d
endef
else
define DoDep
endef
endif
endif

# Automatic -j support
ifeq ($(NUM_PROCS),1)
PARALLEL_RUN=no
endif

ifndef PARALLEL_RUN
PARALLEL_RUN=yes
export PARALLEL_RUN
# handle recursion
ifneq ($(NUM_PROCS),)
MAKEFLAGS += -j $(NUM_PROCS)
endif
endif

# This makes sorting predictable
export LC_COLLATE=C.UTF-8

+ 0
- 75
buildlib/docbook.mak View File

@@ -1,75 +0,0 @@
# -*- make -*-

# This processes DocBook XML to produce html and plain text output

# Input
# $(SOURCE) - The documents to use

# All output is written to files in the build doc directory

# See defaults.mak for information about LOCAL

# Some local definitions
LOCAL := docbook-$(firstword $(SOURCE))
$(LOCAL)-HTML := $(addsuffix .html,$(addprefix $(DOC)/,$(basename $(SOURCE))))
$(LOCAL)-TEXT := $(addsuffix .text,$(addprefix $(DOC)/,$(basename $(SOURCE))))
INCLUDES = apt.ent apt-verbatim.ent apt-vendor.ent

docbook:


#---------

# Rules to build HTML documentations
ifdef XSLTPROC

DOCBOOK_HTML_STYLESHEET := docbook-html-style.xsl

# Install generation hooks
docbook: $($(LOCAL)-HTML)
veryclean: veryclean/html/$(LOCAL)

vpath %.dbk $(SUBDIRS)
vpath $(DOCBOOK_HTML_STYLESHEET) $(SUBDIRS)
$(DOC)/%.html: %.dbk $(DOCBOOK_HTML_STYLESHEET) $(INCLUDES)
echo Creating html for $< to $@
-rm -rf $@
mkdir -p $@
$(DOCBOOK) \
--stringparam base.dir $@/ \
--stringparam l10n.gentext.default.language $(LC) \
$(<D)/$(DOCBOOK_HTML_STYLESHEET) $< || exit 199

# Clean rule
.PHONY: veryclean/html/$(LOCAL)
veryclean/html/$(LOCAL):
-rm -rf $($(@F)-HTML)

endif

#---------

# Rules to build Text documentations
ifdef XSLTPROC

DOCBOOK_TEXT_STYLESHEET := docbook-text-style.xsl

# Install generation hooks
docbook: $($(LOCAL)-TEXT)
veryclean: veryclean/text/$(LOCAL)

vpath %.dbk $(SUBDIRS)
vpath $(DOCBOOK_TEXT_STYLESHEET) $(SUBDIRS)
$(DOC)/%.text: %.dbk $(DOCBOOK_TEXT_STYLESHEET) $(INCLUDES)
echo Creating text for $< to $@
$(DOCBOOK) \
--stringparam l10n.gentext.default.language $(LC) \
$(<D)/$(DOCBOOK_TEXT_STYLESHEET) $< | \
LC_ALL=C.UTF-8 $(DOCBOOK2TEXT) > $@ || exit 198

# Clean rule
.PHONY: veryclean/text/$(LOCAL)
veryclean/text/$(LOCAL):
-rm -rf $($(@F)-TEXT)

endif

+ 0
- 85
buildlib/environment.mak.in View File

@@ -1,85 +0,0 @@
# This file contains everything that autoconf guessed for your system.
# if you want you can edit it, just don't re-run configure.

PACKAGE = @PACKAGE@
PACKAGE_VERSION = @PACKAGE_VERSION@
PACKAGE_MAIL = @PACKAGE_MAIL@

# C++ compiler options
CC = @CC@
CPPFLAGS+= @CPPFLAGS@ @DEFS@ -D_REENTRANT -D_FORTIFY_SOURCE=2
CXX = @CXX@
CXXSTD = -std=c++11
CXXFLAGS+= @CXXFLAGS@ -Wall -Wextra
CXXFLAGS+= -Wcast-align -Wlogical-op -Wredundant-decls -Wmissing-declarations -Wunsafe-loop-optimizations
CXXFLAGS+= -Wctor-dtor-privacy -Wdisabled-optimization -Winit-self -Wmissing-include-dirs -Wnoexcept -Wsign-promo -Wundef
# suggests methods which already have such an attribute
#CXXFLAGS+= -Wsuggest-attribute=pure -Wsuggest-attribute=const -Wsuggest-attribute=noreturn
# sanitize options to be enabled for testing
#CXXFLAGS+= -fsanitize=address -fsanitize=undefined -fno-sanitize=vptr
# a bit too pedantic to be run by default
#CXXFLAGS+= -Wpedantic -Wno-long-long -Wno-vla -Wno-variadic-macros
# hide inlines
CXXFLAGS+= -fvisibility-inlines-hidden
NUM_PROCS = @NUM_PROCS@

# Linker stuff
PICFLAGS+= -fPIC -DPIC
LFLAGS+= @LDFLAGS@
LEFLAGS+=
SOCKETLIBS:= @SOCKETLIBS@
AR:=@AR@
RANLIB:=@RANLIB@

# Dep generation - this only works for gnu stuff
GCC3DEP = @GCC3DEP@
INLINEDEPFLAG = -MD

DOXYGEN = @DOXYGEN@
W3M = @W3M@

# xsltproc for the man pages and documentation
XSLTPROC := @XSLTPROC@

# DocBook XML
DOCBOOK = $(XSLTPROC) --nonet --novalid --xinclude
DOCBOOK2TEXT = $(W3M) -o display_charset=UTF-8 -no-graph -T text/html \
-cols 78 -dump

# po4a for the man pages
PO4A := @PO4A@

# Gettext settings
GMSGFMT = @GMSGFMT@
XGETTEXT = @XGETTEXT@
MSGCOMM:=$(dir $(XGETTEXT))/msgcomm
MSGMERGE:=$(dir $(XGETTEXT))/msgmerge
BASH = @BASH@

# Various library checks
PTHREADLIB = @PTHREADLIB@
PYTHONLIB = @PYTHONLIB@
PYTHONVER = @PYTHONVER@
PYTHONPREFIX = @PYTHONPREFIX@
PYTHONEXECPREFIX = @PYTHONEXECPREFIX@
PYTHONINCLUDE = @PYTHONINCLUDE@
BDBLIB = @BDBLIB@
INTLLIBS = @INTLLIBS@

# Shim Headerfile control
HAVE_STATVFS = @HAVE_STATVFS@
HAVE_ZLIB = @HAVE_ZLIB@
HAVE_BZ2 = @HAVE_BZ2@
HAVE_LZMA = @HAVE_LZMA@
HAVE_LZ4 = @HAVE_LZ4@
NEED_SOCKLEN_T_DEFINE = @NEED_SOCKLEN_T_DEFINE@

# Shared library things
HOST_OS = @host_os@
ifneq ($(words $(filter gnu% linux-gnu% kfreebsd-gnu% %-gnu,$(HOST_OS))),0)
SONAME_MAGIC=-Wl,-soname -Wl,
LFLAGS_SO=
else
# Do not know how to create shared libraries here.
ONLYSTATICLIBS = yes
endif

+ 0
- 20
buildlib/fail.mak View File

@@ -1,20 +0,0 @@
# -*- make -*-

# This prints a failure message but does not abort the make

# Input
# $(MESSAGE) - The message to show
# $(PROGRAM) - The program/library/whatever.

# See defaults.mak for information about LOCAL

LOCAL := $(PROGRAM)
$(LOCAL)-MSG := $(MESSAGE)

# Install hooks
program: $(PROGRAM)

.PHONY: $(PROGRAM)
$(PROGRAM) :
echo $($@-MSG)

+ 0
- 250
buildlib/install-sh View File

@@ -1,250 +0,0 @@
#! /bin/sh
#
# install - install a program, script, or datafile
# This comes from X11R5 (mit/util/scripts/install.sh).
#
# Copyright 1991 by the Massachusetts Institute of Technology
#
# Permission to use, copy, modify, distribute, and sell this software and its
# documentation for any purpose is hereby granted without fee, provided that
# the above copyright notice appear in all copies and that both that
# copyright notice and this permission notice appear in supporting
# documentation, and that the name of M.I.T. not be used in advertising or
# publicity pertaining to distribution of the software without specific,
# written prior permission. M.I.T. makes no representations about the
# suitability of this software for any purpose. It is provided "as is"
# without express or implied warranty.
#
# Calling this script install-sh is preferred over install.sh, to prevent
# `make' implicit rules from creating a file called install from it
# when there is no Makefile.
#
# This script is compatible with the BSD install script, but was written
# from scratch. It can only install one file at a time, a restriction
# shared with many OS's install programs.


# set DOITPROG to echo to test this script

# Don't use :- since 4.3BSD and earlier shells don't like it.
doit="${DOITPROG-}"


# put in absolute paths if you don't have them in your path; or use env. vars.

mvprog="${MVPROG-mv}"
cpprog="${CPPROG-cp}"
chmodprog="${CHMODPROG-chmod}"
chownprog="${CHOWNPROG-chown}"
chgrpprog="${CHGRPPROG-chgrp}"
stripprog="${STRIPPROG-strip}"
rmprog="${RMPROG-rm}"
mkdirprog="${MKDIRPROG-mkdir}"

transformbasename=""
transform_arg=""
instcmd="$mvprog"
chmodcmd="$chmodprog 0755"
chowncmd=""
chgrpcmd=""
stripcmd=""
rmcmd="$rmprog -f"
mvcmd="$mvprog"
src=""
dst=""
dir_arg=""

while [ x"$1" != x ]; do
case $1 in
-c) instcmd="$cpprog"
shift
continue;;

-d) dir_arg=true
shift
continue;;

-m) chmodcmd="$chmodprog $2"
shift
shift
continue;;

-o) chowncmd="$chownprog $2"
shift
shift
continue;;

-g) chgrpcmd="$chgrpprog $2"
shift
shift
continue;;

-s) stripcmd="$stripprog"
shift
continue;;

-t=*) transformarg=`echo $1 | sed 's/-t=//'`
shift
continue;;

-b=*) transformbasename=`echo $1 | sed 's/-b=//'`
shift
continue;;

*) if [ x"$src" = x ]
then
src=$1
else
# this colon is to work around a 386BSD /bin/sh bug
:
dst=$1
fi
shift
continue;;
esac
done

if [ x"$src" = x ]
then
echo "install: no input file specified"
exit 1
else
true
fi

if [ x"$dir_arg" != x ]; then
dst=$src
src=""
if [ -d $dst ]; then
instcmd=:
else
instcmd=mkdir
fi
else

# Waiting for this to be detected by the "$instcmd $src $dsttmp" command
# might cause directories to be created, which would be especially bad
# if $src (and thus $dsttmp) contains '*'.

if [ -f $src -o -d $src ]
then
true
else
echo "install: $src does not exist"
exit 1
fi
if [ x"$dst" = x ]
then
echo "install: no destination specified"
exit 1
else
true
fi

# If destination is a directory, append the input filename; if your system
# does not like double slashes in filenames, you may need to add some logic

if [ -d $dst ]
then
dst="$dst"/`basename $src`
else
true
fi
fi

## this sed command emulates the dirname command
dstdir=`echo $dst | sed -e 's,[^/]*$,,;s,/$,,;s,^$,.,'`

# Make sure that the destination directory exists.
# this part is taken from Noah Friedman's mkinstalldirs script

# Skip lots of stat calls in the usual case.
if [ ! -d "$dstdir" ]; then
defaultIFS='
'
IFS="${IFS-${defaultIFS}}"

oIFS="${IFS}"
# Some sh's can't handle IFS=/ for some reason.
IFS='%'
set - `echo ${dstdir} | sed -e 's@/@%@g' -e 's@^%@/@'`
IFS="${oIFS}"

pathcomp=''

while [ $# -ne 0 ] ; do
pathcomp="${pathcomp}${1}"
shift

if [ ! -d "${pathcomp}" ] ;
then
$mkdirprog "${pathcomp}"
else
true
fi

pathcomp="${pathcomp}/"
done
fi

if [ x"$dir_arg" != x ]
then
$doit $instcmd $dst &&

if [ x"$chowncmd" != x ]; then $doit $chowncmd $dst; else true ; fi &&
if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dst; else true ; fi &&
if [ x"$stripcmd" != x ]; then $doit $stripcmd $dst; else true ; fi &&
if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dst; else true ; fi
else

# If we're going to rename the final executable, determine the name now.

if [ x"$transformarg" = x ]
then
dstfile=`basename $dst`
else
dstfile=`basename $dst $transformbasename |
sed $transformarg`$transformbasename
fi

# don't allow the sed command to completely eliminate the filename

if [ x"$dstfile" = x ]
then
dstfile=`basename $dst`
else
true
fi

# Make a temp file name in the proper directory.

dsttmp=$dstdir/#inst.$$#

# Move or copy the file name to the temp name

$doit $instcmd $src $dsttmp &&

trap "rm -f ${dsttmp}" 0 &&

# and set any options; do chmod last to preserve setuid bits

# If any of these fail, we abort the whole thing. If we want to
# ignore errors from any of these, just make sure not to ignore
# errors from the above "$doit $instcmd $src $dsttmp" command.

if [ x"$chowncmd" != x ]; then $doit $chowncmd $dsttmp; else true;fi &&
if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dsttmp; else true;fi &&
if [ x"$stripcmd" != x ]; then $doit $stripcmd $dsttmp; else true;fi &&
if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dsttmp; else true;fi &&

# Now rename the file to the real destination.

$doit $rmcmd -f $dstdir/$dstfile &&
$doit $mvcmd $dsttmp $dstdir/$dstfile

fi &&


exit 0

+ 0
- 77
buildlib/library.mak View File

@@ -1,77 +0,0 @@
# -*- make -*-

# This creates a shared library.

# Input
# $(SOURCE) - The source code to use
# $(HEADERS) - Exported header files and private header files
# $(LIBRARY) - The name of the library without lib or .so
# $(MAJOR) - The major version number of this library
# $(MINOR) - The minor version number of this library
# $(APT_DOMAIN) - The text domain for this library

# All output is writtin to .opic files in the build directory to
# signify the PIC output.

# See defaults.mak for information about LOCAL

# Some local definitions
LOCAL := lib$(LIBRARY).so.$(MAJOR).$(MINOR)
$(LOCAL)-OBJS := $(addprefix $(OBJ)/,$(addsuffix .opic,$(notdir $(basename $(SOURCE)))))
$(LOCAL)-DEP := $(addprefix $(DEP)/,$(addsuffix .opic.d,$(notdir $(basename $(SOURCE)))))
$(LOCAL)-HEADERS := $(addprefix $(INCLUDE)/,$(HEADERS))
$(LOCAL)-SONAME := lib$(LIBRARY).so.$(MAJOR)
$(LOCAL)-VERSIONSCRIPT := $(LIB)/lib$(LIBRARY)-$(MAJOR)-$(MINOR).symver
$(LOCAL)-SLIBS := $(SLIBS)
$(LOCAL)-LIBRARY := $(LIBRARY)

TYPE = src
include $(PODOMAIN_H)

# Install the command hooks
headers: $($(LOCAL)-HEADERS)
library: $(LIB)/lib$(LIBRARY).so $(LIB)/lib$(LIBRARY).so.$(MAJOR)
clean: clean/$(LOCAL)
veryclean: veryclean/$(LOCAL)

# Make Directories
MKDIRS += $(OBJ) $(DEP) $(LIB) $(dir $($(LOCAL)-HEADERS))

# The clean rules
.PHONY: clean/$(LOCAL) veryclean/$(LOCAL)
clean/$(LOCAL):
-rm -f $($(@F)-OBJS) $($(@F)-DEP) $($(@F)-VERSIONSCRIPT)
veryclean/$(LOCAL): clean/$(LOCAL)
-rm -f $($(@F)-HEADERS) $(LIB)/lib$($(@F)-LIBRARY)*.so*

# Build rules for the two symlinks
.PHONY: $(LIB)/lib$(LIBRARY).so.$(MAJOR) $(LIB)/lib$(LIBRARY).so
$(LIB)/lib$(LIBRARY).so.$(MAJOR): $(LIB)/lib$(LIBRARY).so.$(MAJOR).$(MINOR)
ln -sf $(<F) $@
$(LIB)/lib$(LIBRARY).so: $(LIB)/lib$(LIBRARY).so.$(MAJOR).$(MINOR)
ln -sf $(<F) $@

$($(LOCAL)-VERSIONSCRIPT):
echo '$(shell echo '$(LIBRARY)' | tr -d '-' | tr 'a-z' 'A-Z')_$(MAJOR) { global: *; };' > $@

# The binary build rule
$(LIB)/lib$(LIBRARY).so.$(MAJOR).$(MINOR): $($(LOCAL)-HEADERS) $($(LOCAL)-OBJS) $(LIBRARYDEPENDS) $($(LOCAL)-VERSIONSCRIPT)
-rm -f $(LIB)/lib$($(@F)-LIBRARY)*.so* 2> /dev/null
echo Building shared library $@
$(CXX) $(CXXSTD) $(CXXFLAGS) $(LDFLAGS) -Wl,--version-script=$($(@F)-VERSIONSCRIPT) $(PICFLAGS) $(LFLAGS) $(LFLAGS_SO)\
-o $@ $(SONAME_MAGIC)$($(@F)-SONAME) -shared \
$(filter %.opic,$^) \
$($(@F)-SLIBS)

# Compilation rules
vpath %.cc $(SUBDIRS)
$(OBJ)/%.opic: %.cc $(LIBRARYDEPENDS)
echo Compiling $< to $@
$(CXX) -c $(INLINEDEPFLAG) $(CPPFLAGS) $(CXXSTD) $(CXXFLAGS) $(PICFLAGS) -o $@ '$(abspath $<)'
$(DoDep)

# Include the dependencies that are available
The_DFiles = $(wildcard $($(LOCAL)-DEP))
ifneq ($(words $(The_DFiles)),0)
include $(The_DFiles)
endif

+ 0
- 14
buildlib/libversion.mak View File

@@ -1,14 +0,0 @@
# -*- make -*-
# Version number of libapt-pkg.
# Please increase MAJOR with each ABI break,
# with each non-ABI break to the lib, please increase RELEASE.
# The versionnumber is extracted from apt-pkg/macros.h - see also there.
LIBAPTPKG_MAJOR=$(shell awk -v ORS='.' '/^\#define APT_PKG_M/ {print $$3}' $(BASE)/apt-pkg/contrib/macros.h | sed 's/\.$$//')
LIBAPTPKG_RELEASE=$(shell grep '^\#define APT_PKG_RELEASE' $(BASE)/apt-pkg/contrib/macros.h | cut -d ' ' -f 3)

# Version number of libapt-inst
# Please increase MAJOR with each ABI break,
# with each non-ABI break to the lib, please increase MINOR.
# The versionnumber is extracted from apt-inst/makefile - see also there.
LIBAPTINST_MAJOR=$(shell grep '^MAJOR=' $(BASE)/apt-inst/makefile |cut -d '=' -f 2)
LIBAPTINST_MINOR=$(shell grep '^MINOR=' $(BASE)/apt-inst/makefile |cut -d '=' -f 2)

+ 0
- 46
buildlib/makefile.in View File

@@ -1,46 +0,0 @@
# -*- make -*-

# This is the build directory make file, it sets the build directory
# and runs the src makefile.
ifndef NOISY
.SILENT:
endif
include environment.mak

SRCDIR=@top_srcdir@
BUILD:=$(shell pwd)
export BUILD

# Chain to the parent make to do the actual building
.PHONY: headers library clean veryclean all binary program doc \
veryclean/local
all headers library clean veryclean binary program doc:
$(MAKE) -C $(SRCDIR) -f Makefile $@

# Purge everything.
.PHONY: maintainer-clean dist-clean pristine sanity distclean
maintainer-clean dist-clean pristine sanity distclean:
-rm -rf $(DIRS)
-rm -f config.cache config.log config.status environment.mak makefile
# Create the required directories and build the shims
# The configure script fills in below, and then we do the right things..
# This cannot go in the configure script since the directories have not yet
# been created.. In any event I like the idea that you can change environment.mak
# and run make dirs and have the shims updated.
.PHONY: dirs
dirs:
$(MAKE) -C $(SRCDIR) -f Makefile $@
ifeq ($(HAVE_STATVFS),yes)
@rm -f include/statvfs.h > /dev/null 2>&1
else
@cp -p $(SRCDIR)/buildlib/statvfs.h.in include/statvfs.h
ln -sf . include/sys
endif
ifeq ($(NEED_SOCKLEN_T_DEFINE),yes)
@cp -p $(SRCDIR)/buildlib/netdb.h.in include/netdb.h
else
@rm -f include/netdb.h > /dev/null 2>&1
endif
rm -f include/python
ln -sf $(PYTHONINCLUDE) include/python

+ 0
- 30
buildlib/manpage.mak View File

@@ -1,30 +0,0 @@
# -*- make -*-

# This installs man pages into the doc directory

# Input
# $(SOURCE) - The documents to use

# All output is written to files in the build doc directory

# See defaults.mak for information about LOCAL

# Some local definitions
LOCAL := manpage-$(firstword $(SOURCE))
$(LOCAL)-LIST := $(addprefix $(DOC)/,$(SOURCE))

# Install generation hooks
doc: manpages
manpages: $($(LOCAL)-LIST)
veryclean: veryclean/$(LOCAL)

MKDIRS += $(DOC)

$($(LOCAL)-LIST) : $(DOC)/% : %
echo Installing man page $< to $(@D)
cp $< $(@D)

# Clean rule
.PHONY: veryclean/$(LOCAL)
veryclean/$(LOCAL):
-rm -rf $($(@F)-LIST)

+ 0
- 6
buildlib/netdb.h.in View File

@@ -1,6 +0,0 @@
/* Fix broken unixen. */
#include <config.h>
#ifdef NEED_SOCKLEN_T_DEFINE
#define socklen_t size_t
#endif
#include_next <netdb.h>

+ 0
- 74
buildlib/po4a_manpage.mak View File

@@ -1,74 +0,0 @@
# -*- make -*-

# This handles man pages with po4a. We convert to the respective
# output in the source directory then copy over to the final dest. This
# means po4a is only needed if compiling from bzr

# Input
# $(LC) - The language code of the translation

# See defaults.mak for information about LOCAL

# generate a list of accepted man page translations
SOURCE = $(patsubst %.xml,%,$(wildcard *.$(LC).?.xml))
INCLUDES = apt.ent apt-verbatim.ent apt-vendor.ent

manpages:

%.xsl: ../%.xsl
cp -a $< .

# Do not use XMLTO, build the manpages directly with XSLTPROC
ifdef XSLTPROC

STYLESHEET=manpage-style.xsl

LOCAL := po4a-manpage-$(firstword $(SOURCE))
$(LOCAL)-LIST := $(SOURCE)

# Install generation hooks
manpages: $($(LOCAL)-LIST)
clean: clean/$(LOCAL)
veryclean: veryclean/$(LOCAL)

apt-verbatim.ent: ../apt-verbatim.ent
cp -a ../apt-verbatim.ent .

apt-vendor.ent: ../apt-vendor.ent
cp -a ../apt-vendor.ent .

$($(LOCAL)-LIST) :: % : %.xml $(STYLESHEET) $(INCLUDES)
echo Creating man page $@
$(XSLTPROC) \
--stringparam l10n.gentext.default.language $(LC) \
-o $@ $(STYLESHEET) $< || exit 200 # why xsltproc doesn't respect the -o flag here???
test -f $(subst .$(LC),,$@) || echo 'FIXME: xsltproc respects the -o flag now, workaround can be removed'
mv -f $(subst .$(LC),,$@) $@

# Clean rule
.PHONY: clean/$(LOCAL) veryclean/$(LOCAL)
clean/$(LOCAL):
rm -f $($(@F)-LIST) apt.ent apt-verbatim.ent
veryclean/$(LOCAL):
# we are nuking the directory we are working in as it is auto-generated
rm -rf '$(abspath .)'

HAVE_PO4A=yes
endif

# take care of the rest
INCLUDES :=

ifndef HAVE_PO4A
# Strip from the source list any man pages we don't have compiled already
SOURCE := $(wildcard $(SOURCE))
endif

# Chain to the manpage rule
ifneq ($(words $(SOURCE)),0)
include $(MANPAGE_H)
endif

# DocBook XML Documents
SOURCE := $(wildcard *.$(LC).dbk)
include $(DOCBOOK_H)

+ 0
- 27
buildlib/podomain.mak View File

@@ -1,27 +0,0 @@
# -*- make -*-

# This creates the file listing used by xgettext and friends based on the
# declared domain of the make file. It also arranges to set the DOMAIN
# CPPFLAG for the compilation.

ifneq ($(APT_DOMAIN),none)

MY_DOMAIN := $(PACKAGE)
ifdef APT_DOMAIN
$($(LOCAL)-OBJS): CPPFLAGS := $(CPPFLAGS) -DAPT_DOMAIN='"$(APT_DOMAIN)"'
MY_DOMAIN := $(APT_DOMAIN)
endif

MKDIRS += $(PO_DOMAINS)/$(MY_DOMAIN)
$(PO_DOMAINS)/$(MY_DOMAIN)/$(LOCAL).$(TYPE)list: SRC := $(addprefix $(SUBDIR)/,$(SOURCE))
$(PO_DOMAINS)/$(MY_DOMAIN)/$(LOCAL).$(TYPE)list: makefile dirs
(echo $(SRC) | xargs -n1 echo) > $@.tmp
cmp --silent $@.tmp $@ || mv $@.tmp $@
startup binary program clean update-po: $(PO_DOMAINS)/$(MY_DOMAIN)/$(LOCAL).$(TYPE)list

veryclean: veryclean/$(LOCAL)
veryclean/po/$(LOCAL): LIST := $(PO_DOMAINS)/$(MY_DOMAIN)/$(LOCAL).$(TYPE)list
veryclean/po/$(LOCAL):
rm -f $(LIST)

endif

+ 0
- 60
buildlib/program.mak View File

@@ -1,60 +0,0 @@
# -*- make -*-

# This creates a program

# Input
# $(SOURCE) - The source code to use
# $(PROGRAM) - The name of the program
# $(SLIBS) - Shared libs to link against
# $(LIB_MAKES) - Shared library make files to depend on - to ensure we get
# remade when the shared library version increases.

# See defaults.mak for information about LOCAL

# Some local definitions
LOCAL := $(PROGRAM)
$(LOCAL)-OBJS := $(addprefix $(OBJ)/,$(addsuffix .o,$(notdir $(basename $(SOURCE)))))
$(LOCAL)-DEP := $(addprefix $(DEP)/,$(addsuffix .o.d,$(notdir $(basename $(SOURCE)))))
$(LOCAL)-BIN := $(BIN)/$(PROGRAM)
$(LOCAL)-SLIBS := $(SLIBS)
$(LOCAL)-MKS := $(addprefix $(BASE)/,$(LIB_MAKES))

# Install the command hooks
program: $(BIN)/$(PROGRAM)
clean: clean/$(LOCAL)
veryclean: veryclean/$(LOCAL)

TYPE = src
include $(PODOMAIN_H)

# Make Directories
MKDIRS += $(OBJ) $(DEP) $(BIN)

# The clean rules
.PHONY: clean/$(LOCAL) veryclean/$(LOCAL)
clean/$(LOCAL):
-rm -f $($(@F)-OBJS) $($(@F)-DEP)
veryclean/$(LOCAL): clean/$(LOCAL)
-rm -f $($(@F)-BIN)

# The convience binary build rule
.PHONY: $(PROGRAM)
$(PROGRAM): $($(LOCAL)-BIN)

# The binary build rule
$($(LOCAL)-BIN): $($(LOCAL)-OBJS) $($(LOCAL)-MKS)
echo Building program $@
$(CXX) $(CXXSTD) $(CXXFLAGS) $(LDFLAGS) $(LFLAGS) -o $@ $(filter %.o,$^) $($(@F)-SLIBS) $(LEFLAGS)

# Compilation rules
vpath %.cc $(SUBDIRS)
$(OBJ)/%.o: %.cc
echo Compiling $< to $@
$(CXX) -c $(INLINEDEPFLAG) $(CPPFLAGS) $(CXXSTD) $(CXXFLAGS) -o $@ '$(abspath $<)'
$(DoDep)

# Include the dependencies that are available
The_DFiles = $(wildcard $($(LOCAL)-DEP))
ifneq ($(words $(The_DFiles)),0)
include $(The_DFiles)
endif

+ 0
- 68
buildlib/python.mak View File

@@ -1,68 +0,0 @@
# -*- make -*-

# This creates a python shared module.

# Input
# $(SOURCE) - The source code to use
# $(MODULE) - The name of the module without module or .so

# All output is writtin to .opic files in the build directory to
# signify the PIC output.

# See defaults.mak for information about LOCAL

# Some local definitions
LOCAL := $(MODULE)module.so
$(LOCAL)-OBJS := $(addprefix $(OBJ)/,$(addsuffix .opic,$(notdir $(basename $(SOURCE)))))
$(LOCAL)-DEP := $(addprefix $(DEP)/,$(addsuffix .opic.d,$(notdir $(basename $(SOURCE)))))
$(LOCAL)-SLIBS := $(SLIBS)
$(LOCAL)-MODULE := $(MODULE)

# Install the command hooks
library: $(LIB)/$(MODULE)module.so
clean: clean/$(LOCAL)
veryclean: veryclean/$(LOCAL)

# Make Directories
MKDIRS += $(OBJ) $(DEP) $(LIB)

# The clean rules
.PHONY: clean/$(LOCAL) veryclean/$(LOCAL)
clean/$(LOCAL):
-rm -f $($(@F)-OBJS) $($(@F)-DEP)
veryclean/$(LOCAL): clean/$(LOCAL)
-rm -f $($(@F)-HEADERS) $(LIB)/$($(@F)-MODULE)module.so*

# The binary build rule.
ifdef PYTHONLIB
ifndef ONLYSTATICLIBS
$(LIB)/$(MODULE)module.so: $($(LOCAL)-OBJS)
-rm -f $(LIB)/$($(@F)-MODULE)module.so* 2> /dev/null
echo Building shared Python module $@
$(CXX) $(CXXSTD) $(CXXFLAGS) $(LDFLAGS) $(PICFLAGS) $(LFLAGS) $(LFLAGS_SO)\
-o $@ -shared \
$(filter %.opic,$^) \
$($(@F)-SLIBS) $(PYTHONLIB)
else
.PHONY: $(LIB)/$(MODULE)module.so
$(LIB)/$(MODULE)module.so:
echo Don't know how to make a python module here, not building $@
endif # ifndef ONLYSTATICLIBS
else
.PHONY: $(LIB)/$(MODULE)module.so
$(LIB)/$(MODULE)module.so:
echo No python support, not building $@
endif # ifdef PYTHONLIB

# Compilation rules
vpath %.cc $(SUBDIRS)
$(OBJ)/%.opic: %.cc
echo Compiling $< to $@
$(CXX) -c $(INLINEDEPFLAG) $(CPPFLAGS) $(CXXSTD) $(CXXFLAGS) $(PICFLAGS) -o $@ '$(abspath $<)'
$(DoDep)

# Include the dependencies that are available
The_DFiles = $(wildcard $($(LOCAL)-DEP))
ifneq ($(words $(The_DFiles)),0)
include $(The_DFiles)
endif

+ 0
- 60
buildlib/staticlibrary.mak View File

@@ -1,60 +0,0 @@
# -*- make -*-

# This creates a static library.

# Input
# $(SOURCE) - The source code to use
# $(HEADERS) - Exported header files and private header files
# $(LIBRARY) - The name of the library without lib or .so

# All output is writtin to .o files in the build directory

# See defaults.mak for information about LOCAL

# Some local definitions
LOCAL := lib$(LIBRARY).a
$(LOCAL)-OBJS := $(addprefix $(OBJ)/,$(addsuffix .o,$(notdir $(basename $(SOURCE)))))
$(LOCAL)-DEP := $(addprefix $(DEP)/,$(addsuffix .o.d,$(notdir $(basename $(SOURCE)))))
$(LOCAL)-HEADERS := $(addprefix $(INCLUDE)/,$(HEADERS))
$(LOCAL)-LIB := $(LIB)/lib$(LIBRARY).a

# Install the command hooks
headers: $($(LOCAL)-HEADERS)
library: $($(LOCAL)-LIB)
clean: clean/$(LOCAL)
veryclean: veryclean/$(LOCAL)

# Make Directories
MKDIRS += $(OBJ) $(DEP) $(LIB) $(dir $($(LOCAL)-HEADERS))

# The clean rules
.PHONY: clean/$(LOCAL) veryclean/$(LOCAL)
clean/$(LOCAL):
-rm -f $($(@F)-OBJS) $($(@F)-DEP)
veryclean/$(LOCAL): clean/$(LOCAL)
-rm -f $($(@F)-HEADERS) $($(@F)-LIB)

# Build rules for the two symlinks
.PHONY: $($(LOCAL)-LIB)
# The binary build rule
$($(LOCAL)-LIB): $($(LOCAL)-HEADERS) $($(LOCAL)-OBJS)
echo Building library $@
-rm $@ > /dev/null 2>&1
$(AR) cq $@ $(filter %.o,$^)
ifneq ($(words $(RANLIB)),0)
$(RANLIB) $@
endif

# Compilation rules
vpath %.cc $(SUBDIRS)
$(OBJ)/%.o: %.cc
echo Compiling $< to $@
$(CXX) -c $(INLINEDEPFLAG) $(CPPFLAGS) $(CXXSTD) $(CXXFLAGS) -o $@ '$(abspath $<)'
$(DoDep)

# Include the dependencies that are available
The_DFiles = $(wildcard $($(LOCAL)-DEP))
ifneq ($(words $(The_DFiles)),0)
include $(The_DFiles)
endif

+ 0
- 13
buildlib/statvfs.h.in View File

@@ -1,13 +0,0 @@
/* Compatibility for systems with out Single Unix Spec statvfs */
#include <config.h>

#ifdef HAVE_VFS_H
#include <sys/vfs.h>
#endif

#ifdef HAVE_MOUNT_H
#include <sys/param.h>
#include <sys/mount.h>
#endif

#define statvfs statfs

+ 0
- 110
buildlib/tools.m4 View File

@@ -1,110 +0,0 @@
AC_DEFUN([ah_HAVE_GETCONF],
[AC_ARG_WITH(getconf,
[ --with-getconf Enable automagical buildtime configuration],
[if test "$withval" = "yes"; then
AC_PATH_PROG(GETCONF, getconf)
elif test ! "$withval" = "no";then
AC_MSG_CHECKING([getconf])
AC_MSG_RESULT([$withval])
GETCONF=$withval
fi],
[AC_PATH_PROG(GETCONF, getconf)]
)
AC_SUBST(GETCONF)
])

dnl ah_GET_CONF(variable, value ..., [default])
AC_DEFUN([ah_GET_GETCONF],
[AC_REQUIRE([ah_HAVE_GETCONF])
if test ! -z "$GETCONF";then
old_args="[$]@"
set -- $2
while eval test -z \"\$$1\" -a ! -z \"[$]1\";do
eval $1=`$GETCONF "[$]1" 2>/dev/null`
shift
done
fi
if eval test -z \"\$$1\" -o \"\$$1\" = "-1";then
eval $1="$3"
fi
])
AC_DEFUN([ah_NUM_CPUS],
[AC_MSG_CHECKING([number of cpus])
AC_ARG_WITH(cpus,
[ --with-cpus The number of cpus to be used for building(see --with-procs, default 1)],
[
if test "$withval" = "yes"; then
ah_GET_GETCONF(NUM_CPUS, SC_NPROCESSORS_ONLN _NPROCESSORS_ONLN, 1)
elif test ! "$withval" = "no";then
NUM_CPUS=$withval
elif test "$withval" = "no";then
NUM_CPUS=1
fi],
[ah_GET_GETCONF(NUM_CPUS, SC_NPROCESSORS_ONLN _NPROCESSORS_ONLN, 1)]
)
ah_NUM_CPUS_msg="$NUM_CPUS"
if test "$NUM_CPUS" = "0"; then
# broken getconf, time to bitch.
ah_NUM_CPUS_msg="found 0 cpus. Has someone done a lobotomy?"
NUM_CPUS=1
fi
if test $NUM_CPUS = 1 ;then
default_PROC_MULTIPLY=1
else
default_PROC_MULTIPLY=2
fi
AC_MSG_RESULT([$ah_NUM_CPUS_msg])
AC_SUBST(NUM_CPUS)
])
AC_DEFUN([ah_PROC_MULTIPLY],
[AC_REQUIRE([ah_NUM_CPUS])
AC_MSG_CHECKING([processor multiplier])
AC_ARG_WITH(proc-multiply,
[ --with-proc-multiply Multiply this * number of cpus for parallel making(default 2).],
[if test "$withval" = "yes"; then
PROC_MULTIPLY=$default_PROC_MULTIPLY
elif test ! "$withval" = "no";then
PROC_MULTIPLY=$withval
fi],
[PROC_MULTIPLY=$default_PROC_MULTIPLY]
)
AC_MSG_RESULT([$PROC_MULTIPLY])
AC_SUBST(PROC_MULTIPLY)
])

AC_DEFUN([ah_NUM_PROCS],
[AC_REQUIRE([ah_PROC_MULTIPLY])
AC_REQUIRE([ah_NUM_CPUS])
AC_MSG_CHECKING([number of processes to run during make])
AC_ARG_WITH(procs,
[ --with-procs The number of processes to run in parallel during make(num_cpus * multiplier).],
[if test "$withval" = "yes"; then
NUM_PROCS=`expr $NUM_CPUS \* $PROC_MULTIPLY`
elif test ! "$withval" = "no";then
NUM_PROCS=$withval
fi],
[NUM_PROCS=`expr $NUM_CPUS \* $PROC_MULTIPLY`]
)
AC_MSG_RESULT([$NUM_PROCS])
AC_SUBST(NUM_PROCS)
])

AC_DEFUN([ah_GCC3DEP],[
AC_MSG_CHECKING(if $CXX -MD works)
touch gcc3dep.cc
${CXX-c++} -MD -o gcc3dep_test.o -c gcc3dep.cc
rm -f gcc3dep.cc gcc3dep_test.o
if test -e gcc3dep.d; then
rm -f gcc3dep.d
GCC_MD=input
GCC3DEP=
elif test -e gcc3dep_test.d; then
rm -f gcc3dep_test.d
GCC_MD=output
GCC3DEP=yes
else
AC_MSG_ERROR(no)
fi
AC_MSG_RESULT([yes, for $GCC_MD])
AC_SUBST(GCC3DEP)
])

+ 0
- 119
cmdline/makefile View File

@@ -1,119 +0,0 @@
# -*- make -*-
BASE=..
SUBDIR=cmdline

# Bring in the default rules
include ../buildlib/defaults.mak

# The apt program
PROGRAM=apt
SLIBS = -lapt-pkg -lapt-private $(INTLLIBS)
LIB_MAKES = apt-pkg/makefile apt-private/makefile
SOURCE = apt.cc
include $(PROGRAM_H)

# The apt-cache program
PROGRAM=apt-cache
SLIBS = -lapt-pkg -lapt-private $(INTLLIBS)
LIB_MAKES = apt-pkg/makefile apt-private/makefile
SOURCE = apt-cache.cc
include $(PROGRAM_H)

# The apt-get program
PROGRAM=apt-get
SLIBS = -lapt-pkg -lapt-private $(INTLLIBS)
LIB_MAKES = apt-pkg/makefile apt-private/makefile
SOURCE = apt-get.cc
include $(PROGRAM_H)

# The apt-config program
PROGRAM=apt-config
SLIBS = -lapt-pkg -lapt-private $(INTLLIBS)
LIB_MAKES = apt-pkg/makefile apt-private/makefile
SOURCE = apt-config.cc
include $(PROGRAM_H)

# The apt-cdrom program
PROGRAM=apt-cdrom
SLIBS = -lapt-pkg -lapt-private $(INTLLIBS)
LIB_MAKES = apt-pkg/makefile apt-private/makefile
SOURCE = apt-cdrom.cc
include $(PROGRAM_H)

# The apt-mark program
PROGRAM=apt-mark
SLIBS = -lapt-pkg -lapt-private $(INTLLIBS)
LIB_MAKES = apt-pkg/makefile apt-private/makefile
SOURCE = apt-mark.cc
include $(PROGRAM_H)

# The apt-helper
PROGRAM=apt-helper
SLIBS = -lapt-pkg -lapt-private $(INTLLIBS) -lresolv
LIB_MAKES = apt-pkg/makefile apt-private/makefile
SOURCE = apt-helper.cc
include $(PROGRAM_H)

# The apt-report-mirror-failure program
#SOURCE=apt-report-mirror-failure
#TO=$(BIN)
#TARGET=program
#include $(COPY_H)

#
# the following programs are shipped in apt-utils
#
APT_DOMAIN:=apt-utils

# The apt-sortpkgs program
PROGRAM=apt-sortpkgs
SLIBS = -lapt-pkg -lapt-private $(INTLLIBS)
LIB_MAKES = apt-pkg/makefile apt-private/makefile
SOURCE = apt-sortpkgs.cc
include $(PROGRAM_H)

# The apt-extracttemplates program
PROGRAM=apt-extracttemplates
SLIBS = -lapt-pkg -lapt-inst -lapt-private $(INTLLIBS)
LIB_MAKES = apt-pkg/makefile apt-inst/makefile apt-private/makefile
SOURCE = apt-extracttemplates.cc
include $(PROGRAM_H)

# The internal solver/planner acting as an external
PROGRAM=apt-internal-solver
SLIBS = -lapt-pkg -lapt-private $(INTLLIBS)
LIB_MAKES = apt-pkg/makefile apt-private/makefile
SOURCE = apt-internal-solver.cc
include $(PROGRAM_H)

PROGRAM=apt-internal-planner
SLIBS = -lapt-pkg -lapt-private $(INTLLIBS)
LIB_MAKES = apt-pkg/makefile apt-private/makefile
SOURCE = apt-internal-planner.cc
include $(PROGRAM_H)

# This just dumps out the state
PROGRAM=apt-dump-solver
SLIBS = -lapt-pkg -lapt-private $(INTLLIBS)
LIB_MAKES = apt-pkg/makefile apt-private/makefile
SOURCE = apt-dump-solver.cc
include $(PROGRAM_H)

# The apt-key program
apt-key: apt-key.in
sed -e "s#&keyring-filename;#$(shell ../vendor/getinfo keyring-filename)#" \
-e "s#&keyring-removed-filename;#$(shell ../vendor/getinfo keyring-removed-filename)#" \
-e "s#&keyring-master-filename;#$(shell ../vendor/getinfo keyring-master-filename)#" \
-e "s#&keyring-uri;#$(shell ../vendor/getinfo keyring-uri)#" \
-e "s#&keyring-package;#$(shell ../vendor/getinfo keyring-package)#" $< > $@
chmod 755 $@

SOURCE=apt-key
TO=$(BIN)
TARGET=program
include $(COPY_H)

clean: clean/apt-key

clean/apt-key:
rm -f apt-key

+ 0
- 218
configure.ac View File

@@ -1,218 +0,0 @@
ad
dnl Process this file with autoconf to produce a configure script.
dnl The ONLY thing this is used for is to configure for different
dnl linux architectures and configurations, it is not used to make the
dnl code more portable

dnl You MUST have an environment that has all the POSIX functions and
dnl some of the more popular bsd/sysv ones (like select). You'll also
dnl need a C++ compiler that is semi-standard conformant, exceptions are
dnl not used but STL is.

dnl 'make -f Makefile startup' will generate the configure file from
dnl configure.ac correctly and can be run at any time

AC_PREREQ([2.68])
AC_INIT
AC_CONFIG_SRCDIR([configure.ac])
AC_CONFIG_AUX_DIR(buildlib)
AC_CONFIG_HEADER(include/config.h:buildlib/config.h.in include/apti18n.h:buildlib/apti18n.h.in)

PACKAGE="apt"
PACKAGE_VERSION="1.3~pre3+cmake2"
PACKAGE_MAIL="APT Development Team <deity@lists.debian.org>"
AC_DEFINE_UNQUOTED(PACKAGE,"$PACKAGE")
AC_DEFINE_UNQUOTED(PACKAGE_VERSION,"$PACKAGE_VERSION")
AC_DEFINE_UNQUOTED(PACKAGE_MAIL,"$PACKAGE_MAIL")
AC_SUBST(PACKAGE)
AC_SUBST(PACKAGE_VERSION)
AC_SUBST(PACKAGE_MAIL)

dnl Check the archs, we want the target type.
AC_CANONICAL_TARGET

dnl Check our C compiler

AC_PROG_CC
AC_SEARCH_LIBS([strerror],[cposix])

dnl check for large file support and enable it if possible
dnl do this early as other stuff might depend on it
AC_SYS_LARGEFILE

dnl Check for other programs
AC_PROG_CXX
AC_PROG_CPP
AC_PROG_RANLIB
AC_CHECK_TOOL(AR,ar,"ar")

dnl Checks for sockets
SAVE_LIBS="$LIBS"
LIBS=""
AC_SEARCH_LIBS(gethostbyname,nsl)
AC_SEARCH_LIBS(connect,socket)
SOCKETLIBS="$LIBS"
AC_SUBST(SOCKETLIBS)
LIBS="$SAVE_LIBS"

dnl Checks for pthread
AC_CHECK_LIB(pthread, pthread_create,[AC_DEFINE(HAVE_PTHREAD) PTHREADLIB="-lpthread"])
AC_SUBST(PTHREADLIB)
if test "$PTHREADLIB" != "-lpthread"; then
AC_MSG_ERROR(failed: I need posix threads, pthread)
fi

dnl Check for BDB
saveLIBS="$LIBS"
LIBS="$LIBS -ldb"

AC_CHECK_HEADER(db.h,
[AC_MSG_CHECKING(if we can link against BerkeleyDB)
AC_LINK_IFELSE(
[AC_LANG_PROGRAM(
[#include <db.h>],
[int r, s, t; db_version(&r, &s, &t);]
)],
[AC_DEFINE(HAVE_BDB)
BDBLIB="-ldb"
AC_MSG_RESULT(yes)],
[BDBLIB=""
AC_MSG_RESULT(no)]
)]
)

LIBS="$saveLIBS"

AC_CHECK_LIB(curl, curl_easy_init,
[AC_CHECK_HEADER(curl/curl.h,
curl_ok=yes,
curl_ok=no)],
AC_MSG_ERROR([failed: I need CURL due https support]),
)

AC_LANG_PUSH([C++])
AC_CHECK_HEADER(gtest/gtest.h,,
AC_MSG_WARN([failed: I need gtest (packaged as libgtest-dev) for unit testing]),
)
AC_LANG_POP([C++])


AC_SUBST(BDBLIB)

HAVE_ZLIB=no
AC_CHECK_LIB(z, gzopen,
[AC_CHECK_HEADER(zlib.h, [HAVE_ZLIB=yes], AC_MSG_ERROR([failed: zlib.h not found]))],
AC_MSG_ERROR([failed: Need libz]))
AC_SUBST(HAVE_ZLIB)
if test "x$HAVE_ZLIB" = "xyes"; then
AC_DEFINE(HAVE_ZLIB)
fi

HAVE_LZ4=no
AC_CHECK_LIB(lz4, LZ4F_createCompressionContext,[AC_CHECK_HEADER(lz4frame.h, [HAVE_LZ4=yes], [])], [])
AC_SUBST(HAVE_LZ4)
if test "x$HAVE_LZ4" = "xyes"; then
AC_DEFINE(HAVE_LZ4)
fi

HAVE_BZ2=no
AC_CHECK_LIB(bz2, BZ2_bzopen,[AC_CHECK_HEADER(bzlib.h, [HAVE_BZ2=yes], [])], [])
AC_SUBST(HAVE_BZ2)
if test "x$HAVE_BZ2" = "xyes"; then
AC_DEFINE(HAVE_BZ2)
fi

HAVE_LZMA=no
AC_CHECK_LIB(lzma, lzma_easy_encoder,[AC_CHECK_HEADER(lzma.h, [HAVE_LZMA=yes], [])], [])
AC_SUBST(HAVE_LZMA)
if test "x$HAVE_LZMA" = "xyes"; then
AC_DEFINE(HAVE_LZMA)
fi

dnl Converts the ARCH to be something singular for this general CPU family
dnl This is often the dpkg architecture string.
dnl First check against the full canonical canoncial-system-type in $target
dnl and if that fails, just look for the cpu
AC_MSG_CHECKING(debian architecture)
archset="`dpkg-architecture -qDEB_HOST_ARCH`"
if test "x$archset" = "x"; then
AC_MSG_ERROR([failed: use --host= or output from dpkg-architecture])
fi
AC_MSG_RESULT($archset)
AC_DEFINE_UNQUOTED(COMMON_ARCH,"$archset")

dnl Single Unix Spec statvfs
AC_CHECK_FUNC(statvfs,[HAVE_STATVFS=yes])
AC_SUBST(HAVE_STATVFS)

dnl Arg, linux and bsd put their statfs function in different places
if test x"$HAVE_STATVFS" != x"yes"; then
AC_EGREP_HEADER(statfs,sys/vfs.h,[AC_DEFINE(HAVE_VFS_H)],[
AC_EGREP_HEADER(statfs,sys/mount.h,[AC_DEFINE(HAVE_MOUNT_H)],[AC_MSG_ERROR(failed: Need statvfs)])
])
fi

AC_CHECK_MEMBERS([struct statfs.f_type],,,
[$ac_includes_default
#include <sys/vfs.h>])

dnl We should use the real timegm function if we have it.
AC_CHECK_FUNC(timegm,AC_DEFINE(HAVE_TIMEGM))
AC_SUBST(HAVE_TIMEGM)

dnl Check the architecture
AC_C_BIGENDIAN

dnl HP-UX sux..
AC_MSG_CHECKING(for missing socklen_t)
AC_EGREP_HEADER(socklen_t, sys/socket.h,[AC_MSG_RESULT(no)],[
AC_DEFINE(NEED_SOCKLEN_T_DEFINE)
NEED_SOCKLEN_T_DEFINE=yes
AC_MSG_RESULT(missing.)])
AC_SUBST(NEED_SOCKLEN_T_DEFINE)

dnl HP-UX needs -d_XOPEN_SOURCE_EXTENDED for h_errno
AC_MSG_CHECKING(for h_errno)
AC_EGREP_HEADER(h_errno, netdb.h, [AC_MSG_RESULT(normal)],
[CPPFLAGS="$CPPFLAGS -D_XOPEN_SOURCE_EXTENDED"
AC_EGREP_HEADER(h_errno, netdb.h,
[AC_MSG_RESULT(needs _XOPEN_SOURCE_EXTENDED)],
[AC_MSG_ERROR("not found.")])
])


dnl check for setuid checking function
AC_CHECK_FUNCS(getresuid getresgid setresuid setresgid)
AC_SUBST(HAVE_GETRESUID)
AC_SUBST(HAVE_GETRESGID)
AC_SUBST(HAVE_SETRESUID)
AC_SUBST(HAVE_SETRESGID)

dnl Check for doxygen
AC_PATH_PROG(DOXYGEN, doxygen)

dnl Check for the XSLTProc tool needed to build man pages together with po4a
AC_PATH_PROG(XSLTPROC,xsltproc)
AC_PATH_PROG(W3M, w3m)

dnl Check for the po4a tool needed to build man pages
AC_PATH_PROG(PO4A,po4a)

dnl Check for graphviz
<