@@ -246,4 +246,50 @@ def redefine_build_jobs
246246 expect ( makeflags_during ) . to eq ( makeflags_before )
247247 end
248248 end
249+
250+ describe "make jobserver on BSD" do
251+ # BSD make (the default `make` on FreeBSD) can't parse the GNU
252+ # `--jobserver-auth` and aborts every native extension build, so the
253+ # jobserver must be skipped there.
254+ it "leaves MAKEFLAGS untouched" do
255+ parallel_installer = Bundler ::ParallelInstaller . new ( nil , [ ] , 5 , false , false )
256+
257+ makeflags_before = ENV [ "MAKEFLAGS" ]
258+ makeflags_during = :not_yielded
259+
260+ old_make = ENV [ "MAKE" ]
261+ ENV . delete ( "MAKE" )
262+ allow ( Gem ) . to receive ( :freebsd_platform? ) . and_return ( true )
263+ begin
264+ parallel_installer . send ( :with_jobserver ) do
265+ makeflags_during = ENV [ "MAKEFLAGS" ]
266+ end
267+ ensure
268+ ENV [ "MAKE" ] = old_make
269+ end
270+
271+ expect ( makeflags_during ) . to eq ( makeflags_before )
272+ end
273+
274+ # A BSD user who opts into gmake gets a make that understands the
275+ # jobserver, so it should still be set up.
276+ it "sets up the jobserver when gmake is used" do
277+ parallel_installer = Bundler ::ParallelInstaller . new ( nil , [ ] , 5 , false , false )
278+
279+ makeflags_during = :not_yielded
280+
281+ old_make = ENV [ "MAKE" ]
282+ ENV [ "MAKE" ] = "gmake"
283+ allow ( Gem ) . to receive ( :freebsd_platform? ) . and_return ( true )
284+ begin
285+ parallel_installer . send ( :with_jobserver ) do
286+ makeflags_during = ENV [ "MAKEFLAGS" ]
287+ end
288+ ensure
289+ ENV [ "MAKE" ] = old_make
290+ end
291+
292+ expect ( makeflags_during ) . to include ( "--jobserver-auth=" )
293+ end
294+ end
249295end
0 commit comments