Annotation of embedaddon/lighttpd/SConstruct, revision 1.1

1.1     ! misho       1: import os
        !             2: import sys
        !             3: import re
        !             4: import string
        !             5: from stat import *
        !             6: 
        !             7: package = 'lighttpd'
        !             8: version = '1.4.33'
        !             9: 
        !            10: def checkCHeaders(autoconf, hdrs):
        !            11:        p = re.compile('[^A-Z0-9]')
        !            12:        for hdr in hdrs:
        !            13:                if not hdr:
        !            14:                        continue
        !            15:                _hdr = Split(hdr)
        !            16:                if autoconf.CheckCHeader(_hdr):
        !            17:                        autoconf.env.Append(CPPFLAGS = [ '-DHAVE_' + p.sub('_', _hdr[-1].upper()) ])
        !            18: 
        !            19: def checkFuncs(autoconf, funcs):
        !            20:        p = re.compile('[^A-Z0-9]')
        !            21:        for func in funcs:
        !            22:                if autoconf.CheckFunc(func):
        !            23:                        autoconf.env.Append(CPPFLAGS = [ '-DHAVE_' + p.sub('_', func.upper()) ])
        !            24: 
        !            25: def checkTypes(autoconf, types):
        !            26:        p = re.compile('[^A-Z0-9]')
        !            27:        for type in types:
        !            28:                if autoconf.CheckType(type, '#include <sys/types.h>'):
        !            29:                        autoconf.env.Append(CPPFLAGS = [ '-DHAVE_' + p.sub('_', type.upper()) ])
        !            30: 
        !            31: def checkProgram(env, withname, progname):
        !            32:        withname = 'with_' + withname
        !            33:        binpath = None
        !            34: 
        !            35:        if env[withname] != 1:
        !            36:                binpath = env[withname]
        !            37:        else:
        !            38:                prog = env.Detect(progname)
        !            39:                if prog:
        !            40:                        binpath = env.WhereIs(prog)
        !            41: 
        !            42:        if binpath:
        !            43:                mode = os.stat(binpath)[ST_MODE]
        !            44:                if S_ISDIR(mode):
        !            45:                        print >> sys.stderr, "* error: path `%s' is a directory" % (binpath)
        !            46:                        env.Exit(-1)
        !            47:                if not S_ISREG(mode):
        !            48:                        print >> sys.stderr, "* error: path `%s' is not a file or not exists" % (binpath)
        !            49:                        env.Exit(-1)
        !            50: 
        !            51:        if not binpath:
        !            52:                print >> sys.stderr, "* error: can't find program `%s'" % (progname)
        !            53:                env.Exit(-1)
        !            54: 
        !            55:        return binpath
        !            56: 
        !            57: def checkStructMember(context):
        !            58:        struct_member = """
        !            59: #include <time.h>
        !            60: int main() {
        !            61:        struct tm a;
        !            62:        a.tm_gmtoff = 0;
        !            63:        return 0;
        !            64: }
        !            65: """
        !            66:        context.Message('Checking for tm_gmtoff in struct tm...')
        !            67:        result = context.TryLink(struct_member, '.c')
        !            68:        context.Result(result)
        !            69: 
        !            70:        return result
        !            71: 
        !            72: 
        !            73: BuildDir('build', 'src', duplicate = 0)
        !            74: 
        !            75: opts = Options('config.py')
        !            76: opts.AddOptions(
        !            77:        ('prefix', 'prefix', '/usr/local'),
        !            78:        ('bindir', 'binary directory', '${prefix}/bin'),
        !            79:        ('sbindir', 'binary directory', '${prefix}/sbin'),
        !            80:        ('libdir', 'library directory', '${prefix}/lib'),
        !            81:        PackageOption('with_mysql', 'enable mysql support', 'no'),
        !            82:        PackageOption('with_xml', 'enable xml support', 'no'),
        !            83:        PackageOption('with_pcre', 'enable pcre support', 'yes'),
        !            84:        PathOption('CC', 'path to the c-compiler', None),
        !            85:        BoolOption('build_dynamic', 'enable dynamic build', 'yes'),
        !            86:        BoolOption('build_static', 'enable static build', 'no'),
        !            87:        BoolOption('build_fullstatic', 'enable fullstatic build', 'no'),
        !            88:        BoolOption('with_sqlite3', 'enable sqlite3 support', 'no'),
        !            89:        BoolOption('with_memcache', 'enable memcache support', 'no'),
        !            90:        BoolOption('with_fam', 'enable FAM/gamin support', 'no'),
        !            91:        BoolOption('with_openssl', 'enable memcache support', 'no'),
        !            92:        BoolOption('with_gzip', 'enable gzip compression', 'no'),
        !            93:        BoolOption('with_bzip2', 'enable bzip2 compression', 'no'),
        !            94:        BoolOption('with_lua', 'enable lua support for mod_cml', 'no'),
        !            95:        BoolOption('with_ldap', 'enable ldap auth support', 'no'))
        !            96: 
        !            97: env = Environment(
        !            98:        env = os.environ,
        !            99:        options = opts,
        !           100:        CPPPATH = Split('#build')
        !           101: )
        !           102: 
        !           103: env.Help(opts.GenerateHelpText(env))
        !           104: 
        !           105: if env.subst('${CC}') is not '':
        !           106:        env['CC'] = env.subst('${CC}')
        !           107: 
        !           108: env['package'] = package
        !           109: env['version'] = version
        !           110: if env['CC'] == 'gcc':
        !           111:        ## we need x-open 6 and bsd 4.3 features
        !           112:        env.Append(CCFLAGS = Split('-Wall -O2 -g -W -pedantic -Wunused -Wshadow -std=gnu99'))
        !           113: 
        !           114: # cache configure checks
        !           115: if 1:
        !           116:        autoconf = Configure(env, custom_tests = {'CheckStructMember': checkStructMember })
        !           117:        autoconf.headerfile = "foo.h"
        !           118:        checkCHeaders(autoconf, string.split("""
        !           119:                        arpa/inet.h
        !           120:                        fcntl.h
        !           121:                        netinet/in.h
        !           122:                        sys/types.h netinet/in.h
        !           123:                        stdlib.h
        !           124:                        string.h
        !           125:                        sys/socket.h
        !           126:                        sys/types.h sys/socket.h
        !           127:                        sys/time.h
        !           128:                        unistd.h
        !           129:                        sys/sendfile.h
        !           130:                        sys/uio.h
        !           131:                        sys/types.h sys/uio.h
        !           132:                        getopt.h
        !           133:                        sys/epoll.h
        !           134:                        sys/select.h
        !           135:                        sys/types.h sys/select.h
        !           136:                        poll.h
        !           137:                        sys/poll.h
        !           138:                        sys/devpoll.h
        !           139:                        sys/filio.h
        !           140:                        sys/mman.h
        !           141:                        sys/types.h sys/mman.h
        !           142:                        sys/event.h
        !           143:                        sys/types.h sys/event.h
        !           144:                        sys/port.h
        !           145:                        winsock2.h
        !           146:                        pwd.h
        !           147:                        sys/syslimits.h
        !           148:                        sys/resource.h
        !           149:                        sys/time.h sys/types.h sys/resource.h
        !           150:                        sys/un.h
        !           151:                        sys/types.h sys/un.h
        !           152:                        syslog.h
        !           153:                        stdint.h
        !           154:                        inttypes.h
        !           155:                        sys/prctl.h
        !           156:                        sys/wait.h""", "\n"))
        !           157: 
        !           158:        checkFuncs(autoconf, Split('fork stat lstat strftime dup2 getcwd inet_ntoa inet_ntop memset mmap munmap strchr \
        !           159:                        strdup strerror strstr strtol sendfile  getopt socket \
        !           160:                        gethostbyname poll epoll_ctl getrlimit chroot \
        !           161:                        getuid select signal pathconf madvise prctl\
        !           162:                        writev sigaction sendfile64 send_file kqueue port_create localtime_r posix_fadvise issetugid inet_pton'))
        !           163: 
        !           164:        checkTypes(autoconf, Split('pid_t size_t off_t'))
        !           165: 
        !           166:        autoconf.env.Append( LIBSQLITE3 = '', LIBXML2 = '', LIBMYSQL = '', LIBZ = '',
        !           167:                LIBBZ2 = '', LIBCRYPT = '', LIBMEMCACHE = '', LIBFCGI = '', LIBPCRE = '',
        !           168:                LIBLDAP = '', LIBLBER = '', LIBLUA = '', LIBLUALIB = '', LIBDL = '')
        !           169: 
        !           170:        if env['with_fam']:
        !           171:                if autoconf.CheckLibWithHeader('fam', 'fam.h', 'C'):
        !           172:                        autoconf.env.Append(CPPFLAGS = [ '-DHAVE_FAM_H', '-DHAVE_LIBFAM' ], LIBS = 'fam')
        !           173:                        checkFuncs(autoconf, ['FAMNoExists']);
        !           174: 
        !           175: 
        !           176:        if autoconf.CheckLibWithHeader('crypt', 'crypt.h', 'C'):
        !           177:                autoconf.env.Append(CPPFLAGS = [ '-DHAVE_CRYPT_H', '-DHAVE_LIBCRYPT' ], LIBCRYPT = 'crypt')
        !           178: 
        !           179:        if autoconf.CheckLibWithHeader('uuid', 'uuid/uuid.h', 'C'):
        !           180:                autoconf.env.Append(CPPFLAGS = [ '-DHAVE_UUID_UUID_H', '-DHAVE_LIBUUID' ], LIBUUID = 'uuid')
        !           181: 
        !           182:        if env['with_openssl']:
        !           183:                if autoconf.CheckLibWithHeader('ssl', 'openssl/ssl.h', 'C'):
        !           184:                        autoconf.env.Append(CPPFLAGS = [ '-DHAVE_OPENSSL_SSL_H', '-DHAVE_LIBSSL'] , LIBS = [ 'ssl', 'crypto' ])
        !           185: 
        !           186:        if env['with_gzip']:
        !           187:                if autoconf.CheckLibWithHeader('z', 'zlib.h', 'C'):
        !           188:                        autoconf.env.Append(CPPFLAGS = [ '-DHAVE_ZLIB_H', '-DHAVE_LIBZ' ], LIBZ = 'z')
        !           189: 
        !           190:        if env['with_ldap']:
        !           191:                if autoconf.CheckLibWithHeader('ldap', 'ldap.h', 'C'):
        !           192:                        autoconf.env.Append(CPPFLAGS = [ '-DHAVE_LDAP_H', '-DHAVE_LIBLDAP' ], LIBLDAP = 'ldap')
        !           193:                if autoconf.CheckLibWithHeader('lber', 'lber.h', 'C'):
        !           194:                        autoconf.env.Append(CPPFLAGS = [ '-DHAVE_LBER_H', '-DHAVE_LIBLBER' ], LIBLBER = 'lber')
        !           195: 
        !           196:        if env['with_bzip2']:
        !           197:                if autoconf.CheckLibWithHeader('bz2', 'bzlib.h', 'C'):
        !           198:                        autoconf.env.Append(CPPFLAGS = [ '-DHAVE_BZLIB_H', '-DHAVE_LIBBZ2' ], LIBBZ2 = 'bz2')
        !           199: 
        !           200:        if env['with_memcache']:
        !           201:                if autoconf.CheckLibWithHeader('memcache', 'memcache.h', 'C'):
        !           202:                        autoconf.env.Append(CPPFLAGS = [ '-DHAVE_MEMCACHE_H', '-DHAVE_LIBMEMCACHE' ], LIBMEMCACHE = 'memcache')
        !           203: 
        !           204:        if env['with_sqlite3']:
        !           205:                if autoconf.CheckLibWithHeader('sqlite3', 'sqlite3.h', 'C'):
        !           206:                        autoconf.env.Append(CPPFLAGS = [ '-DHAVE_SQLITE3_H', '-DHAVE_LIBSQLITE3' ], LIBSQLITE3 = 'sqlite3')
        !           207: 
        !           208:        ol = env['LIBS']
        !           209:        if autoconf.CheckLibWithHeader('fcgi', 'fastcgi.h', 'C'):
        !           210:                autoconf.env.Append(LIBFCGI = 'fcgi')
        !           211:        env['LIBS'] = ol
        !           212: 
        !           213:        ol = env['LIBS']
        !           214:        if autoconf.CheckLibWithHeader('dl', 'dlfcn.h', 'C'):
        !           215:                autoconf.env.Append(LIBDL = 'dl')
        !           216:        env['LIBS'] = ol
        !           217: 
        !           218:        if autoconf.CheckType('socklen_t', '#include <unistd.h>\n#include <sys/socket.h>\n#include <sys/types.h>'):
        !           219:                autoconf.env.Append(CPPFLAGS = [ '-DHAVE_SOCKLEN_T' ])
        !           220: 
        !           221:        if autoconf.CheckType('struct sockaddr_storage', '#include <sys/socket.h>\n'):
        !           222:                autoconf.env.Append(CPPFLAGS = [ '-DHAVE_STRUCT_SOCKADDR_STORAGE' ])
        !           223: 
        !           224:        if autoconf.CheckStructMember():
        !           225:                autoconf.env.Append(CPPFLAGS = [ '-DHAVE_STRUCT_TM_GMTOFF' ])
        !           226: 
        !           227:        env = autoconf.Finish()
        !           228: 
        !           229:        if env['with_lua']:
        !           230:                oldlibs = env['LIBS']
        !           231:                env.ParseConfig("pkg-config 'lua >= 5.0' --cflags --libs")
        !           232:                lualibs = env['LIBS'][len(oldlibs):]
        !           233:                env.Append(LIBLUA = lualibs)
        !           234:                env.Append(CPPFLAGS = [ '-DHAVE_LUA_H' ])
        !           235:                env['LIBS'] = oldlibs
        !           236: 
        !           237: 
        !           238: if env['with_pcre']:
        !           239:        pcre_config = checkProgram(env, 'pcre', 'pcre-config')
        !           240:        env.ParseConfig(pcre_config + ' --cflags --libs')
        !           241:        env.Append(CPPFLAGS = [ '-DHAVE_PCRE_H', '-DHAVE_LIBPCRE' ], LIBPCRE = 'pcre')
        !           242: 
        !           243: if env['with_xml']:
        !           244:        xml2_config = checkProgram(env, 'xml', 'xml2-config')
        !           245:        oldlib = env['LIBS']
        !           246:        env['LIBS'] = []
        !           247:        env.ParseConfig(xml2_config + ' --cflags --libs')
        !           248:        env.Append(CPPFLAGS = [ '-DHAVE_LIBXML_H', '-DHAVE_LIBXML2' ], LIBXML2 = env['LIBS'])
        !           249:        env['LIBS'] = oldlib
        !           250: 
        !           251: if env['with_mysql']:
        !           252:        mysql_config = checkProgram(env, 'mysql', 'mysql_config')
        !           253:        oldlib = env['LIBS']
        !           254:        env['LIBS'] = []
        !           255:        env.ParseConfig(mysql_config + ' --cflags --libs')
        !           256:        env.Append(CPPFLAGS = [ '-DHAVE_MYSQL_H', '-DHAVE_LIBMYSQL' ], LIBMYSQL = 'mysqlclient')
        !           257:        env['LIBS'] = oldlib
        !           258: 
        !           259: if re.compile("cygwin|mingw").search(env['PLATFORM']):
        !           260:        env.Append(COMMON_LIB = 'bin')
        !           261: elif re.compile("darwin|aix").search(env['PLATFORM']):
        !           262:        env.Append(COMMON_LIB = 'lib')
        !           263: else:
        !           264:        env.Append(COMMON_LIB = False)
        !           265: 
        !           266: versions = string.split(version, '.')
        !           267: version_id = int(versions[0]) << 16 | int(versions[1]) << 8 | int(versions[2])
        !           268: env.Append(CPPFLAGS = [
        !           269:                '-DLIGHTTPD_VERSION_ID=' + str(version_id),
        !           270:                '-DPACKAGE_NAME=\\"' + package + '\\"',
        !           271:                '-DPACKAGE_VERSION=\\"' + version + '\\"',
        !           272:                '-DLIBRARY_DIR="\\"${libdir}\\""',
        !           273:                '-D_FILE_OFFSET_BITS=64', '-D_LARGEFILE_SOURCE', '-D_LARGE_FILES'
        !           274:                ] )
        !           275: 
        !           276: SConscript( 'src/SConscript', 'env', build_dir = 'build', duplicate = 0)
        !           277: SConscript( 'tests/SConscript', 'env' )

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>