Blame buildtools/wafsamba/samba_patterns.py

Packit Service fa3ceb
# a waf tool to add extension based build patterns for Samba
Packit Service fa3ceb
Packit Service fa3ceb
import sys
Packit Service fa3ceb
from waflib import Build
Packit Service fa3ceb
from wafsamba import samba_version_file
Packit Service fa3ceb
Packit Service fa3ceb
def write_version_header(task):
Packit Service fa3ceb
    '''print version.h contents'''
Packit Service fa3ceb
    src = task.inputs[0].srcpath(task.env)
Packit Service fa3ceb
Packit Service fa3ceb
    version = samba_version_file(src, task.env.srcdir, env=task.env, is_install=task.generator.bld.is_install)
Packit Service fa3ceb
    string = str(version)
Packit Service fa3ceb
Packit Service fa3ceb
    task.outputs[0].write(string)
Packit Service fa3ceb
    return 0
Packit Service fa3ceb
Packit Service fa3ceb
Packit Service fa3ceb
def SAMBA_MKVERSION(bld, target, source='VERSION'):
Packit Service fa3ceb
    '''generate the version.h header for Samba'''
Packit Service fa3ceb
Packit Service fa3ceb
    # We only force waf to re-generate this file if we are installing,
Packit Service fa3ceb
    # because only then is information not included in the deps (the
Packit Service fa3ceb
    # git revision) included in the version.
Packit Service fa3ceb
    t = bld.SAMBA_GENERATOR('VERSION',
Packit Service fa3ceb
                            rule=write_version_header,
Packit Service fa3ceb
                            source=source,
Packit Service fa3ceb
                            target=target,
Packit Service fa3ceb
                            always=bld.is_install)
Packit Service fa3ceb
Build.BuildContext.SAMBA_MKVERSION = SAMBA_MKVERSION
Packit Service fa3ceb
Packit Service fa3ceb
Packit Service fa3ceb
def write_build_options_header(fp):
Packit Service fa3ceb
    '''write preamble for build_options.c'''
Packit Service fa3ceb
    fp.write("/*\n")
Packit Service fa3ceb
    fp.write("   Unix SMB/CIFS implementation.\n")
Packit Service fa3ceb
    fp.write("   Build Options for Samba Suite\n")
Packit Service fa3ceb
    fp.write("   Copyright (C) Vance Lankhaar <vlankhaar@linux.ca> 2003\n")
Packit Service fa3ceb
    fp.write("   Copyright (C) Andrew Bartlett <abartlet@samba.org> 2001\n")
Packit Service fa3ceb
    fp.write("\n")
Packit Service fa3ceb
    fp.write("   This program is free software; you can redistribute it and/or modify\n")
Packit Service fa3ceb
    fp.write("   it under the terms of the GNU General Public License as published by\n")
Packit Service fa3ceb
    fp.write("   the Free Software Foundation; either version 3 of the License, or\n")
Packit Service fa3ceb
    fp.write("   (at your option) any later version.\n")
Packit Service fa3ceb
    fp.write("\n")
Packit Service fa3ceb
    fp.write("   This program is distributed in the hope that it will be useful,\n")
Packit Service fa3ceb
    fp.write("   but WITHOUT ANY WARRANTY; without even the implied warranty of\n")
Packit Service fa3ceb
    fp.write("   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n")
Packit Service fa3ceb
    fp.write("   GNU General Public License for more details.\n")
Packit Service fa3ceb
    fp.write("\n")
Packit Service fa3ceb
    fp.write("   You should have received a copy of the GNU General Public License\n")
Packit Service fa3ceb
    fp.write("   along with this program; if not, see <http://www.gnu.org/licenses/>.\n")
Packit Service fa3ceb
    fp.write("*/\n")
Packit Service fa3ceb
    fp.write("\n")
Packit Service fa3ceb
    fp.write("#include \"includes.h\"\n")
Packit Service fa3ceb
    fp.write("#include \"dynconfig/dynconfig.h\"\n")
Packit Service fa3ceb
    fp.write("#include \"lib/cluster_support.h\"\n")
Packit Service fa3ceb
Packit Service fa3ceb
    fp.write("\n")
Packit Service fa3ceb
    fp.write("static int output(bool screen, const char *format, ...) PRINTF_ATTRIBUTE(2,3);\n")
