From: Andrew Tridgell Date: Thu, 3 Feb 2011 02:08:37 +0000 (+1100) Subject: waf: added top level build rules X-Git-Tag: tevent-0.9.11~979 X-Git-Url: http://git.samba.org/?p=samba.git;a=commitdiff_plain;h=72e1a39effba7dca8d437c8cad009be6fb2c4506 waf: added top level build rules This adds build rules for the top level directory based on the ones from source4. This is an intermediate step towards a combined top level build which will build both the Samba3 (bin/smbd, bin/nmbd etc) and Samba4 (bin/samba) binaries from a single build Pair-Programmed-With: Andrew Bartlett --- diff --git a/Makefile b/Makefile new file mode 100644 index 00000000000..cbbf045062e --- /dev/null +++ b/Makefile @@ -0,0 +1,75 @@ +# simple makefile wrapper to run waf + +WAF_BINARY=./buildtools/bin/waf +WAF=WAF_MAKE=1 $(WAF_BINARY) + +all: + $(WAF) build + +install: + $(WAF) install + +uninstall: + $(WAF) uninstall + +test: + $(WAF) test $(TEST_OPTIONS) + +help: + @echo NOTE: to run extended waf options use $(WAF_BINARY) or modify your PATH + $(WAF) --help + +subunit-test: + $(WAF) test --filtered-subunit $(TEST_OPTIONS) + +testenv: + $(WAF) test --testenv $(TEST_OPTIONS) + +quicktest: + $(WAF) test --quick $(TEST_OPTIONS) + +dist: + touch .tmplock + WAFLOCK=.tmplock $(WAF) dist + +distcheck: + touch .tmplock + WAFLOCK=.tmplock $(WAF) distcheck + +clean: + $(WAF) clean + +distclean: + $(WAF) distclean + +reconfigure: configure + $(WAF) reconfigure + +show_waf_options: + $(WAF) --help + +# some compatibility make targets +everything: all + +testsuite: all + +check: test + +torture: all + +# this should do an install as well, once install is finished +installcheck: test + +etags: + $(WAF) etags + +ctags: + $(WAF) ctags + +# this allows for things like "make bin/smbtorture" +bin/%:: FORCE + $(WAF) --targets=`basename $@` +FORCE: + +pydoctor: + $(WAF) pydoctor diff --git a/VERSION b/VERSION new file mode 100644 index 00000000000..394e114fed4 --- /dev/null +++ b/VERSION @@ -0,0 +1,117 @@ +######################################################## +# SAMBA Version # +# # +# Samba versions are as follows # +# 3.0.x New production series # +# 3.0.x{tp,pre,rc}y Preview/Testing & RC # +# 3.0.x[a-z] Patch releases # +# 3.0.x[a-z]-VENDOR-z Vendor patch releases # +# # +# script/mkversion.sh # +# will use this file to create # +# include/version.h # +# # +######################################################## + +######################################################## +# This are the main SAMBA version numbers # +# # +# .. # +# # +# e.g. SAMBA_VERSION_MAJOR=3 # +# SAMBA_VERSION_MINOR=0 # +# SAMBA_VERSION_RELEASE=0 # +# -> "3.0.0" # +######################################################## +SAMBA_VERSION_MAJOR=4 +SAMBA_VERSION_MINOR=0 +SAMBA_VERSION_RELEASE=0 + +######################################################## +# If a official release has a serious bug # +# a security release will have 'a' sufffix # +# # +# so SAMBA's version will be # +# .. # +# # +# e.g. SAMBA_VERSION_REVISION=a # +# -> "2.2.8a" # +######################################################## +SAMBA_VERSION_REVISION= + +######################################################## +# For 'tp' releases the version will be # +# # +# ..tp # +# # +# e.g. SAMBA_VERSION_TP_RELEASE=1 # +# -> "4.0.0tp1" # +######################################################## +SAMBA_VERSION_TP_RELEASE= + +######################################################## +# For 'alpha' releases the version will be # +# # +# ..alpha # +# # +# e.g. SAMBA_VERSION_ALPHA_RELEASE=1 # +# -> "4.0.0alpha1" # +######################################################## +SAMBA_VERSION_ALPHA_RELEASE=15 + +######################################################## +# For 'pre' releases the version will be # +# # +# ..pre # +# # +# e.g. SAMBA_VERSION_PRE_RELEASE=1 # +# -> "2.2.9pre1" # +######################################################## +SAMBA_VERSION_PRE_RELEASE= + +######################################################## +# For 'rc' releases the version will be # +# # +# ..rc # +# # +# e.g. SAMBA_VERSION_RC_RELEASE=1 # +# -> "3.0.0rc1" # +######################################################## +SAMBA_VERSION_RC_RELEASE= + +######################################################## +# To mark SVN snapshots this should be set to 'yes' # +# in the development BRANCH, and set to 'no' only in # +# the SAMBA_X_X_RELEASE BRANCH # +# # +# ..[...]-SVN-build-xxx # +# # +# e.g. SAMBA_VERSION_IS_SVN_SNAPSHOT=yes # +# -> "3.0.0-SVN-build-199" # +######################################################## +SAMBA_VERSION_IS_GIT_SNAPSHOT=yes + +######################################################## +# This is for specifying a release nickname # +# # +# e.g. SAMBA_VERSION_RELEASE_NICKNAME=Nicky Nickname # +# smbd --version will then give: # +# -> "4.0.0-tp1-VendorVersion (Nicky Nickname)" # +######################################################## +SAMBA_VERSION_RELEASE_NICKNAME= + +######################################################## +# This can be set by vendors if they want... # +# This can be a string constant or a function which # +# returns a string (const char *) # +# # +# ..[...]- # +# # +# Note the '-' is automaticaly added # +# # +# e.g. SAMBA_VERSION_VENDOR_SUFFIX=VendorVersion # +# -> "3.0.0rc2-VendorVersion" # +# # +######################################################## +SAMBA_VERSION_VENDOR_SUFFIX= +SAMBA_VERSION_VENDOR_PATCH= diff --git a/configure b/configure new file mode 100755 index 00000000000..72f758e5adc --- /dev/null +++ b/configure @@ -0,0 +1,14 @@ +#!/bin/sh + +PREVPATH=`dirname $0` + +WAF=./buildtools/bin/waf + +# using JOBS=1 gives maximum compatibility with +# systems like AIX which have broken threading in python +JOBS=1 +export JOBS + +cd . || exit 1 +$WAF configure "$@" || exit 1 +cd $PREVPATH diff --git a/wscript b/wscript new file mode 100644 index 00000000000..376bd0f4003 --- /dev/null +++ b/wscript @@ -0,0 +1,199 @@ +#! /usr/bin/env python + +srcdir = '.' +blddir = 'bin' + +APPNAME='samba' +VERSION=None + +import sys, os +sys.path.insert(0, srcdir+"/buildtools/wafsamba") +import wafsamba, Options, samba_dist, Scripting, Utils, samba_version + + +samba_dist.DIST_DIRS('.') + +#This is a list of files that we don't want in the package, for +#whatever reason. Directories should be listed with a trailing / to +#avoid over-exclusion. + +#This list includes files that would confuse the recipient of a +#samba-4.0.0 branded tarball (until the merge is complete) and the +#core elements of the autotools build system (which is known to +#produce buggy binaries). +samba_dist.DIST_BLACKLIST('README Manifest Read-Manifest-Now Roadmap source3/ ' + + 'packaging/ docs-xml/ examples/ swat/ WHATSNEW.txt MAINTAINERS ') +# install in /usr/local/samba by default +Options.default_prefix = '/usr/local/samba' + + +def set_options(opt): + opt.BUILTIN_DEFAULT('NONE') + opt.PRIVATE_EXTENSION_DEFAULT('samba4') + opt.RECURSE('lib/replace') + opt.RECURSE('source4/dynconfig') + opt.RECURSE('source4/lib/ldb') + opt.RECURSE('source4/selftest') + opt.RECURSE('source4/lib/tls') + opt.RECURSE('lib/nss_wrapper') + opt.RECURSE('lib/socket_wrapper') + opt.RECURSE('lib/uid_wrapper') + opt.RECURSE('pidl') + + gr = opt.option_group('developer options') + gr.add_option('--enable-build-farm', + help='enable special build farm options', + action='store_true', dest='BUILD_FARM') + + opt.tool_options('python') # options for disabling pyc or pyo compilation + # enable options related to building python extensions + + +def configure(conf): + version = samba_version.load_version(env=conf.env) + + conf.DEFINE('CONFIG_H_IS_FROM_SAMBA', 1) + conf.DEFINE('_SAMBA_BUILD_', version.MAJOR, add_to_cflags=True) + conf.DEFINE('HAVE_CONFIG_H', 1, add_to_cflags=True) + + if Options.options.developer: + conf.ADD_CFLAGS('-DDEVELOPER -DDEBUG_PASSWORD') + + # this enables smbtorture.static for s3 in the build farm + conf.env.BUILD_FARM = Options.options.BUILD_FARM or os.environ.get('RUN_FROM_BUILD_FARM') + + conf.ADD_EXTRA_INCLUDES('#source4 #lib #source4/lib #source4/include #includexxx #include #includeyyy') + + conf.RECURSE('lib/replace') + + conf.find_program('python', var='PYTHON', mandatory=True) + conf.find_program('perl', var='PERL', mandatory=True) + conf.find_program('xsltproc', var='XSLTPROC') + + # enable tool to build python extensions + conf.check_tool('python') + conf.check_python_version((2,4,2)) + conf.SAMBA_CHECK_PYTHON_HEADERS(mandatory=True) + + if sys.platform == 'darwin' and not conf.env['HAVE_ENVIRON_DECL']: + # Mac OSX needs to have this and it's also needed that the python is compiled with this + # otherwise you face errors about common symbols + if not conf.CHECK_SHLIB_W_PYTHON("Checking if -fno-common is needed"): + conf.ADD_CFLAGS('-fno-common') + if not conf.CHECK_SHLIB_W_PYTHON("Checking if -undefined dynamic_lookup is not need"): + conf.env.append_value('shlib_LINKFLAGS', ['-undefined', 'dynamic_lookup']) + if int(conf.env['PYTHON_VERSION'][0]) >= 3: + raise Utils.WafError('Python version 3.x is not supported by Samba yet') + + conf.RECURSE('source4/dynconfig') + conf.RECURSE('source4/lib/ldb') + conf.RECURSE('source4/heimdal_build') + conf.RECURSE('source4/lib/tls') + conf.RECURSE('source4/ntvfs/sysdep') + conf.RECURSE('lib/util') + conf.RECURSE('lib/zlib') + conf.RECURSE('lib/util/charset') + conf.RECURSE('source4/auth') + conf.RECURSE('lib/nss_wrapper') + conf.RECURSE('nsswitch') + conf.RECURSE('lib/socket_wrapper') + conf.RECURSE('lib/uid_wrapper') + conf.RECURSE('lib/popt') + conf.RECURSE('lib/subunit/c') + conf.RECURSE('libcli/smbreadline') + conf.RECURSE('pidl') + conf.RECURSE('source4/selftest') + + # we don't want any libraries or modules to rely on runtime + # resolution of symbols + if sys.platform != "openbsd4": + conf.ADD_LDFLAGS('-Wl,-no-undefined', testflags=True) + + # gentoo always adds this. We want our normal build to be as + # strict as the strictest OS we support, so adding this here + # allows us to find problems on our development hosts faster. + # It also results in faster load time. + if sys.platform != "openbsd4": + conf.ADD_LDFLAGS('-Wl,--as-needed', testflags=True) + + if not conf.CHECK_NEED_LC("-lc not needed"): + conf.ADD_LDFLAGS('-lc', testflags=False) + + # we don't want PYTHONDIR in config.h, as otherwise changing + # --prefix causes a complete rebuild + del(conf.env.defines['PYTHONDIR']) + del(conf.env.defines['PYTHONARCHDIR']) + + conf.SAMBA_CONFIG_H('include/config.h') + + +def etags(ctx): + '''build TAGS file using etags''' + import Utils + source_root = os.path.dirname(Utils.g_module.root_path) + cmd = 'etags $(find %s/.. -name "*.[ch]" | egrep -v \.inst\.)' % source_root + print("Running: %s" % cmd) + os.system(cmd) + +def ctags(ctx): + "build 'tags' file using ctags" + import Utils + source_root = os.path.dirname(Utils.g_module.root_path) + cmd = 'ctags $(find %s/.. -name "*.[ch]" | grep -v "*_proto\.h" | egrep -v \.inst\.)' % source_root + print("Running: %s" % cmd) + os.system(cmd) + +# putting this here enabled build in the list +# of commands in --help +def build(bld): + '''build all targets''' + samba_version.load_version(env=bld.env) + pass + + +def pydoctor(ctx): + '''build python apidocs''' + cmd='PYTHONPATH=bin/python pydoctor --project-name=Samba --project-url=http://www.samba.org --make-html --docformat=restructuredtext --add-package bin/python/samba' + print("Running: %s" % cmd) + os.system(cmd) + +def wafdocs(ctx): + '''build wafsamba apidocs''' + from samba_utils import recursive_dirlist + os.system('pwd') + list = recursive_dirlist('../buildtools/wafsamba', '.', pattern='*.py') + + cmd='PYTHONPATH=bin/python pydoctor --project-name=wafsamba --project-url=http://www.samba.org --make-html --docformat=restructuredtext' + print(list) + for f in list: + cmd += ' --add-module %s' % f + print("Running: %s" % cmd) + os.system(cmd) + + +def dist(): + '''makes a tarball for distribution''' + samba_version.load_version(env=None) + samba_dist.dist() + +def distcheck(): + '''test that distribution tarball builds and installs''' + samba_version.load_version(env=None) + import Scripting + d = Scripting.distcheck + d(subdir='source4') + +def wildcard_cmd(cmd): + '''called on a unknown command''' + from samba_wildcard import run_named_build_task + run_named_build_task(cmd) + +def main(): + from samba_wildcard import wildcard_main + wildcard_main(wildcard_cmd) +Scripting.main = main + +def reconfigure(ctx): + '''reconfigure if config scripts have changed''' + import samba_utils + samba_utils.reconfigure(ctx) diff --git a/wscript_build b/wscript_build new file mode 100644 index 00000000000..de6ea986855 --- /dev/null +++ b/wscript_build @@ -0,0 +1,106 @@ +#!/usr/bin/env python + +# top level waf build script for samba4 + +import os +srcdir = "." + +import samba_version + +# create separate build groups for building the asn1 and et compiler, then +# building the C from ASN1 and IDL, and finally the main build process +bld.SETUP_BUILD_GROUPS() +bld.AUTOCLEANUP_STALE_FILES() + +samba_version.load_version(bld.env) +bld.SAMBA_MKVERSION('version.h') + +# bld.ENABLE_MAGIC_ORDERING() + +bld.RECURSE('lib/replace') +bld.RECURSE('lib/talloc') +bld.RECURSE('lib/tdb') +bld.RECURSE('lib/tevent') +bld.RECURSE('source4/lib/ldb') +bld.RECURSE('source4/dynconfig') +bld.RECURSE('lib/util/charset') +bld.RECURSE('source4/scripting/python') +bld.RECURSE('source4/param') +bld.RECURSE('source4/librpc') +bld.RECURSE('source4/dsdb') +bld.RECURSE('source4/smbd') +bld.RECURSE('source4/cluster') +bld.RECURSE('source4/smbd') +bld.RECURSE('source4/libnet') +bld.RECURSE('source4/auth') +bld.RECURSE('lib/iniparser/src') +bld.RECURSE('nsswitch') +bld.RECURSE('nsswitch/libwbclient') +bld.RECURSE('source4/lib/samba3') +bld.RECURSE('source4/lib/socket') +bld.RECURSE('source4/lib/ldb-samba') +bld.RECURSE('source4/lib/tls') +bld.RECURSE('source4/lib/registry') +bld.RECURSE('source4/lib/messaging') +bld.RECURSE('source4/lib/events') +bld.RECURSE('source4/lib/cmdline') +bld.RECURSE('lib/socket_wrapper') +bld.RECURSE('lib/nss_wrapper') +bld.RECURSE('lib/uid_wrapper') +bld.RECURSE('lib/popt') +bld.RECURSE('source4/lib/stream') +bld.RECURSE('lib/util') +bld.RECURSE('lib/tdr') +bld.RECURSE('lib/tsocket') +bld.RECURSE('lib/crypto') +bld.RECURSE('lib/torture') +bld.RECURSE('lib/zlib') +bld.RECURSE('source4/lib') +bld.RECURSE('source4/lib/com') +bld.RECURSE('source4/dns_server') +bld.RECURSE('source4/echo_server') +bld.RECURSE('source4/smb_server') +bld.RECURSE('source4/rpc_server') +bld.RECURSE('source4/ldap_server') +bld.RECURSE('source4/web_server') +bld.RECURSE('source4/winbind') +bld.RECURSE('source4/nbt_server') +bld.RECURSE('source4/wrepl_server') +bld.RECURSE('source4/cldap_server') +bld.RECURSE('source4/ntp_signd') +bld.RECURSE('source4/samba_tool') +bld.RECURSE('source4/utils') +bld.RECURSE('source4/ntvfs') +bld.RECURSE('source4/ntptr') +bld.RECURSE('source4/torture') +bld.RECURSE('librpc') +bld.RECURSE('source4/client') +bld.RECURSE('source4/libcli') +bld.RECURSE('libcli/smb') +bld.RECURSE('libcli/cldap') +bld.RECURSE('lib/subunit/c') +bld.RECURSE('source4/kdc') +bld.RECURSE('lib/smbconf') +bld.RECURSE('lib/async_req') +bld.RECURSE('libcli/security') +bld.RECURSE('libcli/ldap') +bld.RECURSE('libcli/nbt') +bld.RECURSE('libcli/netlogon') +bld.RECURSE('libcli/auth') +bld.RECURSE('libcli/drsuapi') +bld.RECURSE('libcli/echo') +bld.RECURSE('libcli/samsync') +bld.RECURSE('source4/lib/policy') +bld.RECURSE('libcli/named_pipe_auth') +bld.RECURSE('source4/heimdal_build') +bld.RECURSE('libcli/smbreadline') +bld.RECURSE('codepages') +bld.RECURSE('source4/setup') +bld.RECURSE('source4/scripting') +bld.RECURSE('pidl') +bld.RECURSE('lib') + +# install some extra empty directories +bld.INSTALL_DIRS("", "${LOCKDIR} ${SYSCONFDIR} ${LOCKDIR} ${PIDDIR} ${LOCALSTATEDIR}/lib ${PRIVATEDIR}/smbd.tmp/messaging") + +bld.SYMBOL_CHECK()