Hello,

I am upgrading 3.0.x to 3.1 it seems the build process has changed, there
are a few issues at least on solaris, maybe due to the dual 32/64 bit
library formats when compared to Linux.

(running on SunOS server 5.10 Generic_150400-29 sun4v sparc sun4v)

1. Is seems to be no longer possible to have a different location for the
berkeley db include or lib directories. makedefs seems to just try one set
of assumptions about the base OS, and that you are using gcc, and gives up
returning -DNO_DB. makedefs does not even try to run a actual test, it
seems. but like the problem below, if it is running a 32 bit test, it wont
link with a 64 bit library

DB_README seems to suggest that this should work, and it did fork for me
before, but it doesnt seem to work for 3.1, or the docs reflect behavior
prior to 3.1. The old code might have defaulted to including <db.h> and
linking -ldb, as this definitely work, . The default path(s) would not
exist for me, CCARGS and AUXLIBS seem to be set correctly. The only
difference to the compile for prior versions is that i have moved some
things for AUXLIBS to AUXLIBS_LDAP and AUXLIBS_PCRE (-ldb is still in
AUXLIBS) to match the new convention / docs.

2. The test for the ICU library fails on solaris and returns -DNO_EAI, but
the config test execution does not include -m64, on Solaris -m64 has a
meaning for both for the compiler and for the linker, one is about cpu and
compilation size, the other about which libraries to search for and link to.

The makedefs test for the icu library does not add CCARGS, so the default
is -m32 not -m64. This means that the test object is compiled as 32 bit,
and will never link with the libraries which are 64 bit. On solaris the
linker will ignore 64 bit libraries, when compiling 32 bit, and visa versa.
If i manually run the test with the right flag it works :

> CC -m64 -o makedefs.test makedefs.test.c -I/usr/local/server-libs/include
-L/usr/local/server-libs/lib -licui18n -licuuc -licudata
> LD_LIBRARY_PATH=/usr/local/server-libs/lib ./makedefs.test && echo
"compiled ok"
compiled ok

There are two things happening above, the test is by default compiled 32
bit, if it is manually compiled as 64 bit it still wont run without an
LD_LIBRARY_PATH which points to the 64 bit libraries (in the AUXLIBS the -R
option would take care of finding the 64 bit library by embedding the
path). If the test included CCARGS and/or AUXLIBS it would likely just work.

My current 3.1 build config for both things (work in progress) is :

make -k Makefile.init makefiles \
dynamicmaps=yes shared=yes command_directory=/usr/local/postfix/sbin \
config_directory=/usr/local/postfix/etc/postfix
daemon_directory=/usr/local/postfix/libexec \
data_directory=/data/postfix/daemon
mail_spool_directory=/data/postfix/spool \
mailq_path=/usr/local/postfix/bin/mailq
manpage_directory=/usr/local/postfix/man \
meta_directory=/usr/local/postfix/etc/postfix
newaliases_path=/usr/local/postfix/bin/newaliases \
queue_directory=/data/postfix/spool
sendmail_path=/usr/local/postfix/sbin/sendmail \
shlib_directory=/usr/local/postfix/libexec CC=cc CXX=CC \
CCARGS='-m64 -xtarget=ultraT1 -xcode=pic32 -I/usr/local/server-libs/include
-I/usr/local/server-libs/include/sasl -DHAS_LDAP -DHAS_PCRE -DHAS_DB
-DUSE_TLS -DUSE_SASL_AUTH -DUSE_CYRUS_SASL -DFD_SETSIZE=2048' \
AUXLIBS='-m64 -L/usr/local/server-libs/lib -R/usr/local/server-libs/lib
-lssl -lcrypto -lsasl2 -ldb' \
WARN="-w" SHLIB_CFLAGS='-m64 -xtarget=ultraT1 -xcode=pic32' \
SHLIB_RPATH='-m64 -Wl,-R,/usr/local/postfix/libexec' \
AUXLIBS_LDAP='-L/usr/local/server-libs/lib -R/usr/local/server-libs/lib
-lldap -llber' \ AUXLIBS_PCRE='-L/usr/local/server-libs/lib
-R/usr/local/server-libs/lib -lpcre'

Any suggestions or directions for investigation, would be welcome.

Above build config seems to work fine, except for the omission of
berkeleydb to provide hash: map type, and libicu* for UTF8 encoding of
email addresses.

Another minor thing is that WARN always defaults to gcc options even when
using cc, which are not supported by the sun compiler, and even if you
provide WARN=-w to the "make makefiles" it defaults every time to the
parameter to make, and not what is in the Makefile, possibly because CC
which refereces $WARN is defined before WARN in the Makefile, leaving the
default unless the option is given to make. I imagine it might just need
switching around WARN coming first in the Makefile, so the WARN that
makedefs adds is read before it makes CC.

CC      = cc -I. -I../../include -m64 -xtarget=ultraT1 -xcode=pic32
-I/usr/local/server-libs/include -I/usr/local/server-libs/include/sasl
-DHAS_LDAP -DHAS_PCRE -DHAS_DB -DUSE_TLS -DUSE_SASL_AUTH -DUSE_CYRUS_SASL
-DFD_SETSIZE=2048 -DNO_NISPLUS -Dstrcasecmp=fix_strcasecmp
-Dstrncasecmp=fix_strncasecmp -DNO_EAI -DHAS_DEV_URANDOM
-DDEF_COMMAND_DIR=\"/usr/local/postfix/sbin\"
-DDEF_CONFIG_DIR=\"/usr/local/postfix/etc/postfix\"
-DDEF_DAEMON_DIR=\"/usr/local/postfix/libexec\"
-DDEF_DATA_DIR=\"/data/postfix/daemon\"
-DDEF_MAIL_SPOOL_DIR=\"/data/postfix/spool\"
-DDEF_MAILQ_PATH=\"/usr/local/postfix/bin/mailq\"
-DDEF_META_DIR=\"/usr/local/postfix/etc/postfix\"
-DDEF_NEWALIAS_PATH=\"/usr/local/postfix/bin/newaliases\"
-DDEF_QUEUE_DIR=\"/data/postfix/spool\"
-DDEF_SENDMAIL_PATH=\"/usr/local/postfix/sbin/sendmail\"
-DDEF_SHLIB_DIR=\"/usr/local/postfix/libexec\"
-DDEF_MANPAGE_DIR=\"/usr/local/postfix/man\" -DUSE_DYNAMIC_LIBS
-DUSE_DYNAMIC_MAPS $(WARN)
...etc....
WARN    = -w

Cheers
Brett

-- 
Yesterday is history and tomorrow is a mystery, the gift is now which is
why it is called the present..

Reply via email to