diff options
author | Marcel Hollerbach <mail@marcel-hollerbach.de> | 2018-08-12 15:26:29 +0200 |
---|---|---|
committer | Marcel Hollerbach <mail@marcel-hollerbach.de> | 2018-10-02 17:22:50 +0200 |
commit | 46d464e5bfc10398461a33a2256c1c58d509dd1a (patch) | |
tree | 8c1a9272c05f14033a4430bc122632461bd73608 /header_checks | |
parent | 70ecf1056bb4be5a68b63044f938ccc2fe0a58c0 (diff) | |
download | efl-46d464e5bfc10398461a33a2256c1c58d509dd1a.tar.gz |
here comes meson
a new shiny buildtool that currently completes in the total of ~ 4 min..
1 min. conf time
2:30 min. build time
Where autotools takes:
1:50 min. conf time
3:40 min. build time.
meson was taken because it went quite good for enlightenment, and is a traction gaining system that is also used by other mayor projects. Additionally, the DSL that is defined my meson makes the configuration of the builds a lot easier to read.
Further informations can be gathered from the README.meson
Right now, bindings & windows support are missing.
It is highly recommented to use meson 0.48 due to optimizations in meson
that reduced the time the meson call would need.
Co-authored-by: Mike Blumenkrantz <zmike@samsung.com>
Differential Revision: https://phab.enlightenment.org/D7012
Depends on D7011
Diffstat (limited to 'header_checks')
-rw-r--r-- | header_checks/meson.build | 177 |
1 files changed, 177 insertions, 0 deletions
diff --git a/header_checks/meson.build b/header_checks/meson.build new file mode 100644 index 0000000000..e54e17943c --- /dev/null +++ b/header_checks/meson.build @@ -0,0 +1,177 @@ +header_checks = [ + 'alloca.h', + 'asm/hwcap.h', + 'bsd/string.h', + 'dirent.h', + 'execinfo.h', + 'mcheck.h', + 'netinet/in.h', + 'netinet/ssl.h', + 'netinet/tcp.h', + 'netinet/udp.h', + 'net/if.h', + 'stdlib.h', + 'mman.h', + 'sys/auxv.h', + 'sys/inotify.h', + 'sys/ioctl.h', + 'sys/mman.h', + 'sys/types.h', + 'sys/socket.h', + 'sys/filio.h', + 'arpa/inet.h', + 'sys/epoll.h', + 'sys/un.h', + 'sys/wait.h', + 'sys/resource.h', + 'sys/times.h', + 'dirent.h', + 'longinfo.h', + 'exotic.h', + 'ieeefp.h', + 'node/uv.h', + 'sys/timerfd.h', + 'features.h', + 'langinfo.h', + 'locale.h', + 'uv.h', + 'ws2tcpip.h' +] + +function_checks = [ +# function name | headers that are needed | libraries to include | Defines that are needed + ['alloca', ['alloca.h']], + ['backtrace', ['execinfo.h']], + ['backtrace_symbols', ['execinfo.h']], + ['clock_gettime', ['time.h']], + ['dirfd', ['dirent.h sys/types.h']], + ['fchmod', ['sys/stat.h']], + ['fcntl', ['fcntl.h']], + ['fork', ['unistd.h']], + ['fpathconf', ['unistd.h']], + ['geteuid', ['unistd.h']], + ['getpagesize', ['unistd.h']], + ['getpwent', ['sys/types.h', 'pwd.h']], + ['getuid', ['unistd.h']], + ['getxattr', ['sys/types.h', 'sys/xattr.h']], + ['iconv', ['iconv.h']], + ['listxattr', ['sys/types.h', 'sys/xattr.h']], + ['mallinfo', ['malloc.h']], + ['malloc_info', ['malloc.h']], + ['malloc_usable_size', ['malloc.h']], + ['mkdirat', ['sys/stat.h']], + ['mmap', ['sys/mman.h']], + ['mtrace', ['mcheck.h']], + ['prctl', ['sys/prctl.h']], + ['realpath', ['stdlib.h']], + ['setxattr', ['sys/types.h', 'sys/xattr.h']], + ['siglongjmp', ['setjmp.h']], + ['strerror_r', ['string.h']], + ['gettimeofday', ['sys/time.h']], + ['execvp', ['unistd.h']], + ['pause', ['unistd.h']], + ['isfinite', ['math.h']], +#FIXME strlcpy is detected by meson but drops at compilation time +# ['strlcpy', ['string.h']], + ['siginfo_t', ['signal.h']], + ['strerror_r', ['string.h']], + ['pthread_getcpuclockid', ['pthread.h', 'time.h']], + ['timerfd_create', ['sys/timerfd.h']], + ['kevent', ['sys/types.h', 'sys/event.h', 'sys/time.h']], +#from here on we specify the dependencies + ['dlopen', ['dlfcn.h'], ['dl']], + ['dlsym', ['dlfcn.h'], ['dl']], + ['lround', ['math.h'], ['m']], + ['shm_open', ['sys/mman.h', 'sys/stat.h', 'fcntl.h'], ['rt']], +#from here on we specify arguments + ['splice', ['fcntl.h'], [], '-D_GNU_SOURCE=1'], + ['sched_getcpu', ['sched.h'], [], '-D_GNU_SOURCE=1'], + ['dladdr', ['dlfcn.h'], ['dl'], '-D_GNU_SOURCE=1'] +] + +strerror_r_char_p = cc.compiles('''#define _GNU_SOURCE + #include <string.h> + int func (void) + { + char error_string[256]; + char *ptr = strerror_r (-2, error_string, 256); + char c = *strerror_r (-2, error_string, 256); + return c != 0 && ptr != (void*) 0L; + } + ''', + name : 'strerror_r() returns char *') + +if strerror_r_char_p + config_h.set('STRERROR_R_CHAR_P', '1') +endif + +#for later use, a bunch of librarie findings +m = cc.find_library('m') +#just keep this here as required false, if it is not inplace the library rt will just be linked as NOP +dl = cc.find_library('dl', required: false) +rt = cc.find_library('rt', required: false) + +thread_dep = dependency('threads') + +#check for the headers +foreach header : header_checks + if cc.has_header(header) + config_h.set10('HAVE_'+header.underscorify().to_upper(), true) + endif +endforeach + +foreach function : function_checks + function_name = function[0] + headers_to_search = function[1] + dependencies = [] + args = [] + + # if there is a library, make sure they exist + if function.length() > 2 + foreach library : function[2] + lib = cc.find_library(library, required : false) + if lib.found() == true + dependencies += lib + endif + endforeach + endif + + #check if there are args + if function.length() > 3 + args = function[3] + endif + + # Only check the header if the dependencies are ready + foreach header : headers_to_search + if cc.has_header_symbol(header, function_name, + dependencies : dependencies, + args : args) + config_h.set10('HAVE_'+function_name.to_upper(), true) + endif + endforeach +endforeach + +# The next checks are manually for now due to the fact that some names are not within the default pattern +if (cc.has_header_symbol('sys/stat.h', 'fstatat')) + config_h.set10('HAVE_ATFILE_SOURCE', true) +endif + +if (cc.has_header('sys/mman.h')) + config_h.set10('HAVE_MMAN_H', true) +endif + +config_h.set('VMAJ', version_major) +config_h.set('VMIN', version_minor) +config_h.set('VMIC', version_micro) +config_h.set('VREV', '0') + +#jpeg detection ... life is a bit more complex there + +jpeg = dependency('libjpeg', required: false) +if jpeg.found() == false + jpeg = cc.find_library('jpeg') +endif + +if config_h.has('HAVE_KEVENT') + config_h.set('HAVE_NOTIFY_KEVENT', '1') +endif
\ No newline at end of file |