| 1 | module builder |
| 2 | |
| 3 | import os |
| 4 | import v.pref |
| 5 | import v.cflag |
| 6 | |
| 7 | // get flags for current os |
| 8 | fn (mut v Builder) get_os_cflags() []cflag.CFlag { |
| 9 | mut flags := []cflag.CFlag{} |
| 10 | mut ctimedefines := []string{} |
| 11 | if v.pref.compile_defines.len > 0 { |
| 12 | ctimedefines << v.pref.compile_defines |
| 13 | } |
| 14 | for mut flag in v.table.cflags { |
| 15 | ext := os.file_ext(flag.value) |
| 16 | if ext in ['.o', '.obj'] { |
| 17 | flag.cached = v.pref.cache_manager.mod_postfix_with_key2cpath(flag.mod, ext, |
| 18 | os.real_path(flag.value)) |
| 19 | } |
| 20 | if flag.os == '' || flag.os in ctimedefines { |
| 21 | flags << flag |
| 22 | continue |
| 23 | } |
| 24 | fos := pref.os_from_string(flag.os) or { pref.OS.all } |
| 25 | if fos != .all && fos == v.pref.os { |
| 26 | flags << flag |
| 27 | continue |
| 28 | } |
| 29 | if v.pref.os == .windows && flag.os == 'mingw' && v.pref.ccompiler != 'msvc' { |
| 30 | flags << flag |
| 31 | } |
| 32 | } |
| 33 | return flags |
| 34 | } |
| 35 | |
| 36 | fn (mut v Builder) get_rest_of_module_cflags(c &cflag.CFlag) []cflag.CFlag { |
| 37 | mut flags := []cflag.CFlag{} |
| 38 | cflags := v.get_os_cflags() |
| 39 | for flag in cflags { |
| 40 | if c.mod == flag.mod { |
| 41 | if c.name == flag.name && c.value == flag.value && c.os == flag.os { |
| 42 | continue |
| 43 | } |
| 44 | flags << flag |
| 45 | } |
| 46 | } |
| 47 | return flags |
| 48 | } |
| 49 | |