Packit Service fa3ceb
    fp.write("void build_options(bool screen);\n")
Packit Service fa3ceb
    fp.write("\n")
Packit Service fa3ceb
    fp.write("\n")
Packit Service fa3ceb
    fp.write("/****************************************************************************\n")
Packit Service fa3ceb
    fp.write("helper function for build_options\n")
Packit Service fa3ceb
    fp.write("****************************************************************************/\n")
Packit Service fa3ceb
    fp.write("static int output(bool screen, const char *format, ...)\n")
Packit Service fa3ceb
    fp.write("{\n")
Packit Service fa3ceb
    fp.write("       char *ptr = NULL;\n")
Packit Service fa3ceb
    fp.write("       int ret = 0;\n")
Packit Service fa3ceb
    fp.write("       va_list ap;\n")
Packit Service fa3ceb
    fp.write("       \n")
Packit Service fa3ceb
    fp.write("       va_start(ap, format);\n")
Packit Service fa3ceb
    fp.write("       ret = vasprintf(&ptr,format,ap);\n")
Packit Service fa3ceb
    fp.write("       va_end(ap);\n")
Packit Service fa3ceb
    fp.write("\n")
Packit Service fa3ceb
    fp.write("       if (screen) {\n")
Packit Service fa3ceb
    fp.write("              d_printf(\"%s\", ptr ? ptr : \"\");\n")
Packit Service fa3ceb
    fp.write("       } else {\n")
Packit Service fa3ceb
    fp.write("              DEBUG(4,(\"%s\", ptr ? ptr : \"\"));\n")
Packit Service fa3ceb
    fp.write("       }\n")
Packit Service fa3ceb
    fp.write("       \n")
Packit Service fa3ceb
    fp.write("       SAFE_FREE(ptr);\n")
Packit Service fa3ceb
    fp.write("       return ret;\n")
Packit Service fa3ceb
    fp.write("}\n")
Packit Service fa3ceb
    fp.write("\n")
Packit Service fa3ceb
    fp.write("/****************************************************************************\n")
Packit Service fa3ceb
    fp.write("options set at build time for the samba suite\n")
Packit Service fa3ceb
    fp.write("****************************************************************************/\n")
Packit Service fa3ceb
    fp.write("void build_options(bool screen)\n")
Packit Service fa3ceb
    fp.write("{\n")
Packit Service fa3ceb
    fp.write("       if ((DEBUGLEVEL < 4) && (!screen)) {\n")
Packit Service fa3ceb
    fp.write("              return;\n")
Packit Service fa3ceb
    fp.write("       }\n")
Packit Service fa3ceb
    fp.write("\n")
Packit Service fa3ceb
    fp.write("\n")
Packit Service fa3ceb
    fp.write("       /* Output various paths to files and directories */\n")
Packit Service fa3ceb
    fp.write("       output(screen,\"\\nPaths:\\n\");\n")
Packit Service fa3ceb
    fp.write("       output(screen,\"   SBINDIR: %s\\n\", get_dyn_SBINDIR());\n")
Packit Service fa3ceb
    fp.write("       output(screen,\"   BINDIR: %s\\n\", get_dyn_BINDIR());\n")
Packit Service fa3ceb
    fp.write("       output(screen,\"   CONFIGFILE: %s\\n\", get_dyn_CONFIGFILE());\n")
Packit Service fa3ceb
    fp.write("       output(screen,\"   LOGFILEBASE: %s\\n\", get_dyn_LOGFILEBASE());\n")
Packit Service fa3ceb
    fp.write("       output(screen,\"   LMHOSTSFILE: %s\\n\",get_dyn_LMHOSTSFILE());\n")
Packit Service fa3ceb
    fp.write("       output(screen,\"   LIBDIR: %s\\n\",get_dyn_LIBDIR());\n")
Packit Service fa3ceb
    fp.write("       output(screen,\"   DATADIR: %s\\n\",get_dyn_DATADIR());\n")
Packit Service fa3ceb
    fp.write("       output(screen,\"   SAMBA_DATADIR: %s\\n\",get_dyn_SAMBA_DATADIR());\n")
Packit Service fa3ceb
    fp.write("       output(screen,\"   MODULESDIR: %s\\n\",get_dyn_MODULESDIR());\n")
