| 1 | import os |
| 2 | import v.pkgconfig |
| 3 | |
| 4 | const vexe = os.getenv('VEXE') |
| 5 | |
| 6 | const vroot = os.dir(vexe) |
| 7 | |
| 8 | const samples_dir = os.join_path(vroot, 'vlib', 'v', 'pkgconfig', 'test_samples') |
| 9 | |
| 10 | fn test_vexe_and_vroot_exist() { |
| 11 | assert vexe != '' |
| 12 | assert vroot != '' |
| 13 | assert os.is_file(vexe) |
| 14 | assert os.is_dir(vroot) |
| 15 | assert os.is_dir(samples_dir) |
| 16 | } |
| 17 | |
| 18 | fn test_dependency_resolution_fails_correctly() { |
| 19 | pc_files := os.walk_ext(samples_dir, '.pc') |
| 20 | assert pc_files.len > 0 |
| 21 | mut errors := []string{} |
| 22 | for pc in pc_files { |
| 23 | pcname := os.file_name(pc).replace('.pc', '') |
| 24 | pkgconfig.load(pcname, use_default_paths: false, path: samples_dir) or { |
| 25 | errors << err.msg() |
| 26 | } |
| 27 | } |
| 28 | assert errors.len < pc_files.len |
| 29 | assert errors == ['could not resolve dependency xyz-unknown-package'] |
| 30 | } |
| 31 | |
| 32 | fn test_samples() { |
| 33 | pc_files := os.walk_ext(samples_dir, '.pc') |
| 34 | assert pc_files.len > 0 |
| 35 | for pc in pc_files { |
| 36 | pcname := os.file_name(pc).replace('.pc', '') |
| 37 | x := pkgconfig.load(pcname, use_default_paths: false, path: samples_dir) or { |
| 38 | if pcname == 'dep-resolution-fail' { |
| 39 | continue |
| 40 | } |
| 41 | println('>>> err: ${err}') |
| 42 | assert false |
| 43 | return |
| 44 | } |
| 45 | assert x.name != '' |
| 46 | assert x.modname != '' |
| 47 | assert x.version != '' |
| 48 | if pcname == 'gmodule-2.0' { |
| 49 | assert x.name == 'GModule' |
| 50 | assert x.modname == 'gmodule-2.0' |
| 51 | assert x.url == '' |
| 52 | assert x.version == '2.64.3' |
| 53 | assert x.description == 'Dynamic module loader for GLib' |
| 54 | assert x.libs == ['-Wl,--export-dynamic', '-L/usr/lib/x86_64-linux-gnu', '-lgmodule-2.0', |
| 55 | '-pthread', '-lglib-2.0', '-lpcre'] |
| 56 | assert x.libs_private == ['-ldl', '-pthread'] |
| 57 | assert x.cflags == ['-I/usr/include', '-pthread', '-I/usr/include/glib-2.0', |
| 58 | '-I/usr/lib/x86_64-linux-gnu/glib-2.0/include'] |
| 59 | assert x.vars == { |
| 60 | 'pcfiledir': samples_dir |
| 61 | 'prefix': '/usr' |
| 62 | 'libdir': '/usr/lib/x86_64-linux-gnu' |
| 63 | 'includedir': '/usr/include' |
| 64 | 'gmodule_supported': 'true' |
| 65 | } |
| 66 | assert x.requires == ['gmodule-no-export-2.0', 'glib-2.0'] |
| 67 | assert x.requires_private == [] |
| 68 | assert x.conflicts == [] |
| 69 | } |
| 70 | if x.name == 'expat' { |
| 71 | assert x.url == 'http://www.libexpat.org' |
| 72 | } |
| 73 | if x.name == 'GLib' { |
| 74 | assert x.modname == 'glib-2.0' |
| 75 | assert x.libs == ['-L/usr/lib/x86_64-linux-gnu', '-lglib-2.0', '-lpcre'] |
| 76 | assert x.libs_private == ['-pthread'] |
| 77 | assert x.cflags == ['-I/usr/include/glib-2.0', |
| 78 | '-I/usr/lib/x86_64-linux-gnu/glib-2.0/include', '-I/usr/include'] |
| 79 | assert x.vars == { |
| 80 | 'pcfiledir': samples_dir |
| 81 | 'prefix': '/usr' |
| 82 | 'libdir': '/usr/lib/x86_64-linux-gnu' |
| 83 | 'includedir': '/usr/include' |
| 84 | 'bindir': '/usr/bin' |
| 85 | 'glib_genmarshal': '/usr/bin/glib-genmarshal' |
| 86 | 'gobject_query': '/usr/bin/gobject-query' |
| 87 | 'glib_mkenums': '/usr/bin/glib-mkenums' |
| 88 | } |
| 89 | assert x.requires_private == ['libpcre'] |
| 90 | assert x.version == '2.64.3' |
| 91 | assert x.conflicts == [] |
| 92 | } |
| 93 | if x.name == 'OpenSSL' { |
| 94 | assert x.modname == 'openssl-3.3.2' |
| 95 | assert x.version == '3.3.2' |
| 96 | assert x.description == 'Secure Sockets Layer and cryptography libraries and tools' |
| 97 | assert x.vars['prefix'] == '/opt/homebrew/Cellar/openssl@3/3.3.2' |
| 98 | assert x.vars['libdir'] == '/opt/homebrew/Cellar/openssl@3/3.3.2/lib' |
| 99 | assert x.vars['includedir'] == '/opt/homebrew/Cellar/openssl@3/3.3.2/include' |
| 100 | } |
| 101 | } |
| 102 | } |
| 103 | |