summaryrefslogtreecommitdiffhomepage
path: root/auto/shmem
blob: c434a58f5ab5f88212aca5ef842594c8c6da81f9 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139

# Copyright (C) Igor Sysoev
# Copyright (C) NGINX, Inc.


NXT_SHM_PREFIX="/"

# FreeBSD, Solaris, MacOSX

nxt_feature="shm_open()"
nxt_feature_name=NXT_HAVE_SHM_OPEN
nxt_feature_run=yes
nxt_feature_incs=
nxt_feature_libs=
nxt_feature_test="#include <sys/mman.h>
                  #include <fcntl.h>
                  #include <unistd.h>
                  #include <sys/stat.h>
                  #include <sys/types.h>

                  int main(void) {
                      int         ret;
                      static char name[] = \"/unit.configure\";

                      shm_unlink(name);

                      int fd = shm_open(name, O_CREAT | O_EXCL | O_RDWR,
                          S_IRUSR | S_IWUSR);
                      if (fd == -1)
                          return 1;

                      ret = (access(name, F_OK) == 0);
                      shm_unlink(name);

                      return ret;
                  }"
. auto/feature


if [ $nxt_found = no ]; then

    # Linux and NetBSD 7.0 shm_open() are in librt.

    nxt_feature="shm_open() in librt"
    nxt_feature_libs="-lrt"
    . auto/feature

    if [ $nxt_found = yes ]; then
        NXT_LIBRT=$nxt_feature_libs
    fi
fi


if [ $nxt_found = no ]; then

    # DragonFly has no separate namespace for shm_open().

    nxt_feature="shm_open() in /tmp directory"
    nxt_feature_libs=
    nxt_feature_test="#include <sys/mman.h>
                      #include <fcntl.h>
                      #include <sys/stat.h>
                      #include <sys/types.h>

                      int main(void) {
                          static char name[] = \"/tmp/unit.configure\";

                          shm_unlink(name);

                          int fd = shm_open(name, O_CREAT | O_EXCL | O_RDWR,
                              S_IRUSR | S_IWUSR);
                          if (fd == -1)
                              return 1;

                          shm_unlink(name);
                          return 0;
                      }"
    . auto/feature

    if [ $nxt_found = yes ]; then
        NXT_SHM_PREFIX="/tmp/"
    fi
fi

nxt_shm_open_found=$nxt_found


# FreeBSD 8.0

nxt_feature="shm_open(SHM_ANON)"
nxt_feature_name=NXT_HAVE_SHM_OPEN_ANON
nxt_feature_libs=
nxt_feature_test="#include <sys/mman.h>
                  #include <fcntl.h>
                  #include <sys/stat.h>

                  int main(void) {
                      int fd = shm_open(SHM_ANON, O_RDWR, S_IRUSR | S_IWUSR);
                      if (fd == -1)
                          return 1;

                      return 0;
                  }"
. auto/feature

if [ "$nxt_shm_open_found" = no ]; then
    nxt_shm_open_found=$nxt_found
fi


# Linux

nxt_feature="memfd_create()"
nxt_feature_name=NXT_HAVE_MEMFD_CREATE
nxt_feature_run=yes
nxt_feature_incs=
nxt_feature_libs=
nxt_feature_test="#include <linux/memfd.h>
                  #include <unistd.h>
                  #include <sys/syscall.h>

                  int main(void) {
                      static char name[] = \"/unit.configure\";

                      int fd = syscall(SYS_memfd_create, name, MFD_CLOEXEC);
                      if (fd == -1)
                          return 1;

                      return 0;
                  }"
. auto/feature


if [ "$nxt_shm_open_found$nxt_found" = nono ]; then
    $echo
    $echo $0: error: no shared memory implementation found.
    $echo
    exit 1;
fi