Skip to content

Commit bcad982

Browse files
rwtolbertbakpakin
authored andcommitted
Brief: Fix use of distinct on macOS lflags with -framework
Summary: Current code uses `distinct` to generate a unique list off lflags for linking executables. This fails on macOS when linking to a framework with flags like: ["-Lfoo" "-lbar" "-lfoo" "-framework" "Cocoa" "-framework" "OpenGL" "-lbar" "-framework" "Cocoa"] `distinct` generates: @["-Lfoo" "-lbar" "-lfoo" "-framework" "Cocoa" "OpenGL"] where `-framework` is missing for OpenGL.
1 parent 5601dc8 commit bcad982

File tree

1 file changed

+21
-1
lines changed

1 file changed

+21
-1
lines changed

spork/declare-cc.janet

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -804,11 +804,31 @@ int main(int argc, const char **argv) {
804804
false)
805805
static))
806806

807+
# locally specific distinct to deal with macOS flags like ["-framework" "Cocoa"]
808+
(defn distinct-flags [args]
809+
(def res @[])
810+
(def seen @{})
811+
(var item (next args))
812+
(while item
813+
(def val (args item))
814+
(if (or (= val "-framework") (= val "-weak_framework"))
815+
(do
816+
(set item (next args item))
817+
(def combined-flag (string val (args item)))
818+
(unless (in seen combined-flag)
819+
(put seen combined-flag true)
820+
(array/push res val (args item))))
821+
(unless (in seen val)
822+
(put seen val true)
823+
(array/push res val)))
824+
(set item (next args item)))
825+
res)
826+
807827
(def benv @{cc/*build-dir* bd
808828
cc/*defines* defines
809829
cc/*libs* libs
810830
cc/*msvc-libs* (distinct [;msvc-libs-extra ;msvc-libs ;static-libs])
811-
cc/*lflags* (distinct [;lflags ;dep-lflags])
831+
cc/*lflags* (distinct-flags [;lflags ;dep-lflags])
812832
cc/*cflags* [;other-cflags ;cflags]
813833
cc/*c++flags* (distinct [;other-cflags ;c++flags])
814834
cc/*static-libs* (distinct [;dep-libs ;static-libs])

0 commit comments

Comments
 (0)