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..