[00:16:03] --- reuteras has become available [01:25:56] --- lars.malinowsky has become available [01:39:23] --- reuteras has left [01:56:53] --- reuteras has become available [02:25:43] --- reuteras has left [02:25:43] --- reuteras has become available [02:41:34] --- rra has left: Disconnected [02:49:33] --- reuteras has left [03:13:32] --- lars.malinowsky has left [03:18:00] --- Simon Wilkinson has left [03:56:17] --- lars.malinowsky has become available [04:36:21] --- reuteras has become available [06:06:36] so gerrit is giving spurious errors with status 200 (which should be success) [07:03:29] --- Russ has become available [07:03:29] --- Russ has left: Disconnected [07:04:01] --- Russ has become available [07:26:18] --- Russ has left: Disconnected [07:44:19] --- deason has become available [08:38:22] --- lars.malinowsky has left [08:44:05] --- reuteras has left [08:51:35] --- Simon Wilkinson has become available [09:11:23] --- Simon Wilkinson has left [09:50:37] --- ksumner has become available [10:50:29] --- rra has become available [11:02:02] --- ksumner has left [11:02:39] --- ksumner has become available [11:08:35] --- Simon Wilkinson has become available [11:12:49] I've gone on a bit of a slash and burn through util [11:12:58] that's good or bad [11:13:24] hasn't hit gerrit yet, so i don't need to care yet, right? [11:13:41] Yeah. About to hit gerrit, once I've built it in a few more places. [11:19:00] At some point, we should do something about all of the various */test directories in the tree, and figure out what's useful, and should get built by developers, and what's not. [11:19:19] probably [11:19:46] I've just fixed dir/test/dtest, because I wanted to be able to prod at directories. [11:20:11] i fixed it a few weeks ago. guess i didn't push [11:20:20] I guess you didn't. [11:20:24] sucks [11:20:27] Yeah [11:20:34] Never mind, didn't take long. [11:21:00] One good thing with having roken, is rather than wrestle with system headers, you can now just zap them all, and just #include [11:34:19] Has anyone ever seen problems with make failing to fill in the $? portion of install rules? [11:36:11] example? [11:36:43] Makefile rule is: [11:37:05] ${TOP_INCDIR}/afs/bumon.h: bumon.h ${INSTALL_DATA} $? $@ [11:37:16] What gets run is... [11:37:29] install bumon.h ? [11:37:43] No, install $(TOP_INCDIR)/afs/bumon.h [11:37:59] oh $? sorry. hang on [11:38:06] Happens intermittently. If you rerun make its fine. [11:38:16] I've now seen it occasionally on both Mac OS X and Fedora 10. [11:39:18] looking at the makefile. no clue. i'd otherwise assume a bum dependency somehow [11:39:46] I'm suspecting a bug in make. $? should be the dependency set, which has to be at least "bumon.h" [11:40:26] Of course, writing rules like that is a bad idea, because it means that if you add a line like [11:40:26] bumon.h: otherheader.h [11:40:37] Then you'll end up trying to install both bumon.h and otherheader.h [11:41:03] So, I think we should probably get rid of them for that reason, if no other. But I can't see why that would lead to make failing to assign anything to $? [11:43:33] > $? should be the dependency set No. $? is the set of dependencies _that have changed_. It does not include dependencies that are not newer than the target. [11:44:16] I also though $? was the thing that doesn't work on hpux outside of pattern rules, or I'm confusing it with one of the other variables [11:44:35] However, $^ is not standard. [11:44:37] jhutz: But if no dependencies have changed why does the build rule fire at all? [11:45:00] it's $< that doesn't work on hpux, i thought [11:45:05] deason: We use $? everywhere for install rules, so hopefully it does work on HPUX ... [11:45:14] okay, yeah, that's it [11:45:17] and we document that in README.DEVEL [11:47:18] > Many versions of `make' set `$<' only in implicit rules. [11:49:24] The rule fires because the target doesn't exist at all. It's not clear to me whether, in that case, $? should be empty or the same as $^. [11:49:47] gmake documentation is not clear on that point. I haven't looked at any other make's documentation. [11:50:32] So, this is happening when the target does exist. In fact, I _never_ see the problem on a clean make, but do see it intermittently on a make run in a tree that was previously built. [11:51:11] > bumon.h: otherheader.h > Then you'll end up trying to install both bumon.h and otherheader.h Why would that happen? Construction of $? et all is not recursive; you only get the current rule's direct dependencies [11:52:05] Oh, hm. Is it possible there's a .PHONY in play? [11:52:45] No. [11:53:00] --- mfelliott has left [11:53:05] Whilst we do have some .PHONYs in the tree, they're not in the directories that this happens in. [12:02:40] --- mfelliott has become available [12:05:47] --- lars.malinowsky has become available [12:29:49] --- Simon has become available [12:31:05] Master is bust on Mac OS. You can't compare an afs_uint32 with ULONG_MAX [12:32:30] Uh, why not? Shouldn't the afs_uint32 get promoted to unsigned long? [12:32:38] *promoted [12:33:01] Fix just as soon as my laptop finds the Internet aga [12:33:22] not on amd64 or ppc64 [12:33:57] well, yes, but the point is it's not a useful comparison [12:34:12] Not according to this gcc [12:34:35] ((unsigned long)(afs_uint32) -1) != ULONG_MAX [12:35:20] Yeah. It's that that gcc warns about - the result is always false. [12:36:49] --- Simon Wilkinson has left [12:39:08] --- jaltman/FrogsLeap has left: Disconnected [12:42:37] --- jaltman/FrogsLeap has become available [12:46:28] --- Simon Wilkinson has become available [12:49:16] untested fix in 4244 (unless there's somewhere else that does that) [12:50:20] Iv'e got one that I was about to push. Let's see if they match. [12:51:33] Does it need to be that complex? [12:51:45] I think you can just do s/ULONG_MAX/MAX_AFS_UINT32/ [12:52:30] is (afs_uint32)ULONG_MAX guaranteed to be MAX_AFS_UINT32 ? [12:52:56] Only if sizeof(unsigned long) == sizeof(afs_uint32) [12:53:40] What is the test supposed to be guarding against? [12:53:52] strtoul returns ULONG_MAX if the string is unparseable [12:54:34] so if it gets casted to an afs_uint32... I didn't think you could just compare it to the max uint32 [12:55:14] or, if we get a string that represents a number >2^32 [12:55:16] 0xFFFFFF:FFFFFFFF when cast to afs_uint32 should be 0xFFFFFFFF [12:55:32] I missed a few FFs [12:56:09] If the string is unparseable, then *end not being NULL is the best check. [12:56:20] is that true of everything >0xFFFFFFFF ? [12:56:35] But it's not clear from the code I have here what happens if you overflow. [12:56:50] the truncation is equivalent to removing the upper-32bits [12:57:16] That's defined, IIRC. [12:58:07] But, I think Andrew's version is much clearer about the intent of the check. [12:58:12] Andrew's fix is essentially correct. However, there needs to be a cast added for the vid = (afs_uint32)vid_l; assignment [12:58:44] You don't _need_ a cast there, but your compiler might bitch. Mine doesn't :) [12:59:02] you need the cast to avoid the data truncation warning [12:59:03] "need" for... stylistic reasons? the compiler whines? we can an incorrect result? ...? [12:59:21] The WIndows and Irix compilers will complain about a loss of precision. [12:59:41] if you want the code to compile warning free, add the cast. [13:00:11] The compiler might also whine about the vid_l > 0xFFFFFFFF comparison when unsigned long is 32-bit [13:00:29] make that test >- [13:00:31] >= [13:00:40] we could vid_l >= MAX_AFS_UINT32, which would simplify the conditional,too [13:01:14] Yeah, that sounds good. [13:01:35] I still want the == ULONG_MAX for clarity of purpose [13:01:44] It shouldn't complain about the comparison against MAX_AFS_UINT32, it should just promote it to unsigned long [13:02:17] however, for performance reasons, put the >= MAX_AFS_UINT32 check first [13:02:27] Disagree. The purpose is to check for overflow. Overflow is the set of values that are larger (or equal to) MAX_AFS_UINT32 [13:03:38] Although, actually. Are there are any platforms where a long is less than 32bits. If so, Jeffrey is right. [13:03:40] the check for ULONG_MAX is to detect failure of strtoul() [13:04:53] Strictly speaking, failure of strtoul is determined by endptr not being the end of the string. [13:05:01] that is different from the volume id field size which will change to afs_uint64 in the near future. On platforms where unsigned long is 32-bit, strtoul() will return 0xFFFFFFFF which would not be the same as MAX_AFS_UINT64. [13:05:02] if (vid_l == ULONG_MAX || vid_l >= MAX_AFS_UINT32 || *end != '\0') everyone okay with that so I don't need to keep pushing trivial changes? [13:05:37] put the MAX_AFS_UINT32 test first [13:05:44] right right [13:06:12] If we care that much about performance, *end should be checked first, then MAX_AFS_UINT32, then ULONG_MAX, I think. [13:06:34] But we don't. [13:06:34] This is parsing a command line option :) [13:06:54] it's also broken much worse in like a million other places [13:08:43] I can imagine ... [13:09:31] > Are there are any platforms where a long is less than 32bits No compliant ones [13:10:55] if we want to be smarter we would define MAX_AFS_VOLUMEID and use that [13:11:52] It doesn't really clean up that check, though. [13:12:42] no, but it makes it clearer when we convert volumeId from afs_uint32 to afs_uint64 that there is a constant to be altered as well [13:12:56] --- Simon Wilkinson has left [13:14:04] Perhaps, but you're also going to have to find all of the occurrences of strtoul, or atoi, or whatever [13:44:32] --- Simon Wilkinson has become available [13:44:32] --- Simon has left [13:44:42] --- Simon Wilkinson has left [13:44:54] --- Simon Wilkinson has become available [13:51:27] --- Simon Wilkinson has left [13:51:32] --- Simon Wilkinson has become available [14:32:41] --- Simon Wilkinson has left [14:32:41] --- Simon Wilkinson has become available [14:43:12] --- Simon Wilkinson has left [14:44:59] --- Simon Wilkinson has become available [15:03:21] --- Simon Wilkinson has left [15:35:10] --- mdionne has become available [15:45:38] --- deason has left [15:46:14] --- mdionne has left [16:26:50] --- jaltman/FrogsLeap has left: Disconnected [16:34:15] --- Simon Wilkinson has become available [16:58:25] --- sxw has become available [18:25:17] --- cudave has become available [18:58:24] just built 1.6.0pre3 RPMs for RHEL6-x86_64 [18:58:31] they are at: /afs/cnf.cornell.edu/shares/public/outside_users/openafs-1.6.0pre3 [19:11:24] --- jaltman/FrogsLeap has become available [22:37:47] --- steven.jenkins has left [22:41:27] --- steven.jenkins has become available