Closed Bug 57282 Opened 25 years ago Closed 23 years ago

Building components selectively

Categories

(SeaMonkey :: Build Config, defect, P2)

Tracking

(Not tracked)

VERIFIED DUPLICATE of bug 173066
mozilla1.2final

People

(Reporter: hsivonen, Assigned: cls)

References

Details

(Keywords: embed, topembed-)

Attachments

(3 files)

Currently the build system attempts pull the entire SeaMonkeyAll from CVS even if you only want to build some components. As a result, building selected components of Mozilla is not feasible in a disk-space-challanged environment. It would help if the build system pulled only the sources required to build selected components.
This can already be done to a point on the unix side. cvs -z3 co mozilla/client.mk cd mozilla make -f client.mk pull_all BUILD_MODULES=xpcom,js ./configure --enable-modules=xpcom,js The list (build/unix/modules.mk) is far from complete, but it's a start. I'm not sure what the plans are for duplicating this functionality on windows or mac.
Status: NEW → ASSIGNED
Target Milestone: --- → mozilla0.6
Blocks: 58372
Severity: enhancement → major
Depends on: 24515, 34159
Priority: P3 → P2
Summary: [RFE] Checking out components selectively → Building components selectively
To do selective checkouts and builds on Mac, you'll have to create new files for the build. You should clone and modify the following files MozillaBuildFlags.txt MozillaCheckoutList.txt BuildMozillaDebug.pl BuildMozilla.pl PullMozilla.pl and possibly MozillaBuildList.pm if you can't leverage the existing project groupings.
Blocks: 57200
Depends on: 59454
At first glance, there appears to be no way to avoid building certain modules standalone without losing functionality (via ifdefs) or building much more than is needed for the standalone case (upto 10 additional modules depending upon dependencies). Case-in-point, xpcom. To build xpcom standalone means that you lose support for intl string handling in the nsCRT & nsLocalFile classes among other things. But to build the libraries required for intl string handling means dealing with another slew of deps outside of xpcom (like prefs, js, necko: and then deal with all of necko's deps). Now, in xpcom's case, the extra module deps are actually components so (in theory) they should be runtime optional. So, assuming that the goal of a standalone module is to encompass the same functionality as the non-standalone version, the ifdef solution needs to be shown the door. I'm not extremely familiar with other COM implementations but I was under the impression that each module that depends upon a component needs to Do The Right Thing(tm) if the component is not available. So assuming this is true, then all we really need to worry about is the external headers that declare the component interfaces used by a module. 1) The first option is to modify the existing standalone build arch to contain a list of dirs that are only traversed to export headers which should get rid of the cascading dependency problems. 2) The second option is to create a toplevel interfaces/ directory that would contain the actual public headers for the modules. For starters, I'm thinking about just moving the .idls to interfaces/. This way, we can clearly outline what the public interfaces of a particular module are and people who want to build xpcom or some other intl depend module standalone do not have to pull the entire intl source. Option 1 is fairly straightforward. The changes would not affect the normal build process. The only possibly side-effect would be if a module did something non-standard during the export phase (which most do not). And the downside is the additional source directory requirements. Option 2 is quite a bit more complicated and it does require changing the normal build process. It does allow us to clearly outline what the public interfaces of a particular module are and people who want to build xpcom or some other intl depend module standalone do not have to pull the entire intl source to use it. Any thoughts?
Target Milestone: mozilla0.6 → mozilla0.9
To test, you need to do this: cvs -z3 co mozilla/client.mk cd mozilla make -f client.mk pull_all BUILD_MODULES= env POSIXLY_CORRECT=1 patch -p0 < ~/standalone.patch make -f client.mk pull_all BUILD_MODULES=xpcom ./configure --enable-modules=xpcom make Ok, so what am I actually doing here? In build/unix/modules.mk, I'm creating a list of dep dirs in the same way that I create BUILD_MODULE_DIRS. Then I added a new rule set to config/rules.mk that causes recursive makes to be triggered if EXPORT_DIRS is set and it is only set in the toplevel Makefile. By adding intl & modules/libjar to the dep list, I am able to build xpcom and run nsTestSample without actually building the intl nor libjar components. Side notes: Right now, it's still kinda lame that we still require the module deps to be kept in 2 places (modules.mk & allmakefiles.sh). Eventually, --enable-module should be renamed to something like --enable-standalone.
Looks good, r=jag
Patch has been checked in.
Attachment 21318 [details] [diff] contains changes to make building standalone more efficient. Instead of pulling a toplevel directory like xpcom or intl (which are the entry points for building those modules) for standalone builds, we will actually list the directories we need to pull. Since I was unable to find a way to duplicate the exclude feature of cvs modules (!mozilla/dir), I modified client.mk so that it will pull a specified list of directories using the no-recurse option (-l) so that we recursively pull directories that we do not need. For example, when building js standalone, we do not need js/src/perlconnect, js/src/liveconnect, etc, so we just add js js/src & js/src/fdlibm to the no-recurse pull list. The downside of this is that build maintainers have to be more vigilant about tracking intermodule dependencies or else the standalone builds will be prone to breakage.
Those checkins broke the transformiix standalone build :-(. We need a _CVS_ in modules.mk, too. Adding this brings up two other bugs. They are fixed in my tree now. BUILD_MODULE_CVS_NS and BUILD_MODULE_DEP_DIRS can be empty, the checks are either missing or wrong (as they are defined). Patch follows in a second. Axel
Sorry about breaking transformiix. r=cls
fix for simple modules checked in Axel
Target Milestone: mozilla0.9 → mozilla1.0
Bugs targeted at mozilla1.0 without the mozilla1.0 keyword moved to mozilla1.0.1 (you can query for this string to delete spam or retrieve the list of bugs I've moved)
Target Milestone: mozilla1.0 → mozilla1.0.1
don't move bugs that are in the 1.0 dependency tree. sorry.
Target Milestone: mozilla1.0.1 → mozilla1.0
Keywords: topembed
Keywords: topembedembed, topembed-
Target Milestone: mozilla1.0 → Future
This should be fixed by the checkin for bug 173066. modules.mk is generated using the module dependencies listed in Makefiles by REQUIRES. See http://lxr.mozilla.org/mozilla/source/tools/module-deps/bootstrap.pl . The full list of modules (currently 147) can be found at the generated modules.mk. See http://bonsai.mozilla.org/cvsblame.cgi?file=mozilla/build/unix/modules.mk#45 *** This bug has been marked as a duplicate of 173066 ***
Status: ASSIGNED → RESOLVED
Closed: 23 years ago
Resolution: --- → DUPLICATE
Target Milestone: Future → mozilla1.2final
verified dupe
Status: RESOLVED → VERIFIED
Product: Browser → Seamonkey
You need to log in before you can comment on or make changes to this bug.

Attachment

General

Creator:
Created:
Updated:
Size: