build: Upgrade build system
This commit also disables almost all build targets, as they are broken now
diff --git a/.waf-tools/cryptopp.py b/.waf-tools/cryptopp.py
new file mode 100644
index 0000000..1632ab6
--- /dev/null
+++ b/.waf-tools/cryptopp.py
@@ -0,0 +1,122 @@
+#! /usr/bin/env python
+# encoding: utf-8
+
+'''
+
+When using this tool, the wscript will look like:
+
+ def options(opt):
+ opt.load('compiler_cxx cryptopp')
+
+ def configure(conf):
+ conf.load('compiler_cxx cryptopp')
+ conf.check_cryptopp()
+
+ def build(bld):
+ bld(source='main.cpp', target='app', use='CRYPTOPP')
+
+Options are generated, in order to specify the location of cryptopp includes/libraries.
+
+
+'''
+import sys
+import re
+from waflib import Utils,Logs,Errors
+from waflib.Configure import conf
+CRYPTOPP_DIR = ['/usr', '/usr/local', '/opt/local', '/sw']
+CRYPTOPP_VERSION_FILE = 'config.h'
+
+CRYPTOPP_CHECK_FRAGMENT = '''
+#include "../../src/security/v1/cryptopp.hpp"
+#include <iostream>
+
+int
+main()
+{
+ using namespace CryptoPP;
+
+ std::string buffer = "Lorem ipsum dolor sit amet, consectetur adipiscing elit.";
+ SHA256 hash;
+ StringSource(buffer, true, new HashFilter(hash, new FileSink(std::cout)));
+ StringSource(reinterpret_cast<const uint8_t*>(buffer.c_str()), buffer.size(),
+ true, new HashFilter(hash, new FileSink(std::cout)));
+}
+'''
+
+def options(opt):
+ opt.add_option('--with-cryptopp', type='string', default=None, dest='cryptopp_dir',
+ help='''Path to where CryptoPP is installed, e.g., /usr/local''')
+
+@conf
+def __cryptopp_get_version_file(self, dir):
+ try:
+ return self.root.find_dir(dir).find_node('%s/%s' % ('include/cryptopp',
+ CRYPTOPP_VERSION_FILE))
+ except:
+ return None
+
+@conf
+def __cryptopp_find_root_and_version_file(self, *k, **kw):
+ root = k and k[0] or kw.get('path', self.options.cryptopp_dir)
+
+ file = self.__cryptopp_get_version_file(root)
+ if root and file:
+ return (root, file)
+ for dir in CRYPTOPP_DIR:
+ file = self.__cryptopp_get_version_file(dir)
+ if file:
+ return (dir, file)
+
+ if root:
+ self.fatal('CryptoPP not found in %s' % root)
+ else:
+ self.fatal('CryptoPP not found, please provide a --with-cryptopp=PATH argument (see help)')
+
+@conf
+def check_cryptopp(self, *k, **kw):
+ if not self.env['CXX']:
+ self.fatal('Load a c++ compiler first, e.g., conf.load("compiler_cxx")')
+
+ var = kw.get('uselib_store', 'CRYPTOPP')
+ mandatory = kw.get('mandatory', True)
+
+ use = kw.get('use', 'PTHREAD')
+
+ self.start_msg('Checking Crypto++ lib')
+ (root, file) = self.__cryptopp_find_root_and_version_file(*k, **kw)
+
+ try:
+ txt = file.read()
+ re_version = re.compile('^#define\\s+CRYPTOPP_VERSION\\s+([0-9]+)', re.M)
+ match = re_version.search(txt)
+
+ if match:
+ self.env.CRYPTOPP_VERSION = match.group(1)
+ v = int(self.env.CRYPTOPP_VERSION)
+ (major, minor, patch) = (int(v / 100), int(v % 100 / 10), int(v % 10))
+ self.end_msg("%d.%d.%d" % (major, minor, patch))
+ else:
+ self.fatal('CryptoPP files are present, but are not recognizable')
+ except:
+ self.fatal('CryptoPP not found or is not usable')
+
+ isLibWorking = False
+ for defines in [[], ['CRYPTOPP_DISABLE_ASM']]:
+ try:
+ self.check_cxx(msg='Checking if CryptoPP library works',
+ fragment=CRYPTOPP_CHECK_FRAGMENT,
+ lib='cryptopp',
+ includes="%s/include" % root,
+ libpath="%s/lib" % root,
+ mandatory=True,
+ use=use,
+ defines=defines,
+ uselib_store=var)
+ isLibWorking = True
+ break
+ except:
+ # try another flags
+ pass
+
+ if mandatory and not isLibWorking:
+ self.fatal('CryptoPP is present, but is not usable')