ruby-magic 0.3.2 → 0.4.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 1a066f36addb7d1c8cbe0858a67fa6a8e2103b3d365ab2d0ccda3027ea43a8ce
4
- data.tar.gz: 3828bda59c9df6377991481d7f4fa9a8526e981804ff80dbb84aeba7eb316578
3
+ metadata.gz: 5ec6d5053457e958f459236e45b56c3e4f85dd16e8c09f119208619db7332982
4
+ data.tar.gz: 01bd34ae0c013438354e440ab533f2b8bce0bd693df874043181a365b1980fe3
5
5
  SHA512:
6
- metadata.gz: 1ea5942f3c0f33f438f684437a3def3db633f18a279c84574f8a9ee0022d60e8852954b99ee32cc5ad7aa0fa5e10e1b1673e97575d72dfe28c862ac18476d551
7
- data.tar.gz: 7ad49df412d72dd3d2b29e07509916e7aef46bf3058191019a290d07fed8792877fa623b9d327e4fa94fa21f49ef2fc8ad242777d3f398c53322a08413dd6a58
6
+ metadata.gz: d41cbbfec82e392dfe5db7d30d51814f852def72c09f766c4cf9f007272fb256fb4669db02963a8c7fc185c4ecbb83d22873e70fadc89fd63ed0098e5a7397f2
7
+ data.tar.gz: 8537e862c2b421ccf2d301d0a8811f02112f35c53061d3565d15601264e082e61184af80f866dc37a186101268c99684ada8b6949ab7feea81baf02e97f2dee3
data/CONTRIBUTORS.md CHANGED
@@ -8,6 +8,8 @@ Ruby Magic Authors". Copyright is held by the original contributor according to
8
8
  the versioning history; see [LICENSE](LICENSE) file.
9
9
 
10
10
 
