You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
auto merge of #11787 : alexcrichton/rust/refactor, r=brson
It was decided a long, long time ago that libextra should not exist, but rather its modules should be split out into smaller independent libraries maintained outside of the compiler itself. The theory was to use `rustpkg` to manage dependencies in order to move everything out of the compiler, but maintain an ease of usability.
Sadly, the work on `rustpkg` isn't making progress as quickly as expected, but the need for dissolving libextra is becoming more and more pressing. Because of this, we've thought that a good interim solution would be to simply package more libraries with the rust distribution itself. Instead of dissolving libextra into libraries outside of the mozilla/rust repo, we can dissolve libraries into the mozilla/rust repo for now.
Work on this has been excruciatingly painful in the past because the makefiles are completely opaque to all but a few. Adding a new library involved adding about 100 lines spread out across 8 files (incredibly error prone). The first commit of this pull request targets this pain point. It does not rewrite the build system, but rather refactors large portions of it. Afterwards, adding a new library is as simple as modifying 2 lines (easy, right?). The build system automatically keeps track of dependencies between crates (rust *and* native), promotes binaries between stages, tracks dependencies of installed tools, etc, etc.
With this newfound buildsystem power, I chose the `extra::flate` module as the first candidate for removal from libextra. While a small module, this module is relative complex in that is has a C dependency and the compiler requires it (messing with the dependency graph a bit). Albeit I modified more than 2 lines of makefiles to accomodate libflate (the native dependency required 2 extra lines of modifications), but the removal process was easy to do and straightforward.
---
Testing-wise, I've cross-compiled, run tests, built some docs, installed, uninstalled, etc. I'm still working out a few kinks, and I'm sure that there's gonna be built system issues after this, but it should be working well for basic use!
cc #8784
# $(3) is filename (usually the target being created) to filter out from match
274
-
# (i.e. filename is not out-of-date artifact from prior Rust version/build)
275
230
#
276
231
# Note that a common bug is to accidentally construct the glob denoted
277
232
# by $(2) with a space character prefix, which invalidates the
278
233
# construction $(1)$(2).
279
-
defineCHECK_FOR_OLD_GLOB_MATCHES_EXCEPT
280
-
$(Q)MATCHES="$(filter-out%$(3),$(wildcard$(1)/$(2)))"; if [ -n "$$MATCHES" ] ; then echo "warning: there are previous" \'$(2)\' "libraries:" $$MATCHES; fi
234
+
defineCHECK_FOR_OLD_GLOB_MATCHES
235
+
$(Q)MATCHES="$(wildcard$(1))"; if [ -n "$$MATCHES" ] ; then echo "warning: there are previous" \'$(notdir$(2))\' "libraries:" $$MATCHES; fi
281
236
endef
282
237
283
238
# Same interface as above, but deletes rather than just listing the files.
284
239
ifdefVERBOSE
285
-
defineREMOVE_ALL_OLD_GLOB_MATCHES_EXCEPT
286
-
$(Q)MATCHES="$(filter-out%$(3),$(wildcard$(1)/$(2)))"; if [ -n "$$MATCHES" ] ; then echo "warning: removing previous" \'$(2)\' "libraries:" $$MATCHES; rm $$MATCHES ; fi
240
+
defineREMOVE_ALL_OLD_GLOB_MATCHES
241
+
$(Q)MATCHES="$(wildcard$(1))"; if [ -n "$$MATCHES" ] ; then echo "warning: removing previous" \'$(notdir$(1))\' "libraries:" $$MATCHES; rm $$MATCHES ; fi
287
242
endef
288
243
else
289
-
defineREMOVE_ALL_OLD_GLOB_MATCHES_EXCEPT
290
-
$(Q)MATCHES="$(filter-out%$(3),$(wildcard$(1)/$(2)))"; if [ -n "$$MATCHES" ] ; then rm $$MATCHES ; fi
244
+
defineREMOVE_ALL_OLD_GLOB_MATCHES
245
+
$(Q)MATCHES="$(wildcard$(1))"; if [ -n "$$MATCHES" ] ; then rm $$MATCHES ; fi
291
246
endef
292
247
endif
293
248
@@ -298,72 +253,15 @@ endif
298
253
# soon. (This is in contrast to the macros above, which are meant to
299
254
# be run at the outset of a command list in a rule.)
300
255
ifdefVERBOSE
301
-
defineLIST_ALL_OLD_GLOB_MATCHES_EXCEPT
302
-
@echo "info: now are following matches for" '$(2)' "libraries:"
0 commit comments