aboutsummaryrefslogtreecommitdiffstats
path: root/header_checks
diff options
context:
space:
mode:
authorMarcel Hollerbach <mail@marcel-hollerbach.de>2018-08-12 15:26:29 +0200
committerMarcel Hollerbach <mail@marcel-hollerbach.de>2018-10-02 17:22:50 +0200
commit46d464e5bfc10398461a33a2256c1c58d509dd1a (patch)
tree8c1a9272c05f14033a4430bc122632461bd73608 /header_checks
parentecore_cocoa: stop leaking init counts (diff)
downloadefl-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 https://phab.enlightenment.org/D7011
Diffstat (limited to 'header_checks')
-rw-r--r--header_checks/meson.build177
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