Packit Service fa3ceb
    fp.write("       output(screen,\"   SHLIBEXT: %s\\n\",get_dyn_SHLIBEXT());\n")
Packit Service fa3ceb
    fp.write("       output(screen,\"   LOCKDIR: %s\\n\",get_dyn_LOCKDIR());\n")
Packit Service fa3ceb
    fp.write("       output(screen,\"   STATEDIR: %s\\n\",get_dyn_STATEDIR());\n")
Packit Service fa3ceb
    fp.write("       output(screen,\"   CACHEDIR: %s\\n\",get_dyn_CACHEDIR());\n")
Packit Service fa3ceb
    fp.write("       output(screen,\"   PIDDIR: %s\\n\", get_dyn_PIDDIR());\n")
Packit Service fa3ceb
    fp.write("       output(screen,\"   SMB_PASSWD_FILE: %s\\n\",get_dyn_SMB_PASSWD_FILE());\n")
Packit Service fa3ceb
    fp.write("       output(screen,\"   PRIVATE_DIR: %s\\n\",get_dyn_PRIVATE_DIR());\n")
Packit Service fa3ceb
    fp.write("       output(screen,\"   BINDDNS_DIR: %s\\n\",get_dyn_BINDDNS_DIR());\n")
Packit Service fa3ceb
    fp.write("\n")
Packit Service fa3ceb
Packit Service fa3ceb
def write_build_options_footer(fp):
Packit Service fa3ceb
    fp.write("       /* Output the sizes of the various cluster features */\n")
Packit Service fa3ceb
    fp.write("       output(screen, \"\\n%s\", cluster_support_features());\n")
Packit Service fa3ceb
    fp.write("\n")
Packit Service fa3ceb
    fp.write("       /* Output the sizes of the various types */\n")
Packit Service fa3ceb
    fp.write("       output(screen, \"\\nType sizes:\\n\");\n")
Packit Service fa3ceb
    fp.write("       output(screen, \"   sizeof(char):         %lu\\n\",(unsigned long)sizeof(char));\n")
Packit Service fa3ceb
    fp.write("       output(screen, \"   sizeof(int):          %lu\\n\",(unsigned long)sizeof(int));\n")
Packit Service fa3ceb
    fp.write("       output(screen, \"   sizeof(long):         %lu\\n\",(unsigned long)sizeof(long));\n")
Packit Service fa3ceb
    fp.write("       output(screen, \"   sizeof(long long):    %lu\\n\",(unsigned long)sizeof(long long));\n")
Packit Service fa3ceb
    fp.write("       output(screen, \"   sizeof(uint8_t):      %lu\\n\",(unsigned long)sizeof(uint8_t));\n")
Packit Service fa3ceb
    fp.write("       output(screen, \"   sizeof(uint16_t):     %lu\\n\",(unsigned long)sizeof(uint16_t));\n")
Packit Service fa3ceb
    fp.write("       output(screen, \"   sizeof(uint32_t):     %lu\\n\",(unsigned long)sizeof(uint32_t));\n")
Packit Service fa3ceb
    fp.write("       output(screen, \"   sizeof(short):        %lu\\n\",(unsigned long)sizeof(short));\n")
Packit Service fa3ceb
    fp.write("       output(screen, \"   sizeof(void*):        %lu\\n\",(unsigned long)sizeof(void*));\n")
Packit Service fa3ceb
    fp.write("       output(screen, \"   sizeof(size_t):       %lu\\n\",(unsigned long)sizeof(size_t));\n")
Packit Service fa3ceb
    fp.write("       output(screen, \"   sizeof(off_t):        %lu\\n\",(unsigned long)sizeof(off_t));\n")
Packit Service fa3ceb
    fp.write("       output(screen, \"   sizeof(ino_t):        %lu\\n\",(unsigned long)sizeof(ino_t));\n")
Packit Service fa3ceb
    fp.write("       output(screen, \"   sizeof(dev_t):        %lu\\n\",(unsigned long)sizeof(dev_t));\n")
Packit Service fa3ceb
    fp.write("\n")
Packit Service fa3ceb
    fp.write("       output(screen, \"\\nBuiltin modules:\\n\");\n")
Packit Service fa3ceb
    fp.write("       output(screen, \"   %s\\n\", STRING_STATIC_MODULES);\n")
Packit Service fa3ceb
    fp.write("}\n")