11
+ - Mike Dalessio ([@flavorjones](https://github.com/flavorjones))
12
+ - Igor Victor ([@gogainda](https://github.com/gogainda))
11
13
  - John Hawthorn ([@jhawthorn](https://github.com/jhawthorn))
12
14
  - Shinya Maeda ([@dosuken123](https://github.com/dosuken123))
13
15
  - Stan Hu ([@stanhu](https://github.com/stanhu))
data/dependencies.yml ADDED
@@ -0,0 +1,93 @@
1
+ libmagic:
2
+ version: "5.39"
3
+ sha256: "f05d286a76d9556243d0cb05814929c2ecf3a5ba07963f8f70bfaaa70517fad1"
4
+ # Manually verified checksum:
5
+ #
6
+ # $ gpg --verify file-5.39.tar.gz.asc file-5.39.tar.gz
7
+ # gpg: Signature made Mon Jun 15 02:06:08 2020 CEST
8
+ # gpg: using DSA key 0x71112AB16CB33B3A
9
+ # gpg: Good signature from "Christos Zoulas (personal key) <christos@zoulas.com>" [unknown]
10
+ # gpg: aka "Christos Zoulas (NetBSD key) <christos@netbsd.org>" [unknown]
11
+ # gpg: WARNING: This key is not certified with a trusted signature!
12
+ # gpg: There is no indication that the signature belongs to the owner.
13
+ # Primary key fingerprint: BE04 995B A8F9 0ED0 C0C1 76C4 7111 2AB1 6CB3 3B3A
14
+ #
15
+ # Using this PGP signature:
16
+ #
17
+ # -----BEGIN PGP PUBLIC KEY BLOCK-----
18
+ # mQGiBEg60Q8RBAC89+Oyi+iU1dMftAqXKh9Ml2PDCRk+Q6gwSY2BwmnKrPYvLSx9/YApjDp4
19
+ # BzhjaMCiDtDkbVDO3JuLQqUsCUWRJr9UxgfkQPMx3obkgoyCCvUcG5eK9CHeztjz5UK3jOzD
20
+ # 939UtupUXs+5z4dK1oAFFEL3sV6m5O4cuHyeWpjLCwCg9LYwmG2wIB65/2619W2kRMShDwkD
21
+ # /1KweB5mmXdQCDpzSg02Q4kGOzWmN2Dpv5kvKd9Lj/qxkj5PFOJ56Rmm04K0lPE6AnDgvEeu
22
+ # SqO8pkA8OY5IQNIjlgg3tshoMBRdsj9JLKv67smQXy01eQmadJWoiIZFuSLX7nrRLm3x3i1K
23
+ # 4/tcKorXoD5QBgOWaYFzkOcQ5jrwA/9tn0MEkkVqez88xGhOjq6jooRWrP2lhNWb+Q7ayEvW
24
+ # 9Wm9CYS0dXxlCCJfqBOc+cZo8iVVbqiOzwAQ7uAAUv8azuaeRWpOD7MSjkXjYtkPwZevEd6x
25
+ # FKODaB2BDO4WMlxO9mp3Q/gPfrM41v9n33tYsAzQMW7c9W5mX/XH2Cv/57QyQ2hyaXN0b3Mg
26
+ # Wm91bGFzIChOZXRCU0Qga2V5KSA8Y2hyaXN0b3NAbmV0YnNkLm9yZz6IXgQQEQgABgUCWcg8
27
+ # UAAKCRCWb7A7gPrCzP43AP9pxzM85lwZxHRG8vPw16wWUYGcGW44g/u1zqavRUksvgD/fX1y
28
+ # 6+cj5kNEqp5bHgCvOJiSYADIUQaPTYbwMvnQ1IuIZAQTEQIAJAIbAwYLCQgHAwIDFQIDAxYC
29
+ # AQIeAQIXgAUCV7RsLgUJIkWeFwAKCRBxESqxbLM7Oi/LAKC1PdNLcoP06p6nsGh4ApH0gkSl
30
+ # fgCg7k7lwLPdN0djOMUPMFnqN+TYAoaIZAQTEQIAJAUCSDrTKgIbAwUJDwmcAAYLCQgHAwID
31
+ # FQIDAxYCAQIeAQIXgAAKCRBxESqxbLM7OqXeAJ9tkhVpTsdkix5oWzsBCbU4vHO2CACfbd8k
32
+ # PWR68VgvDK5RPQchyghfIZGJARwEEAECAAYFAlnOXIQACgkQWrHF/qWWAmTEhggAmTr9PxSU
33
+ # wQ8dAvno6I30mDY+r4V2FaD+WvhITDV/CYfU4ImDCfknDC1x4f44YAgN94YQfnTmAixWLLk9
34
+ # NhvgKWHg5Sq2p7S3hLe3hQHUu+4mHq2t+oBtiwnb+GPUAz3ko1hjQ2fN3nZdwKNA3P37NJuj
35
+ # EiXOR1UsxO8TaTuf/mB+9vdrUpHsgRaZwYIJ7oszkRkr2V82QsMwgcIdnCPEVY7q+foi2DUF
36
+ # UW3eujRLpW9M/NUXrA8f2wQZVaLNy+Zpai57uXW7bVRc82+uRDVwckhKq+YRpfRiD/JCWzKP
37
+ # AJJfabUkKiA6NUe51aQJm64BUKh7p8ZR4qjCr/Roofsh9okCHAQQAQIABgUCWduxXQAKCRBm
38
+ # Bw6ljCki37ulD/4iZ9hjimgichG5F5Ht2CfPx3Qm16QYjnuB2l7FZNPYlcThdNgjJjc4Wro3
39
+ # jrcfj6KMTGXnkRuY7794co6z/U/x9sVz9wQYr0ugrJsVQeHRWbJGl2vFhOOtgj9hfJQM44nz
40
+ # 3ZZR4VDh/KU4njBhPR1Mzxoop1WBnWcE9RpTIyMlaB6RK9I8JGOpvNYzQaODnsG7z144G/3W
41
+ # gIWZnjVVozv/szvtabd+L1N3hMPI2jNkmKWSGuZWdIIcPBEp2e9AYmb9mVhp8UanrMWVTUi0
42
+ # q7Cc0Jw4tkTwXYaEeRcbbB87p+IV0an7o+m9e2hrdZJan276tDOFe+HgcZ4NiEM8LTcOBIHn
43
+ # VWaRLwQD4AAB8zmMHiVTN3oUdQsYlZmHhBYv8Bkfzwi8JdxMq7V2zGntQnROl9Ust3qL8g28
44
+ # xI/dzt396qupywaF/2bUKyZx/079Y3eEluPQlU+iof+hJ2roetJNwMzs/hTDLQgI4T8ZhsMO
45
+ # MewZUVI59YrqjETR1U6+L9txmULgL16jBpLqvFBGhUOIDqjI5uxapEjCGy3inocjUeejy5iN
46
+ # PehQwt2TKC2Exsyd02kJrPErYVcMLYbO90d2ykBItoSXsDcuOTgfyxpvxTUih4tHVf5B69Ht
47
+ # HAPPYqSEfwlVazLnoe/z5KU2h415vcwuRuI1WU0ghdGFCMmH1rQ0Q2hyaXN0b3MgWm91bGFz
48
+ # IChwZXJzb25hbCBrZXkpIDxjaHJpc3Rvc0B6b3VsYXMuY29tPoheBBARCAAGBQJZyDxEAAoJ
49
+ # EJZvsDuA+sLMa3oA/Rub7s6Vp61CJ4kDTyfAJg0vL2Y6dqb0l1qZfg7kHWDTAQDK85IGzegN
50
+ # dAftzh5ZBgOOByQ8C8nprbxQWNTKXwWBH4hkBBMRAgAkAhsDBgsJCAcDAgMVAgMDFgIBAh4B
51
+ # AheABQJXtGwxBQkiRZ4XAAoJEHERKrFsszs6XGUAn2mngFtwV1va2adBDUrx4ZpXHQNBAJ9w
52
+ # EZ8bIqAmyTrAE8r0iOXe1bzWrIhkBBMRAgAkBQJIOtEPAhsDBQkPCZwABgsJCAcDAgMVAgMD
53
+ # FgIBAh4BAheAAAoJEHERKrFsszs63YcAnRjURIBsnyKeY+f6jO8pVYx499LHAJwP4h+X2i+r
54
+ # drCNiSYYVCYbkNjysokBHAQQAQIABgUCWc5chAAKCRBascX+pZYCZA6bCACAB7DFdL0DfXUU
55
+ # +BTcJQXvlD9fKBoGmonUACPX/wq7phmnvJL0Btl1KJlcLuiu94PgLPXH4nWwpGnWG2Ogigqf
56
+ # HxM4Jx6skqkBQI6npacTU1nSaIBW4hKZpo/6QvgjmO1wsSPemIvZ/8+ijfS5AHPh0gew3BFj
57
+ # ESPvwWxxode3zDKD5n6g1vU4Id9i0OqjUUkUnCBy8pz6b/n3VuyYXM+OnMgZw+tXfYUJkf3v
58
+ # 15gWhXlmpeLCPdmSZ8NRy80lrY45EHra2lPx3RgX88AF3cgwLrKfjLRc1yuSZ1mipT+pI1Fs
59
+ # uUe14XfXHiLM2ESp2HLDLmCY8lwYelmWPO76skwEiQIcBBABAgAGBQJZ27FdAAoJEGYHDqWM
60
+ # KSLft9UP/3ZxzMkr2m8/itBLOBJbMlvCb5gfZLHrQV/GF9OIDDSdu0+4cbbVqeXyg4tEQHHi
61
+ # 8Gr9WZI3CgqWbJN66NkKnaPqZ4RE7a98h9AvRxWsGhBI+I8r8LTlsQQrhjUyEinsr7oqNP9M
62
+ # SO7vicg6df5SuWmQxTrap8A1noX6O0djzJ9Ea721hCHDxGQ9nxCAPOIvS7lI06soNLuuTdp+
63
+ # E+r1d3+saHGU6YK8GsnqFSTdxb9WBUJU8BQpcI9kL3iIGA8Azw6L5CFra9InCCQIjzHIbL/r
64
+ # WLIJKxJicHJib009atUeLDCwmdaLHoqOkqOJIYrnbbEkPQunY6A68KkNx05N5p46eRwKxKA0
65
+ # TJQAMyzdkCYKaiQe+pETwsyO89P9RK84P5wCG4jqSe29JW7VeuBOQDJ3khBN3whDu9s5gVlh
66
+ # UGjIeLo85g7IIKTtv5fbopAUCjbVwccqws54PmiSqTy5OlOCbbYGDtoermnXME+sFcNRT8MI
67
+ # ktWShC6GrF1BhVrS4ex9e6jsQxKQRMlab2bBeJ6rUXT/i8cnpJERViPspDvVgL7Oer+K2gep
68
+ # uNa2DeCaNardaAYo2IYu985pqRZYJVTCydmX+Wlhfp12tzToW1/9QsLTvKUhuI0WB/cC839t
69
+ # lJRXapfKjwjj91VEX7Y26vHWli5noHMSNIRlIjT5RqouuQQNBEg60jMQEADIcUV/L4XmXXqj
70
+ # GvglW2ZAPn/FIm+N4GM/vTjxUXAc2ciiIsTDuO+1+e4sB9eN05rcvtTyt28W6N6hL8HfQIFq
71
+ # 5WEsd86vd+cSiBlisq1BglNgFiAfRy/guoLHiYnBlSdS6/Gab86zR4m6Bg1JZOcV0c9Irffv
72
+ # 5XLlT/LX45V46ju3PQSJYGboKdEaX4jUWcSQgUQ4+HyyP2DsWPyfrJj4sFA0T78b1ywsyKK2
73
+ # OOv7KUQk/Hwq2C68aG6YlvvVKywucoSX2uk0ZnWjCCwgOtXxyHIysqAxcz9IPRbtJ3PjjScM
74
+ # kv9NMrb5SDswwZy1vfL8s1sa8w7uZgXlpOaFb/yYMuzvwKRwJNxptVW0TTcZ8ADemRiHgDzJ
75
+ # 0MbXYcmSH8CXla746Bg7oXaCMPvfivOnIsj/6d3YZPT1enwBprgL3VqlWPA4fjWyMh6+BoHu
76
+ # ak7Q4k2h2sSXo29tR6KXYbc+K+qUB+QrjGDkOL6JqN5nBLiu3H95B7ZEm8wDoYitDpt7ot9S
77
+ # 5ja+dcNyUu+XXUGXvc8SvzEmsDKMqxZSxvCyIfPhaFxVylLK02fhfXqpBImvZ6UmHOzylNlk
78
+ # TqJzDG4LOOiC/knv7ypgr7VH8TJ2PD9p2IR79hKjnVGmYvTtZ132qda+erbNb/9wwAzOeG49
79
+ # fgdiDSsUmvl15kEI+gBtZwADBQ/+PuZa9CEKryZpQ6hczzAN8oksk7MQaTBYdAd62zfaNa/Q
80
+ # QID3P5I8FsdXMCcKRipP95cZY8ZQKjBGt7O26Ts955Q71QS58rCXxeLP9/mbpm3kCwXrAkZH
81
+ # s2rH2awLOg6p8at2NJCn56AkldK1PyVtL0Qvl7nEOe+lcULqfLNEbGEgzev+ZK0v6So6lA2t
82
+ # i8derF5XkIMzCFdjcC1reZvfwNnxd/pQzuMfZOfPjPD6OKaBEWnWNZscU/ucNkgQpv+M2hCA
83
+ # paC3NaNiXl0TWsDp7981WSWnf6YZRTjLKyObdGmpo7Z+C9uVu2DbRlUiRAD3azBo4t03EZVB
84
+ # XMo/1opuqxyU6FLVW0mxLI2wh2M1Jt/RAvXLm5/Z9zGnPqwAObxkA518e71QXyM+GQ+M8Kyp
85
+ # PHr00oC+32PrKnFADI3s1oK5zMX0tjXb0voAgXTWNFsmi+efj7A3wt6G15ai70pOSTuFl9kb
86
+ # BqmCI4NmD5wV+uIR/jcmTf7jZKX5QPjDSJddJ5EeAsPXtur0wFZ9JwPM2FyNaeL92BjRYQPW
87
+ # C9vRtAUjJa2PSLofMDaEs+VD76WRI3E8kPIJiFeSqOLinclo1e41q3nyj5JBnwg50CwshW7g
88
+ # w/bU+IbzL0eZFjJ7ftJ+Xi/vlGtfbxjuKuhyD2PM3DNf9uXmcIV4ldEJzwhw2KmITwQYEQIA
89
+ # DwIbDAUCV7RsRgUJIkWdEAAKCRBxESqxbLM7OiJUAJ4y0+A//pOrp3rjo28Uyt34U+qRqwCe
90
+ # NqiZtKbSqpUgcLmKNgot+mSEAmmITwQYEQIADwUCSDrSMwIbDAUJDwmcAAAKCRBxESqxbLM7
91
+ # OnaqAJ0cUAs8+EPXqRYYbdu6ROINhExMkwCgpupi6uEG+b4yo6M+VlcQY7gl2DE=
92
+ # =XrDo
93
+ # -----END PGP PUBLIC KEY BLOCK-----
data/ext/magic/common.h CHANGED
@@ -36,27 +36,27 @@ extern "C" {
36
36
  # include <ruby/io.h>
37
37
  #else
38
38
  # include <rubyio.h>
39
- #endif
39
+ #endif /* HAVE_RUBY_IO_H */
40
40
 
41
- #if !defined(BIT)
42
- # define BIT(n) (1 << (n))
43
- #endif
41
+ #define BIT(n) (1 << (n))
44
42
 
45
43
  #if !defined(UNUSED)
46
44
  # define UNUSED(x) (void)(x)
47
- #endif
45
+ #endif /* UNUSED */
46
+
47
+ #define ARRAY_SIZE(a) (int)(sizeof(a) / sizeof((a)[0]))
48
48
 
49
49
  #if defined(F_DUPFD_CLOEXEC)
50
50
  # define HAVE_F_DUPFD_CLOEXEC 1
51
- #endif
51
+ #endif /* F_DUPFD_CLOEXEC */
52
52
 
53
53
  #if defined(O_CLOEXEC)
54
54
  # define HAVE_O_CLOEXEC 1
55
- #endif
55
+ #endif /* O_CLOEXEC */
56
56
 
57
57
  #if defined(POSIX_CLOSE_RESTART)
58
58
  # define HAVE_POSIX_CLOSE_RESTART 1
59
- #endif
59
+ #endif /* POSIX_CLOSE_RESTART */
60
60
 
61
61
  #define MAGIC_EXTENSION_SEPARATOR "/"
62
62
  #define MAGIC_CONTINUE_SEPARATOR "\n- "
@@ -65,15 +65,21 @@ extern "C" {
65
65
  # define MAGIC_STATUS_CHECK(x) x
66
66
  #else
67
67
  # define MAGIC_STATUS_CHECK(x) 1
68
- #endif
68
+ #endif /* MAGIC_SYSTEM_LIBRARIES */
69
+
70
+ #if !defined(MAGIC_CUSTOM_CHECK_TYPE)
71
+ # define MAGIC_CHECK_RUBY_TYPE(o, t) Check_Type((o), (t))
72
+ #else
73
+ # define MAGIC_CHECK_RUBY_TYPE(o, t) magic_check_ruby_type((o), (t))
74
+ #endif /* MAGIC_CUSTOM_CHECK_TYPE */
69
75
 
70
76
  #if !defined(MAGIC_NO_CHECK_CSV)
71
77
  # define MAGIC_NO_CHECK_CSV 0
72
- #endif
78
+ #endif /* MAGIC_NO_CHECK_CSV */
73
79
 
74
80
  #if !defined(MAGIC_NO_CHECK_JSON)
75
81
  # define MAGIC_NO_CHECK_JSON 0
76
- #endif
82
+ #endif /* MAGIC_NO_CHECK_JSON */
77
83
 
78
84
  #define DATA_P(x) (RB_TYPE_P((x), T_DATA))
79
85
  #define BOOLEAN_P(x) (RB_TYPE_P((x), T_TRUE) || RB_TYPE_P((x), T_FALSE))
@@ -95,23 +101,30 @@ extern "C" {
95
101
  # define RVALUE_TYPE enum ruby_value_type
96
102
  #else
97
103
  # define RVALUE_TYPE int
98
- #endif
104
+ #endif /* RUBY_API_VERSION_CODE > 20700 */
105
+
106
+ #if RUBY_API_VERSION_CODE >= 20700
107
+ # define HAVE_RUBY_GC_COMPACT 1
108
+ # define MAGIC_GC_MARK(x) rb_gc_mark_movable((x))
109
+ #else
110
+ # define MAGIC_GC_MARK(x) rb_gc_mark((x))
111
+ #endif /* RUBY_API_VERSION_CODE >= 20700 */
99
112
 
100
113
  #define CLASS_NAME(o) (NIL_P((o)) ? "nil" : rb_obj_classname((o)))
101
114
 
102
115
  #if !defined(T_INTEGER)
103
116
  # define T_INTEGER rb_cInteger
104
- #endif
117
+ #endif /* T_INTEGER */
105
118
 
106
119
  #if !defined(HAVE_RB_IO_T)
107
120
  # define rb_io_t OpenFile
108
- #endif
121
+ #endif /* HAVE_RB_IO_T */
109
122
 
110
123
  #if !defined(GetReadFile)
111
124
  # define FPTR_TO_FD(p) ((p)->fd)
112
125
  #else
113
126
  # define FPTR_TO_FD(p) (fileno(GetReadFile(p)))
114
- #endif
127
+ #endif /* GetReadFile */
115
128
 
116
129
  #define NOGVL_FUNCTION (VALUE (*)(void *))
117
130
 
@@ -138,7 +151,8 @@ fake_blocking_region(VALUE (*f)(ANYARGS), void *data)
138
151
  }
139
152
  # define NOGVL(f, d) \
140
153
  fake_blocking_region(NOGVL_FUNCTION(f), (d))
141
- #endif
154
+ #endif /* HAVE_RB_THREAD_CALL_WITHOUT_GVL
155
+ HAVE_RUBY_THREAD_H */
142
156
 
143
157
  #if defined(__cplusplus)
144
158
  }
data/ext/magic/extconf.rb CHANGED
@@ -4,9 +4,6 @@ require 'find'
4
4
  require 'mkmf'
5
5
  require 'pathname'
6
6
 
7
- LIBMAGIC_TAG = '5.39'
8
- LIBIMAGE_SHA256 = 'f05d286a76d9556243d0cb05814929c2ecf3a5ba07963f8f70bfaaa70517fad1'
9
-
10
7
  # helpful constants
11
8
  PACKAGE_ROOT_DIR = File.expand_path(File.join(File.dirname(__FILE__), '..', '..'))
12
9
 
@@ -81,6 +78,7 @@ def process_recipe(name, version, static_p, cross_p)
81
78
  # correct compiler prefix for cross build, but use host if not set.
82
79
  recipe.host = RbConfig::CONFIG["host_alias"].empty? ? RbConfig::CONFIG["host"] : RbConfig::CONFIG["host_alias"]
83
80
  recipe.target = File.join(PACKAGE_ROOT_DIR, "ports")
81
+ recipe.patch_files = Dir[File.join(PACKAGE_ROOT_DIR, "patches", name, "*.patch")].sort
84
82
  recipe.configure_options << "--libdir=#{File.join(recipe.path, 'lib')}"
85
83
 
86
84
  yield recipe
@@ -91,6 +89,20 @@ def process_recipe(name, version, static_p, cross_p)
91
89
 
92
90
  recipe.configure_options.flatten!
93
91
 
92
+ recipe.configure_options.delete_if do |option|
93
+ case option
94
+ when /\A(\w+)=(.*)\z/
95
+ env[Regexp.last_match(1)] = if env.key?(Regexp.last_match(1))
96
+ concat_flags(env[Regexp.last_match(1)], Regexp.last_match(2))
97
+ else
98
+ Regexp.last_match(2)
99
+ end
100
+ true
101
+ else
102
+ false
103
+ end
104
+ end
105
+
94
106
  recipe.configure_options = [
95
107
  "--disable-silent-rules",
96
108
  "--disable-dependency-tracking",
@@ -117,11 +129,42 @@ def process_recipe(name, version, static_p, cross_p)
117
129
  ]
118
130
  end
119
131
 
132
+ if RbConfig::CONFIG['target_cpu'] == 'universal'
133
+ %w[CFLAGS LDFLAGS].each do |key|
134
+ unless env[key].include?('-arch')
135
+ env[key] = concat_flags(env[key], RbConfig::CONFIG['ARCH_FLAG'])
136
+ end
137
+ end
138
+ end
139
+
120
140
  recipe.configure_options += env.map do |key, value|
121
141
  "#{key}=#{value.strip}"
122
142
  end
123
143
 
124
- recipe.cook
144
+ checkpoint = "#{recipe.target}/#{recipe.name}-#{recipe.version}-#{recipe.host}.installed"
145
+
146
+ if File.exist?(checkpoint)
147
+ message("Building Ruby Magic with a packaged version of #{name}-#{version}.\n")
148
+ else
149
+ message(<<~EOM)
150
+ ---------- IMPORTANT NOTICE ----------
151
+ Building Ruby Magic with a packaged version of #{name}-#{version}.
152
+ Configuration options: #{recipe.configure_options.shelljoin}
153
+ EOM
154
+
155
+ unless recipe.patch_files.empty?
156
+ message("The following patches are being applied:\n")
157
+
158
+ recipe.patch_files.each do |patch|
159
+ message(" - %s\n" % File.basename(patch))
160
+ end
161
+ end
162
+
163
+ recipe.cook
164
+
165
+ FileUtils.touch(checkpoint)
166
+ end
167
+
125
168
  recipe.activate
126
169
  end
127
170
  end
@@ -220,6 +263,10 @@ append_ldflags(ENV["LDFLAGS"].split) if ENV["LDFLAGS"]
220
263
 
221
264
  $LIBS = concat_flags($LIBS, ENV["LIBS"]) if ENV["LIBS"]
222
265
 
266
+ if truffle?
267
+ $CPPFLAGS += " -DMAGIC_CUSTOM_CHECK_TYPE"
268
+ end
269
+
223
270
  if config_system_libraries?
224
271
  message "Building ruby-magic using system libraries.\n"
225
272
 
@@ -229,16 +276,19 @@ if config_system_libraries?
229
276
  else
230
277
  message "Building ruby-magic using packaged libraries.\n"
231
278
 
279
+ require 'yaml'
280
+ dependencies = YAML.load_file(File.join(PACKAGE_ROOT_DIR, "dependencies.yml"))
281
+
232
282
  static_p = config_static?
233
283
  message "Static linking is #{static_p ? 'enabled' : 'disabled'}.\n"
234
284
  cross_build_p = config_cross_build?
235
285
  message "Cross build is #{cross_build_p ? 'enabled' : 'disabled'}.\n"
236
286
 
237
- libmagic_recipe = process_recipe('libmagic', LIBMAGIC_TAG, static_p, cross_build_p) do |recipe|
287
+ libmagic_recipe = process_recipe('libmagic', dependencies["libmagic"]["version"], static_p, cross_build_p) do |recipe|
238
288
  recipe.files = [{
239
- url: "https://ruby-magic.s3.eu-central-1.amazonaws.com/file-#{recipe.version}.tar.gz",
240
- sha256: LIBIMAGE_SHA256
241
- }]
289
+ url: "https://ruby-magic.s3.nl-ams.scw.cloud/file-#{recipe.version}.tar.gz",
290
+ sha256: dependencies["libmagic"]["sha256"],
291
+ }]
242
292
  end
243
293
 
244
294
  $LIBPATH = [File.join(libmagic_recipe.path, 'lib')]
@@ -4,60 +4,6 @@ extern "C" {
4
4
 
5
5
  #include "ruby-magic.h"
6
6
 
7
- static int rb_mgc_do_not_auto_load;
8
- static int rb_mgc_do_not_stop_on_error;
9
- static int rb_mgc_warning;
10
-
11
- static ID id_at_flags;
12
- static ID id_at_paths;
13
-
14
- static VALUE rb_cMagic = Qundef;
15
-
16
- static VALUE rb_mgc_eError = Qundef;
17
- static VALUE rb_mgc_eMagicError = Qundef;
18
- static VALUE rb_mgc_eLibraryError = Qundef;
19
- static VALUE rb_mgc_eParameterError = Qundef;
20
- static VALUE rb_mgc_eFlagsError = Qundef;
21
- static VALUE rb_mgc_eNotImplementedError = Qundef;
22
-
23
- void Init_magic(void);
24
-
25
- static VALUE magic_get_parameter_internal(void *data);
26
- static VALUE magic_set_parameter_internal(void *data);
27
- static VALUE magic_get_flags_internal(void *data);
28
- static VALUE magic_set_flags_internal(void *data);
29
- static VALUE magic_load_internal(void *data);
30
- static VALUE magic_load_buffers_internal(void *data);
31
- static VALUE magic_compile_internal(void *data);
32
- static VALUE magic_check_internal(void *data);
33
- static VALUE magic_file_internal(void *data);
34
- static VALUE magic_buffer_internal(void *data);
35
- static VALUE magic_descriptor_internal(void *data);
36
- static VALUE magic_close_internal(void *data);
37
-
38
- static void* nogvl_magic_load(void *data);
39
- static void* nogvl_magic_compile(void *data);
40
- static void* nogvl_magic_check(void *data);
41
- static void* nogvl_magic_file(void *data);
42
- static void* nogvl_magic_descriptor(void *data);
43
-
44
- static VALUE magic_allocate(VALUE klass);
45
- static void magic_mark(void *data);
46
- static void magic_free(void *data);
47
- static VALUE magic_exception_wrapper(VALUE value);
48
- static VALUE magic_exception(void *data);
49
- static void magic_library_close(void *data);
50
- static VALUE magic_library_error(VALUE klass, void *data);
51
- static VALUE magic_generic_error(VALUE klass, int magic_errno,
52
- const char *magic_error);
53
- static VALUE magic_lock(VALUE object, VALUE (*function)(ANYARGS),
54
- void *data);
55
- static VALUE magic_unlock(VALUE object);
56
- static VALUE magic_return(void *data);
57
- static int magic_flags(VALUE object);
58
- static int magic_set_flags(VALUE object, VALUE value);
59
- static VALUE magic_set_paths(VALUE object, VALUE value);
60
-
61
7
  /*
62
8
  * call-seq:
63
9
  * Magic.do_not_auto_load -> boolean
@@ -539,7 +485,7 @@ rb_mgc_load(VALUE object, VALUE arguments)
539
485
  klass, klass);
540
486
  }
541
487
 
542
- ma.flags = magic_flags(object);
488
+ ma.flags = magic_get_flags(object);
543
489
 
544
490
  if (!RARRAY_EMPTY_P(arguments)) {
545
491
  value = magic_join(arguments, CSTR2RVAL(":"));
@@ -614,7 +560,7 @@ rb_mgc_load_buffers(VALUE object, VALUE arguments)
614
560
  sizes[i] = (size_t)RSTRING_LEN(value);
615
561
  }
616
562
 
617
- ma.flags = magic_flags(object);
563
+ ma.flags = magic_get_flags(object);
618
564
  ma.type.buffers.count = count;
619
565
  ma.type.buffers.pointers = pointers;
620
566
  ma.type.buffers.sizes = sizes;
@@ -694,7 +640,7 @@ rb_mgc_compile(VALUE object, VALUE value)
694
640
  MAGIC_CHECK_OPEN(object);
695
641
  MAGIC_COOKIE(mo, ma.cookie);
696
642
 
697
- ma.flags = magic_flags(object);
643
+ ma.flags = magic_get_flags(object);
698
644
  ma.type.file.path = RVAL2CSTR(value);
699
645
 
700
646
  MAGIC_SYNCHRONIZED(magic_compile_internal, &ma);
@@ -721,7 +667,7 @@ rb_mgc_check(VALUE object, VALUE value)
721
667
  MAGIC_CHECK_OPEN(object);
722
668
  MAGIC_COOKIE(mo, ma.cookie);
723
669
 
724
- ma.flags = magic_flags(object);
670
+ ma.flags = magic_get_flags(object);
725
671
  ma.type.file.path = RVAL2CSTR(value);
726
672
 
727
673
  MAGIC_SYNCHRONIZED(magic_check_internal, &ma);
@@ -759,7 +705,7 @@ rb_mgc_file(VALUE object, VALUE value)
759
705
  goto error;
760
706
 
761
707
  ma.stop_on_errors = mo->stop_on_errors;
762
- ma.flags = magic_flags(object);
708
+ ma.flags = magic_get_flags(object);
763
709
  ma.type.file.path = RVAL2CSTR(value);
764
710
 
765
711
  MAGIC_SYNCHRONIZED(magic_file_internal, &ma);
@@ -821,7 +767,7 @@ rb_mgc_buffer(VALUE object, VALUE value)
821
767
 
822
768
  StringValue(value);
823
769
 
824
- ma.flags = magic_flags(object);
770
+ ma.flags = magic_get_flags(object);
825
771
  ma.type.buffers.pointers = (void **)RSTRING_PTR(value);
826
772
  ma.type.buffers.sizes = (size_t *)RSTRING_LEN(value);
827
773
 
@@ -857,7 +803,7 @@ rb_mgc_descriptor(VALUE object, VALUE value)
857
803
  MAGIC_CHECK_LOADED(object);
858
804
  MAGIC_COOKIE(mo, ma.cookie);
859
805
 
860
- ma.flags = magic_flags(object);
806
+ ma.flags = magic_get_flags(object);
861
807
  ma.type.file.fd = NUM2INT(value);
862
808
 
863
809
  MAGIC_SYNCHRONIZED(magic_descriptor_internal, &ma);
@@ -1142,6 +1088,34 @@ magic_descriptor_internal(void *data)
1142
1088
  return (VALUE)NULL;
1143
1089
  }
1144
1090
 
1091
+ static inline void*
1092
+ magic_library_open(void)
1093
+ {
1094
+ magic_t cookie;
1095
+
1096
+ cookie = magic_open_wrapper(MAGIC_NONE);
1097
+ if (!cookie) {
1098
+ errno = ENOMEM;
1099
+ return NULL;
1100
+ }
1101
+
1102
+ return cookie;
1103
+ }
1104
+
1105
+ static inline void
1106
+ magic_library_close(void *data)
1107
+ {
1108
+ magic_object_t *mo = data;
1109
+
1110
+ assert(mo != NULL && \
1111
+ "Must be a valid pointer to `magic_object_t' type");
1112
+
1113
+ if (mo->cookie)
1114
+ magic_close_wrapper(mo->cookie);
1115
+
1116
+ mo->cookie = NULL;
1117
+ }
1118
+
1145
1119
  static VALUE
1146
1120
  magic_allocate(VALUE klass)
1147
1121
  {
@@ -1163,8 +1137,8 @@ magic_allocate(VALUE klass)
1163
1137
  mo->database_loaded = 0;
1164
1138
  mo->stop_on_errors = 0;
1165
1139
 
1166
- mo->cookie = magic_open_wrapper(MAGIC_NONE);
1167
- local_errno = ENOMEM;
1140
+ mo->cookie = magic_library_open();
1141
+ local_errno = errno;
1168
1142
 
1169
1143
  if (!mo->cookie) {
1170
1144
  ruby_xfree(mo);
@@ -1175,11 +1149,22 @@ magic_allocate(VALUE klass)
1175
1149
  E_MAGIC_LIBRARY_INITIALIZE);
1176
1150
  }
1177
1151
 
1178
- return Data_Wrap_Struct(klass, magic_mark, magic_free, mo);
1152
+ return TypedData_Wrap_Struct(klass, &rb_magic_type, mo);
1179
1153
  }
1180
1154
 
1181
1155
  static inline void
1182
- magic_library_close(void *data)
1156
+ magic_mark(void *data)
1157
+ {
1158
+ magic_object_t *mo = data;
1159
+
1160
+ assert(mo != NULL && \
1161
+ "Must be a valid pointer to `magic_object_t' type");
1162
+
1163
+ MAGIC_GC_MARK(mo->mutex);
1164
+ }
1165
+
1166
+ static inline void
1167
+ magic_free(void *data)
1183
1168
  {
1184
1169
  magic_object_t *mo = data;
1185
1170
 
@@ -1187,38 +1172,37 @@ magic_library_close(void *data)
1187
1172
  "Must be a valid pointer to `magic_object_t' type");
1188
1173
 
1189
1174
  if (mo->cookie)
1190
- magic_close_wrapper(mo->cookie);
1175
+ magic_library_close(data);
1191
1176
 
1192
1177
  mo->cookie = NULL;
1178
+ mo->mutex = Qundef;
1179
+
1180
+ ruby_xfree(mo);
1193
1181
  }
1194
1182
 
1195
- static inline void
1196
- magic_mark(void *data)
1183
+ static inline size_t
1184
+ magic_size(const void *data)
1197
1185
  {
1198
- magic_object_t *mo = data;
1186
+ const magic_object_t *mo = data;
1199
1187
 
1200
1188
  assert(mo != NULL && \
1201
1189
  "Must be a valid pointer to `magic_object_t' type");
1202
1190
 
1203
- rb_gc_mark(mo->mutex);
1191
+ return sizeof(*mo);
1204
1192
  }
1205
1193
 
1194
+ #if defined(HAVE_RUBY_GC_COMPACT)
1206
1195
  static inline void
1207
- magic_free(void *data)
1196
+ magic_compact(void *data)
1208
1197
  {
1209
1198
  magic_object_t *mo = data;
1210
1199
 
1211
1200
  assert(mo != NULL && \
1212
1201
  "Must be a valid pointer to `magic_object_t' type");
1213
1202
 
1214
- if (mo->cookie)
1215
- magic_library_close(data);
1216
-
1217
- mo->cookie = NULL;
1218
- mo->mutex = Qundef;
1219
-
1220
- ruby_xfree(mo);
1203
+ mo->mutex = rb_gc_location(mo->mutex);
1221
1204
  }
1205
+ #endif /* HAVE_RUBY_GC_COMPACT */
1222
1206
 
1223
1207
  static inline VALUE
1224
1208
  magic_exception_wrapper(VALUE value)
@@ -1362,7 +1346,7 @@ magic_return(void *data)
1362
1346
  }
1363
1347
 
1364
1348
  static inline int
1365
- magic_flags(VALUE object)
1349
+ magic_get_flags(VALUE object)
1366
1350
  {
1367
1351
  return NUM2INT(rb_ivar_get(object, id_at_flags));
1368
1352
  }
@@ -1379,6 +1363,19 @@ magic_set_paths(VALUE object, VALUE value)
1379
1363
  return rb_ivar_set(object, id_at_paths, value);
1380
1364
  }
1381
1365
 
1366
+ static const rb_data_type_t rb_magic_type = {
1367
+ .wrap_struct_name = "magic",
1368
+ .function = {
1369
+ .dmark = magic_mark,
1370
+ .dfree = magic_free,
1371
+ .dsize = magic_size,
1372
+ #if defined(HAVE_RUBY_GC_COMPACT)
1373
+ .dcompact = magic_compact,
1374
+ #endif /* HAVE_RUBY_GC_COMPACT */
1375
+ },
1376
+ .flags = RUBY_TYPED_FREE_IMMEDIATELY,
1377
+ };
1378
+
1382
1379
  void
1383
1380
  Init_magic(void)
1384
1381
  {
@@ -11,7 +11,7 @@ extern "C" {
11
11
  #define MAGIC_SYNCHRONIZED(f, d) magic_lock(object, (f), (d))
12
12
 
13
13
  #define MAGIC_OBJECT(o) \
14
- Data_Get_Struct(object, magic_object_t, (o))
14
+ TypedData_Get_Struct(object, magic_object_t, &rb_magic_type, (o))
15
15
 
16
16
  #define MAGIC_COOKIE(o, c) \
17
17
  ((c) = MAGIC_OBJECT((o))->cookie)
@@ -83,6 +83,7 @@ enum error {
83
83
  E_NOT_ENOUGH_MEMORY,
84
84
  E_ARGUMENT_MISSING,
85
85
  E_ARGUMENT_TYPE_INVALID,
86
+ E_ARGUMENT_TYPE_UNKNOWN,
86
87
  E_ARGUMENT_TYPE_ARRAY_EMPTY,
87
88
  E_ARGUMENT_TYPE_ARRAY_STRINGS,
88
89
  E_MAGIC_LIBRARY_INITIALIZE,
@@ -141,6 +142,7 @@ static const char *errors[] = {
141
142
  [E_NOT_ENOUGH_MEMORY] = "cannot allocate memory",
142
143
  [E_ARGUMENT_MISSING] = "wrong number of arguments (given %d, expected %d)",
143
144
  [E_ARGUMENT_TYPE_INVALID] = "wrong argument type %s (expected %s)",
145
+ [E_ARGUMENT_TYPE_UNKNOWN] = "unknown type 0x%x (0x%x given)",
144
146
  [E_ARGUMENT_TYPE_ARRAY_EMPTY] = "arguments list cannot be empty (expected array of String)",
145
147
  [E_ARGUMENT_TYPE_ARRAY_STRINGS] = "wrong argument type %s in arguments list (expected String)",
146
148
  [E_MAGIC_LIBRARY_INITIALIZE] = "failed to initialize Magic library",
@@ -153,6 +155,93 @@ static const char *errors[] = {
153
155
  NULL
154
156
  };
155
157
 
158
+ #if defined(MAGIC_CUSTOM_CHECK_TYPE)
159
+ static const char *ruby_types[] = {
160
+ "", /* Not an object */
161
+ [T_OBJECT] = "Object",
162
+ [T_CLASS] = "Class",
163
+ [T_MODULE] = "Module",
164
+ [T_FLOAT] = "Float",
165
+ [T_STRING] = "String",
166
+ [T_REGEXP] = "Regexp",
167
+ [T_ARRAY] = "Array",
168
+ [T_HASH] = "Hash",
169
+ [T_STRUCT] = "Struct",
170
+ [T_BIGNUM] = "Integer",
171
+ [T_FILE] = "File",
172
+ "", /* Internal use */
173
+ [T_MATCH] = "MatchData",
174
+ [T_COMPLEX] = "Complex",
175
+ [T_RATIONAL] = "Rational",
176
+ "", /* Internal use */
177
+ [T_NIL] = "nil",
178
+ [T_TRUE] = "true",
179
+ [T_FALSE] = "false",
180
+ [T_SYMBOL] = "Symbol",
181
+ [T_FIXNUM] = "Integer",
182
+ "", /* Internal use */
183
+ NULL
184
+ };
185
+
186
+ static const char *
187
+ magic_ruby_type_name(int type)
188
+ {
189
+ const char *name;
190
+
191
+ if (type >= ARRAY_SIZE(ruby_types))
192
+ return NULL;
193
+
194
+ name = ruby_types[type];
195
+ if (name)
196
+ return name;
197
+
198
+ return NULL;
199
+ }
200
+
201
+ static const char *
202
+ magic_ruby_class_name(VALUE object)
203
+ {
204
+ const char *name = NULL;
205
+
206
+ if (NIL_P(object))
207
+ name = "nil";
208
+ else if (RB_TYPE_P(object, T_TRUE))
209
+ name = "true";
210
+ else if (RB_TYPE_P(object, T_FALSE))
211
+ name = "false";
212
+ else
213
+ name = CLASS_NAME(object);
214
+
215
+ return name;
216
+ }
217
+
218
+ void
219
+ magic_check_ruby_type(VALUE object, int type)
220
+ {
221
+ const char *name;
222
+ int object_type = TYPE(object);
223
+
224
+ if (object == Qundef)
225
+ rb_bug("invalid type leaked to the Ruby space");
226
+
227
+ if (object_type > T_MASK || object_type == T_DATA)
228
+ goto error;
229
+
230
+ if (object_type == type)
231
+ return;
232
+
233
+ name = magic_ruby_type_name(type);
234
+ if (name)
235
+ rb_raise(rb_eTypeError, error(E_ARGUMENT_TYPE_INVALID),
236
+ magic_ruby_class_name(object),
237
+ name);
238
+ error:
239
+ rb_raise(rb_eTypeError, error(E_ARGUMENT_TYPE_UNKNOWN),
240
+ object_type,
241
+ type);
242
+ }
243
+ #endif /* MAGIC_CUSTOM_CHECK_TYPE */
244
+
156
245
  static inline VALUE
157
246
  magic_shift(VALUE v)
158
247
  {
@@ -233,7 +322,7 @@ magic_check_type(VALUE object, RVALUE_TYPE type)
233
322
  if (type == T_FIXNUM && !RVAL2CBOOL(boolean))
234
323
  MAGIC_ARGUMENT_TYPE_ERROR(object, rb_class2name(T_INTEGER));
235
324
 
236
- Check_Type(object, type);
325
+ MAGIC_CHECK_RUBY_TYPE(object, type);
237
326
  }
238
327
 
239
328
  static inline void
@@ -250,10 +339,114 @@ magic_check_type_array_of_strings(VALUE object)
250
339
  }
251
340
  }
252
341
 
342
+ static int rb_mgc_do_not_auto_load;
343
+ static int rb_mgc_do_not_stop_on_error;
344
+ static int rb_mgc_warning;
345
+
346
+ static ID id_at_flags;
347
+ static ID id_at_paths;
348
+
349
+ static VALUE rb_cMagic;
350
+
351
+ static VALUE rb_mgc_eError;
352
+ static VALUE rb_mgc_eMagicError;
353
+ static VALUE rb_mgc_eLibraryError;
354
+ static VALUE rb_mgc_eNotImplementedError;
355
+ static VALUE rb_mgc_eParameterError;
356
+ static VALUE rb_mgc_eFlagsError;
357
+
358
+ static const rb_data_type_t rb_magic_type;
359
+
360
+ void Init_magic(void);
361
+
362
+ VALUE rb_mgc_get_do_not_auto_load_global(VALUE object);
363
+ VALUE rb_mgc_set_do_not_auto_load_global(VALUE object, VALUE value);
364
+ VALUE rb_mgc_get_do_not_stop_on_error_global(VALUE object);
365
+ VALUE rb_mgc_set_do_not_stop_on_error_global(VALUE object, VALUE value);
366
+
367
+ VALUE rb_mgc_initialize(VALUE object, VALUE arguments);
368
+
369
+ VALUE rb_mgc_get_do_not_stop_on_error(VALUE object);
370
+ VALUE rb_mgc_set_do_not_stop_on_error(VALUE object, VALUE value);
371
+
372
+ VALUE rb_mgc_open_p(VALUE object);
373
+ VALUE rb_mgc_close(VALUE object);
253
374
  VALUE rb_mgc_close_p(VALUE object);
375
+
376
+ VALUE rb_mgc_get_paths(VALUE object);
377
+
378
+ VALUE rb_mgc_get_parameter(VALUE object, VALUE tag);
379
+ VALUE rb_mgc_set_parameter(VALUE object, VALUE tag, VALUE value);
380
+
381
+ VALUE rb_mgc_get_flags(VALUE object);
382
+ VALUE rb_mgc_set_flags(VALUE object, VALUE value);
383
+
254
384
  VALUE rb_mgc_load(VALUE object, VALUE arguments);
385
+ VALUE rb_mgc_load_buffers(VALUE object, VALUE arguments);
386
+ VALUE rb_mgc_load_p(VALUE object);
387
+
388
+ VALUE rb_mgc_compile(VALUE object, VALUE arguments);
389
+ VALUE rb_mgc_check(VALUE object, VALUE arguments);
390
+
391
+ VALUE rb_mgc_file(VALUE object, VALUE value);
392
+ VALUE rb_mgc_buffer(VALUE object, VALUE value);
255
393
  VALUE rb_mgc_descriptor(VALUE object, VALUE value);
256
394
 
395
+ VALUE rb_mgc_version(VALUE object);
396
+
397
+ static VALUE magic_get_parameter_internal(void *data);
398
+ static VALUE magic_set_parameter_internal(void *data);
399
+
400
+ static VALUE magic_get_flags_internal(void *data);
401
+ static VALUE magic_set_flags_internal(void *data);
402
+
403
+ static VALUE magic_load_internal(void *data);
404
+ static VALUE magic_load_buffers_internal(void *data);
405
+
406
+ static VALUE magic_compile_internal(void *data);
407
+ static VALUE magic_check_internal(void *data);
408
+
409
+ static VALUE magic_file_internal(void *data);
410
+ static VALUE magic_buffer_internal(void *data);
411
+ static VALUE magic_descriptor_internal(void *data);
412
+
413
+ static VALUE magic_close_internal(void *data);
414
+
415
+ static void* nogvl_magic_load(void *data);
416
+ static void* nogvl_magic_compile(void *data);
417
+ static void* nogvl_magic_check(void *data);
418
+ static void* nogvl_magic_file(void *data);
419
+ static void* nogvl_magic_descriptor(void *data);
420
+
421
+ static void* magic_library_open(void);
422
+ static void magic_library_close(void *data);
423
+
424
+ static VALUE magic_allocate(VALUE klass);
425
+ static void magic_mark(void *data);
426
+ static void magic_free(void *data);
427
+ static size_t magic_size(const void *data);
428
+ #if defined(HAVE_RUBY_GC_COMPACT)
429
+ static void magic_compact(void *data);
430
+ #endif
431
+
432
+ static VALUE magic_exception_wrapper(VALUE value);
433
+ static VALUE magic_exception(void *data);
434
+
435
+ static VALUE magic_library_error(VALUE klass, void *data);
436
+ static VALUE magic_generic_error(VALUE klass, int magic_errno,
437
+ const char *magic_error);
438
+
439
+ static VALUE magic_lock(VALUE object, VALUE (*function)(ANYARGS),
440
+ void *data);
441
+ static VALUE magic_unlock(VALUE object);
442
+
443
+ static VALUE magic_return(void *data);
444
+
445
+ static int magic_get_flags(VALUE object);
446
+ static int magic_set_flags(VALUE object, VALUE value);
447
+
448
+ static VALUE magic_set_paths(VALUE object, VALUE value);
449
+
257
450
  #if defined(__cplusplus)
258
451
  }
259
452
  #endif
data/lib/magic/version.rb CHANGED
@@ -4,7 +4,7 @@ class Magic
4
4
  #
5
5
  # Current version of _Magic_.
6
6
  #
7
- VERSION = '0.3.2'.freeze
7
+ VERSION = '0.4.0'.freeze
8
8
 
9
9
  class << self
10
10
  #
@@ -0,0 +1,44 @@
1
+ From 0f2752ad4d7ea65c80d76493899aca67e90be524 Mon Sep 17 00:00:00 2001
2
+ From: =?UTF-8?q?Krzysztof=20Wilczy=C5=84ski?= <kw@linux.com>
3
+ Date: Mon, 5 Apr 2021 16:51:59 +0000
4
+ Subject: [PATCH] Don't attempt to build tests, documentation and Python
5
+ bindings
6
+ MIME-Version: 1.0
7
+ Content-Type: text/plain; charset=UTF-8
8
+ Content-Transfer-Encoding: 8bit
9
+
10
+ Signed-off-by: Krzysztof Wilczyński <kw@linux.com>
11
+ ---
12
+ Makefile.am | 2 +-
13
+ Makefile.in | 2 +-
14
+ 2 files changed, 2 insertions(+), 2 deletions(-)
15
+
16
+ diff --git a/Makefile.am b/Makefile.am
17
+ index 2ab67ed..c7fafeb 100644
18
+ --- a/Makefile.am
19
+ +++ b/Makefile.am
20
+ @@ -2,7 +2,7 @@ ACLOCAL_AMFLAGS = -I m4
21
+
22
+ EXTRA_DIST = MAINT
23
+
24
+ -SUBDIRS = src magic tests doc python
25
+ +SUBDIRS = src magic
26
+
27
+ # This variable must have 'exec' in its name, in order to be installed
28
+ # by 'install-exec' target (instead of default 'install-data')
29
+ diff --git a/Makefile.in b/Makefile.in
30
+ index e19b15e..dcb5ce6 100644
31
+ --- a/Makefile.in
32
+ +++ b/Makefile.in
33
+ @@ -358,7 +358,7 @@ top_builddir = @top_builddir@
34
+ top_srcdir = @top_srcdir@
35
+ ACLOCAL_AMFLAGS = -I m4
36
+ EXTRA_DIST = MAINT
37
+ -SUBDIRS = src magic tests doc python
38
+ +SUBDIRS = src magic
39
+
40
+ # This variable must have 'exec' in its name, in order to be installed
41
+ # by 'install-exec' target (instead of default 'install-data')
42
+ --
43
+ 2.31.0
44
+
Binary file
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ruby-magic
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.2
4
+ version: 0.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Krzysztof Wilczyński
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain:
11
11
  - kwilczynski-public.pem
12
- date: 2021-04-03 00:00:00.000000000 Z
12
+ date: 2021-04-08 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: mini_portile2
@@ -42,6 +42,7 @@ files:
42
42
  - LICENSE
43
43
  - NOTICE
44
44
  - README.md
45
+ - dependencies.yml
45
46
  - ext/magic/common.h
46
47
  - ext/magic/extconf.rb
47
48
  - ext/magic/functions.c
@@ -53,6 +54,8 @@ files:
53
54
  - lib/magic/core/file.rb
54
55
  - lib/magic/core/string.rb
55
56
  - lib/magic/version.rb
57
+ - patches/libmagic/0001-Don-t-attempt-to-build-tests-documentation-and-Python-bindings.patch
58
+ - ports/archives/file-5.39.tar.gz
56
59
  homepage: https://github.com/kwilczynski/ruby-magic
57
60
  licenses:
58
61
  - Apache-2.0