diff --git a/lib/pkg-config.rb b/lib/pkg-config.rb index 542d67c..5fb9b32 100644 --- a/lib/pkg-config.rb +++ b/lib/pkg-config.rb @@ -585,15 +585,15 @@ def normalize_cflags(cflags) # https://github.com/pkgconf/pkgconf/blob/pkgconf-2.5.1/libpkgconf/fragment.c#L381-L416 def merge_back_cflags(cflags) merge_backed_cflags = [] - cflags.each do |cflag| + seen = {} + cflags.reverse_each do |cflag| if mergeable_flag?(cflag) - # NOTE: This may be slow because this checks merge_back_cflags N times - # (where N is the number of mergeable flags). - merge_backed_cflags.delete(cflag) + next if seen.key?(cflag) + seen[cflag] = true end merge_backed_cflags << cflag end - merge_backed_cflags + merge_backed_cflags.reverse! end def mergeable_flag?(flag) diff --git a/test/test-pkg-config.rb b/test/test-pkg-config.rb index 67893b3..2f703fd 100644 --- a/test/test-pkg-config.rb +++ b/test/test-pkg-config.rb @@ -343,5 +343,11 @@ def test_mixed merge_back_cflags(["-DFOO", "-Wall", "-Wl,--as-needed", "-DFOO", "-Wall", "-Wl,--as-needed"])) end + + def test_preserves_the_last_mergeable_occurrence + assert_equal(["-O2", "-DFOO", "-Wextra", "-O3"], + merge_back_cflags(["-DFOO", "-O2", "-DFOO", + "-Wextra", "-O3"])) + end end end