Packit Service fa3ceb
Packit Service fa3ceb
def write_build_options_section(fp, keys, section):
Packit Service fa3ceb
    fp.write("\n\t/* Show %s */\n" % section)
Packit Service fa3ceb
    fp.write("       output(screen, \"\\n%s:\\n\");\n\n" % section)
Packit Service fa3ceb
Packit Service fa3ceb
    for k in sorted(keys):
Packit Service fa3ceb
        fp.write("#ifdef %s\n" % k)
Packit Service fa3ceb
        fp.write("       output(screen, \"   %s\\n\");\n" % k)
Packit Service fa3ceb
        fp.write("#endif\n")
Packit Service fa3ceb
    fp.write("\n")
Packit Service fa3ceb
Packit Service fa3ceb
def write_build_options(task):
Packit Service fa3ceb
    tbl = task.env
Packit Service fa3ceb
    keys_option_with = []
Packit Service fa3ceb
    keys_option_utmp = []
Packit Service fa3ceb
    keys_option_have = []
Packit Service fa3ceb
    keys_header_sys = []
Packit Service fa3ceb
    keys_header_other = []
Packit Service fa3ceb
    keys_misc = []
Packit Service fa3ceb
    if sys.hexversion>0x300000f:
Packit Service fa3ceb
        trans_table = bytes.maketrans(b'.-()', b'____')
Packit Service fa3ceb
    else:
Packit Service fa3ceb
        import string
Packit Service fa3ceb
        trans_table = string.maketrans('.-()', '____')
Packit Service fa3ceb
Packit Service fa3ceb
    for key in tbl:
Packit Service fa3ceb
        if key.startswith("HAVE_UT_UT_") or key.find("UTMP") >= 0:
Packit Service fa3ceb
            keys_option_utmp.append(key)
Packit Service fa3ceb
        elif key.startswith("WITH_"):
Packit Service fa3ceb
            keys_option_with.append(key)
Packit Service fa3ceb
        elif key.startswith("HAVE_SYS_"):
Packit Service fa3ceb
            keys_header_sys.append(key)
Packit Service fa3ceb
        elif key.startswith("HAVE_"):
Packit Service fa3ceb
            if key.endswith("_H"):
Packit Service fa3ceb
                keys_header_other.append(key)
Packit Service fa3ceb
            else:
Packit Service fa3ceb
                keys_option_have.append(key)
Packit Service fa3ceb
        elif key.startswith("static_init_"):
Packit Service fa3ceb
            l = key.split("(")
Packit Service fa3ceb
            keys_misc.append(l[0])
Packit Service fa3ceb
        else:
Packit Service fa3ceb
            keys_misc.append(key.translate(trans_table))
Packit Service fa3ceb
Packit Service fa3ceb
    tgt = task.outputs[0].bldpath(task.env)
Packit Service fa3ceb
    f = open(tgt, 'w')
Packit Service fa3ceb
    write_build_options_header(f)
Packit Service fa3ceb
    write_build_options_section(f, keys_header_sys, "System Headers")
Packit Service fa3ceb
    write_build_options_section(f, keys_header_other, "Headers")
Packit Service fa3ceb
    write_build_options_section(f, keys_option_utmp, "UTMP Options")
Packit Service fa3ceb
    write_build_options_section(f, keys_option_have, "HAVE_* Defines")
Packit Service fa3ceb
    write_build_options_section(f, keys_option_with, "--with Options")
Packit Service fa3ceb
    write_build_options_section(f, keys_misc, "Build Options")
Packit Service fa3ceb
    write_build_options_footer(f)
Packit Service fa3ceb
    f.close()
Packit Service fa3ceb
    return 0
Packit Service fa3ceb
Packit Service fa3ceb
Packit Service fa3ceb
def SAMBA_BLDOPTIONS(bld, target):
Packit Service fa3ceb
    '''generate the bld_options.c for Samba'''
Packit Service fa3ceb
    t = bld.SAMBA_GENERATOR(target,
Packit Service fa3ceb
                            rule=write_build_options,
Packit Service fa3ceb
                            dep_vars=['defines'],
Packit Service fa3ceb
                            target=target)
Packit Service fa3ceb
Build.BuildContext.SAMBA_BLDOPTIONS = SAMBA_BLDOPTIONS