Hi, John Darrington <j...@darrington.wattle.id.au> writes:
> They need more than that. They need the binary to be installed > setuid. So these > cannot be run as package tests. They must be tested after the > as-yet-to-be-written > service is installed. But I'll update the comment to make it more clear. > I see, so this is a circular dependency problem here. The service depends on this package, but the test depends on the service. Am I right? > > + #:phases > > + (modify-phases %standard-phases > > + (add-before 'build 'replace-/bin/sh > > + (lambda _ > > + (substitute* > > + (append > > + (list "smrsh/smrsh.c" "sendmail/conf.c" "contrib/mailprio" > > + "contrib/mmuegel" "devtools/bin/configure.sh") > > + (find-files "." ".*\\.m4") > > + (find-files "." ".*\\.cf")) > I think this can be simplified to: > `("smrsh/smrsh.c" "sendmail/conf.c" > "contrib/mailprio" "contrib/mmuegel" > "devtools/bin/configure.sh" > .@(find-files "." ".*\\.m4") > ,@(find-files "." ".*\\.cf")) > using the quasi-quote quasi-unquote-splicing notation, which is similar > to string interpolation in shell "foo bar $(CAR) $(TAR)". > > Is that simpler? It has more characters? > Hmmm, it is more of a style thing. You can ask how others think about it. > > + "contrib/mmuegel" "devtools/bin/configure.sh") > > + (("/bin/sh") (which "bash"))) > > + > > + (substitute* "devtools/bin/Build" > > + (("SHELL=/bin/sh") (string-append "SHELL=" (which "bash")))) > > + #t)) > I think the `#t' is not neccessary here, since `substitute*' uses > `substitute', which will either return #t or throw an exception. > > WTF?? Didn't you complain earlier this week when I *didn't* put #t in > exactly this > scenario?? > Yes, I am a different Alex :) Also, it seems we are not being consistent here, sometimes we put `#t' after `substitute*', sometimes we don't. Anyone has an idea? > > + (replace 'configure > > + (lambda _ > > + > > + ;; Render harmless any attempts to chown or chmod > > + (substitute* "devtools/bin/install.sh" > > + (("owner=\\$2") "owner=''") > > + (("group=\\$2") "group=''")) > > + > > + (with-output-to-file "devtools/Site/site.config.m4" > > + (lambda () > > + (format #t " > > +define(`confCC', `gcc') > > +define(`confOPTIMIZE', `-g -O2') > > +define(`confLIBS', `-lresolv') > > +define(`confINSTALL', `~a/devtools/bin/install.sh') > > +define(`confDEPEND_TYPE', `CC-M') > > +define(`confINST_DEP', `') > > +" (getcwd)))))) > > + (replace 'build > > + (lambda _ > > + (system* "sh" "Build") > I think there is a missing `zero?' here. > > > Would that make any difference? Since only the last expression would > get returned from lambda ? > You are right. The following should chain things up correctly: (and (zero? (system* "sh" "Build")) (with-directory-excursion "cf/cf" (begin (copy-file "generic-linux.mc" "sendmail.mc") (zero? (system* "sh" "Build" "sendmail.cf"))))) > > + (with-directory-excursion "cf/cf" > > + (begin > > + (copy-file "generic-linux.mc" "sendmail.mc") > > + (zero? (system* "sh" "Build" "sendmail.cf")))))) > > + (add-before 'install 'pre-install > > + (lambda _ > > + (let ((out (assoc-ref %outputs "out"))) > > + (mkdir-p (string-append out "/usr/bin")) > > + (mkdir-p (string-append out "/usr/sbin")) > > + (mkdir-p (string-append out "/etc/mail")) > > + (setenv "DESTDIR" out) > > + (with-directory-excursion "cf/cf" > > + (zero? (system* "sh" "Build" "install-cf"))))))))) > > + (inputs > > + `(("m4" ,m4) > > + ("perl" ,perl))) > > + (home-page "http://sendmail.org";) > > + (synopsis > > + "Highly configurable Mail Transfer Agent (MTA)") > > + (description > > + "Sendmail is a mail transfer agent (MTA) originally developed > > by Eric > > +Allman. It is highly configurable and supports many delivery > > methods and many > > +transfer protocols.") > > + (license (non-copyleft "file://LICENSE" > > + "See LICENSE in the distribution.")))) > > + > > Thanks, > Alex