1# $Id: Makefile,v 1.37 2004/11/22 16:09:39 hbo Exp $ 2 3VMAJ=2 4VMIN=1 5VTEENY=2 6VRPM=1 7VERSION=${VMAJ}.${VMIN}.${VTEENY} 8 9DIST=sudoscript-${VERSION} 10 11# Tarballs 12DISTTARBALL=$(DIST).tar.gz 13RPMDISTTARBALL=$(DIST).tar.bz2 14 15 16 17# Names of the executable scripts we will install 18SS=sudoscript 19SDS= sudoshell 20SDSI=$(SDS)-in 21SDSD= $(SS)d 22SDSDI=$(SDSD)-in 23SDSLr= Sudoscript 24SDSL= $(SDSLr).pm 25sds=ss 26SRC= $(SDSI) $(SDSDI) $(SDSL) 27 28# Locations 29# The first of several gnumakeisms 30SRCDIR := $(shell pwd) 31 32DISTDIR=$(DIST) 33 34# Startup scripts 35BSDINITSCR=$(SDSD).bsd.rc 36NETBSDINITSCR=$(SDSD).netbsd.rc 37LINUXINITSCR=$(SDSD).linux.init 38IRIXINITSCR=$(SDSD).irix.init 39SOLARISINITSCR=$(SDSD).solaris.init 40INITSCRIPTS= $(BSDINITSCR) $(NETBSDINITSCR) $(LINUXINITSCR) $(SOLARISINITSCR) 41 42# Gnumakeism 43# Get the user's effective user id 44UID := $(shell perl -e 'print $$>') 45 46# Gnumakeism 47# If the user is root, don't use sudo 48ifeq "$(UID)" "0" 49else 50 SUDO=sudo 51endif 52 53INSTALL=$(SUDO) install 54# Default install locations (overridden below if needed) 55INSTINI=$(INSTETC)/init.d 56INSTININAME=$(SDSD) 57 58# We'll set this to 0 if we don't recognize the OS 59SUPPORTED=1 60 61PERLPATH=/usr/bin/perl 62 63# Gnumakeism 64# Get Perl's idea of the OS. 65OS := $(shell perl -e 'print $$^O') 66 67# Set install locations and file names based on OS 68 69ifeq "$(OS)" "linux" 70DISTRO := $(shell perl -e 'chomp($$_=`head -1 /etc/issue`);if (/^Debian/){print "debian"} elsif (/^Red Hat/){print "redhat"} else {print "unknown"}') 71 72ifeq "$(DISTRO)" "redhat" 73 74RPMPKGDIR=packages/redhat 75SPECFILE=sudoscript.spec 76SPECFILESOURCE=$(RPMPKGDIR)/$(SPECFILE).src 77RPM=$(DIST)-$(VRPM).noarch.rpm 78SRPM=$(DIST)-$(VRPM).src.rpm 79RPMS=$(RPM) $(SRPM) 80endif 81GROUP=root 82^PREFIX?=/usr 83MANPREFIX=$(PREFIX)/share/man 84ADMINSECT=8 85DOCPREFIX=$(PREFIX)/share/doc 86INIPREFIX=/etc/init.d 87INITSCR=$(LINUXINITSCR) 88 89else 90ifeq "$(OS)" "irix" 91 92GROUP=root 93^PREFIX?=/usr/local 94MANPREFIX=$(PREFIX)/man 95ADMINSECT=1m 96DOCPREFIX=$(PREFIX)/doc 97INIPREFIX=/etc/init.d 98INITSCR=$(IRIXINITSCR) 99 100else 101ifeq "$(OS)" "hpux" 102 103GROUP=wheel 104^PREFIX?=/usr/local 105MANPREFIX=$(PREFIX)/man 106ADMINSECT=1m 107DOCPREFIX=$(PREFIX)/doc 108INIPREFIX=/sbin/init.d 109INITSCR=$(SOLARISINITSCR) 110INSTALL=$(SUDO) ./install-sh -c 111 112else 113ifeq "$(OS)" "solaris" 114 115GROUP=root 116^PREFIX?=/usr/local 117MANPREFIX=/usr/local/man 118ADMINSECT=1m 119DOCPREFIX=$(PREFIX)/doc 120INIPREFIX=/etc/init.d 121INITSCR=$(SOLARISINITSCR) 122INSTALL=$(SUDO) ./install-sh -c 123# Solaris package related 124SOLPKGDIR=packages/solaris 125PKGI=pkginfo 126PKGII=${SOLPKGDIR}/${PKGI}-in 127PTYP=prototype 128PTYPI=${SOLPKGDIR}/${PTYP}-in 129PKGMK=pkgmk 130PKGTRANS=pkgtrans 131 132else 133ifeq "$(OS)" "dragonfly" 134 135GROUP=wheel 136^PREFIX?=/usr/local 137MANPREFIX=$(PREFIX)/man 138ADMINSECT=8 139DOCPREFIX=$(PREFIX)/share/doc 140INIPREFIX=$(PREFIX)/etc/rc.d 141INSTININAME=$(SDSD).sh 142INITSCR=$(BSDINITSCR) 143PORTDIR=packages/dragonfly 144PLIST=$(PORTDIR)/pkg-plist 145PORTMK=$(PORTDIR)/Makefile 146DISTFILEDIR=/usr/ports/distfiles 147PKGOUT=$(PORTDIR)/$(DIST).tbz 148PKGSHIP=pkgout/$(DIST)-dragonfly-pkg.tbz 149 150else 151ifeq "$(OS)" "freebsd" 152 153GROUP=wheel 154^PREFIX?=/usr/local 155MANPREFIX=$(PREFIX)/man 156ADMINSECT=8 157DOCPREFIX=$(PREFIX)/share/doc 158INIPREFIX=$(PREFIX)/etc/rc.d 159INSTININAME=$(SDSD).sh 160INITSCR=$(BSDINITSCR) 161PORTDIR=packages/freebsd 162PLIST=$(PORTDIR)/pkg-plist 163PORTMK=$(PORTDIR)/Makefile 164DISTFILEDIR=/usr/ports/distfiles 165PKGOUT=$(PORTDIR)/$(DIST).tbz 166PKGSHIP=pkgout/$(DIST)-freebsd-pkg.tbz 167 168else 169ifeq "$(OS)" "openbsd" 170 171GROUP=wheel 172^PREFIX?=/usr/local 173MANPREFIX=$(PREFIX)/man 174ADMINSECT=8 175DOCPREFIX=$(PREFIX)/share/doc 176INIPREFIX=$(PREFIX)/etc/rc.d 177INSTININAME=$(SDSD).sh 178INITSCR=$(BSDINITSCR) 179 180PORTDIR=packages/openbsd 181PLIST=$(PORTDIR)/pkg/PLIST 182PORTMK=$(PORTDIR)/Makefile 183DISTFILEDIR=/usr/ports/distfiles 184PKGOUT=/usr/ports/packages/i386/All/$(DIST).tgz 185PKGSHIP=pkgout/$(DIST)-openbsd-pkg.tgz 186 187else 188ifeq "$(OS)" "netbsd" 189 190GROUP=wheel 191^PREFIX?=/usr/pkg 192PERLPATH=$(PREFIX)/bin/perl 193MANPREFIX=$(PREFIX)/man 194ADMINSECT=8 195DOCPREFIX=$(PREFIX)/share/doc 196INIPREFIX=$(PREFIX)/etc/rc.d 197INSTININAME=$(SDSD) 198INITSCR=$(NETBSDINITSCR) 199 200PORTSRCDIR=packages/netbsd 201PORTDIR=/usr/pkgsrc/security/sudoscript 202PLIST=$(PORTDIR)/PLIST 203PORTMK=$(PORTDIR)/Makefile 204DISTFILEDIR=/usr/pkgsrc/distfiles 205PKGOUT=/usr/pkgsrc/packages/All/$(DIST).tgz 206PKGSHIP=pkgout/$(DIST)-netbsd-pkg.tgz 207 208 209else 210SUPPORTED=0 211endif 212endif 213endif 214endif 215endif 216endif 217endif 218endif 219 220ifeq "$(SSRPM)x" "x" 221 DAEMONINSTARGS=-o root -g $(DGROUP) 222 INSTARGS=-o root -g $(GROUP) 223else 224 DAEMONINSTARGS= 225 INSTARGS= 226 SUDO= 227endif 228 229INSTBIN=$(DESTDIR)$(PREFIX)/bin 230INSTSBIN=$(DESTDIR)$(PREFIX)/sbin 231INSTLIB=$(DESTDIR)$(PREFIX)/lib/sudoscript 232INSTLIBFINAL=$(PREFIX)/lib/sudoscript 233INSTMAN1=$(DESTDIR)$(MANPREFIX)/man1 234INSTMAN3=$(DESTDIR)$(MANPREFIX)/man3 235INSTMAN8=$(DESTDIR)$(MANPREFIX)/man$(ADMINSECT) 236INSTDOC=$(DESTDIR)$(DOCPREFIX)/$(DIST) 237INSTINI=$(DESTDIR)$(INIPREFIX) 238 239SSPOD=$(SS).pod 240SDSM8=$(SS).8 241sdsM=$(sds).1 242SDSM=$(SDS).1 243SDSDM=$(SDSD).$(ADMINSECT) 244SDSLM=$(SDSLr).3pm 245 246MANS=$(SDSM) $(SDSM8) $(SDSDM) $(SDSLM) 247 248# HTMLified mans 249SDSHM=$(SDSM).html 250SDSHM8=$(SDSM8).html 251SDSDHM=$(SDSDM).html 252SDSLHM=$(SDSLM).html 253MANSHTML=$(SDSHM) $(SDSHM8) $(SDSDHM) $(SDSLHM) 254 255 256# Perltidy'd sources 257SDSH=$(SDS)-src.html 258SDSDH=$(SDSD)-src.html 259SDSLH=$(SDSL)-src.html 260SRCHTML=$(SDSH) $(SDSDH) $(SDSLH) 261 262# ;login paper 263PAPER=PORCMOLSULB 264PAPERSRC=${PAPER}.xml 265PAPERHTM=${PAPER}.html 266PAPERPDF=${PAPER}.pdf 267PAPERFOP=${PAPER}.fo 268 269# paper sources 270PAPERS= $(PAPERSRC) \ 271 $(PAPERHTM) \ 272 $(PAPERPDF) 273# paper targets 274PAPERT= $(PAPERHTM) \ 275 $(PAPERPDF) 276 277# Tools for xsl processing the paper and homepage 278DTD=dtd/egbokdoc.dtd 279XSLHTM=xsl/egbokdoc.xsl 280XSLFOP=xsl/egbokdoc2fop.xsl 281XMLSTUFF= $(DTD) \ 282 $(XSLHTM) \ 283 $(XSLFOP) 284FOP=${HOME}/fop-0.20.3/fop.sh 285 286# 2.0 architecture document 287ARCH20GIF=2.0arch.gif 288ARCH20SRC=2.0arch.xml 289ARCH20HTM=2.0arch.html 290 291 292DISTDOC= README \ 293 INSTALL \ 294 PORTING \ 295 PROBLEMS \ 296 SUDOCONFIG \ 297 CHANGELOG \ 298 SECURITY \ 299 RELEASENOTES \ 300 $(MANSHTML) \ 301 $(SRCHTML) \ 302 $(PAPERS) \ 303 $(ARCH20GIF) \ 304 $(ARCH20SRC) \ 305 $(ARCH20HTM) 306 307 308# Documents that we must build 309DOCTARGETS= $(MANS) \ 310 $(MANSHTML) \ 311 $(SRCHTML) \ 312 $(PAPERT) \ 313 $(ARCH20HTM) 314 315 316 317# Sources required to build the RPMs 318RPMDISTSRC= $(SRC) \ 319 $(LINUXINITSCR) \ 320 Makefile \ 321 sub_src.pl \ 322 sub_vers.pl \ 323 $(SSPOD) \ 324 $(DISTDOC) \ 325 $(PAPERS) \ 326 $(XMLSTUFF) \ 327 $(PERLTIDY) 328 329# Files to include in the tarball distribution 330DISTSRC= $(SRC) \ 331 sub_src.pl \ 332 sub_vers.pl \ 333 $(SSPOD) \ 334 $(SRCHTML) \ 335 $(MANS) \ 336 $(MANSHTML) \ 337 $(IRIXINITSCR) \ 338 $(LINUXINITSCR) \ 339 $(SOLARISINITSCR) \ 340 $(BSDINITSCR) \ 341 $(NETBSDINITSCR) \ 342 $(PKGII) \ 343 $(PTYPI) \ 344 Makefile \ 345 install-sh \ 346 $(ARCH20HTM) \ 347 $(DISTDOC) \ 348 $(PERLTIDY) 349 350 351 352# Other tools we need 353 354LN = $(SUDO) ln 355TAR = $(SUDO) tar 356RM = $(SUDO) rm 357 358# These come in a full Perl 5 installation 359# (Oh, thank you, Sun. Can I have another?) 360POD2MAN=pod2man 361POD2HTML=pod2html 362 363# perltidy is available at http://prdownloads.sourceforge.net/perltidy/ 364# but this older version doesn't require a module installation 365PERLTIDY=./perltidy 366 367# Default target checks OS and builds mans and some html pages 368oscheck: $(SRCHTML) $(MANS) $(MANSHTML) 369 @if [ "$(SUPPORTED)" != "1" ]; then \ 370 echo "Your OS isn't supported yet!";1; fi 371# Dummy 'all' target for FreeBSD ports 372all: 373$(SDS): $(SDSI) 374 perl sub_src.pl $< $(PERLPATH) $(INSTLIBFINAL) > sdstmp 375 perl sub_vers.pl $(VERSION) sdstmp $@ 376 rm -f sdstmp 377$(SDSD): $(SDSDI) 378 perl sub_src.pl $< $(PERLPATH) $(INSTLIBFINAL) > sddtmp 379 perl sub_vers.pl $(VERSION) sddtmp $@ 380 rm -f sddtmp 381 382# Target to build all the documentation, including the ;login paper 383doc: $(DOCTARGETS) 384 385# HTML versions of source code via perltidy 386 387$(SDSH): $(SDS) 388 $(PERLTIDY) -html -st $< >$@ 389 390$(SDSDH): $(SDSD) 391 $(PERLTIDY) -html -st $< >$@ 392 393$(SDSLH): $(SDSL) 394 $(PERLTIDY) -html -st $< >$@ 395 396# Man pages 397 398$(SDSM): $(SDS) 399 $(POD2MAN) --section=1 $< > $@ 400 401 402$(SDSM8): $(SSPOD) 403 $(POD2MAN) --section=8 $< > $@ 404 405$(SDSLM): $(SDSL) 406 $(POD2MAN) --section=3pm $< > $@ 407 408$(SDSDM): $(SDSD) 409 $(POD2MAN) --section=$(ADMINSECT) $< > $@ 410 411 412# HTML man pages 413 414$(SDSHM): $(SDS) 415 $(POD2HTML) $< > $@ 416 417 418$(SDSHM8): $(SSPOD) 419 $(POD2HTML) $< > $@ 420 421 422$(SDSLHM): $(SDSL) 423 $(POD2HTML) $< > $@ 424 425$(SDSDHM): $(SDSD) 426 $(POD2HTML) $< > $@ 427 428 429 430# 2.0 architecture document 431$(ARCH20HTM): $(ARCH20SRC) $(DTD) $(XSLHTM) 432 xalan $(ARCH20SRC) $(XSLHTM) $(ARCH20HTM) 433 434 435# ;login paper 436$(PAPERHTM): $(PAPERSRC) $(DTD) $(XSLHTM) 437 xalan $(PAPERSRC) $(XSLHTM) $(PAPERHTM) 438 439$(PAPERPDF): $(PAPERSRC) $(DTD) $(XSLFOP) 440 xalan $(PAPERSRC) $(XSLFOP) $(PAPERFOP) 441 $(FOP) $(PAPERFOP) $(PAPERPDF) 442 443 444# Install section 445 446# Create our installation directories if they don't exist 447dircheck: 448 if [ ! -d $(INSTBIN) ]; then $(SUDO) mkdir -p $(INSTBIN); fi 449 if [ ! -d $(INSTSBIN) ]; then $(SUDO) mkdir -p $(INSTSBIN); fi 450 if [ ! -d $(INSTLIB) ]; then $(SUDO) mkdir -p $(INSTLIB); fi 451 if [ ! -d $(INSTMAN1) ]; then $(SUDO) mkdir -p $(INSTMAN1); fi 452 if [ ! -d $(INSTMAN3) ]; then $(SUDO) mkdir -p $(INSTMAN3); fi 453 if [ ! -d $(INSTMAN8) ]; then $(SUDO) mkdir -p $(INSTMAN8); fi 454 if [ ! -d $(INSTDOC) ]; then $(SUDO) mkdir -p $(INSTDOC); fi 455 if [ ! -d $(INSTDOC)/xsl ]; then $(SUDO) mkdir -p $(INSTDOC)/xsl; fi 456 if [ ! -d $(INSTDOC)/dtd ]; then $(SUDO) mkdir -p $(INSTDOC)/dtd; fi 457 if [ ! -d $(INSTINI) ]; then $(SUDO) mkdir -p $(INSTINI); fi 458 459 460install: oscheck dircheck install-daemon install-program install-module install-mans install-init install-doc 461 462install-daemon: $(SDSD) 463 $(INSTALL) $(INSTDAEMONARGS) -m 700 $(SDSD) $(INSTSBIN)/$(SDSD); 464 465install-program: $(SDS) 466 $(INSTALL) $(INSTARGS) -m 755 $(SDS) $(INSTBIN)/$(SDS); 467 $(RM) -f $(INSTBIN)/$(sds); 468 $(LN) -sf $(SDS) $(INSTBIN)/$(sds); 469 470install-module: $(SDSL) 471 $(INSTALL) $(INSTARGS) -m 755 $(SDSL) $(INSTLIB)/$(SDSL); 472 473install-mans: 474 $(INSTALL) $(INSTARGS) -m 644 $(SDSM) $(INSTMAN1)/$(SDSM); 475 $(RM) -f $(INSTMAN1)/$(sdsM); 476 $(LN) -sf $(SDSM) $(INSTMAN1)/$(sdsM); 477 $(INSTALL) $(INSTARGS) -m 644 $(SDSLM) $(INSTMAN3)/$(SDSLM); 478 $(INSTALL) $(INSTARGS) -m 644 $(SDSDM) $(INSTMAN8)/$(SDSDM); 479 $(INSTALL) $(INSTARGS) -m 644 $(SDSM8) $(INSTMAN8)/$(SDSM8); 480 481install-init: $(INITSCR) 482 $(INSTALL) $(INSTARGS) -m 755 $(INITSCR) $(INSTINI)/$(INSTININAME); 483 484install-doc: $(DISTDOC) $(XMLSTUFF) 485 for d in $(DISTDOC) $(SSPOD); do \ 486 $(INSTALL) $$d $(INSTDOC); \ 487 done 488 $(INSTALL) $(DTD) $(INSTDOC)/dtd; 489 $(INSTALL) $(XSLHTM) $(INSTDOC)/xsl; 490 $(INSTALL) $(XSLFOP) $(INSTDOC)/xsl; 491 492 493# (Free|Open)BSD port section 494 495port: 496 cp $(DISTTARBALL) $(DISTFILEDIR) 497 perl sub_vers.pl ${VERSION} $(PLIST)-in $(PLIST); 498 perl sub_vers.pl ${VERSION} $(PORTMK)-in $(PORTMK); 499 ( cd $(PORTDIR); \ 500 make clean; \ 501 make makesum; \ 502 make package; \ 503 make clean \ 504 ) 505 mv $(PKGOUT) $(PKGSHIP) 506 507# NetBSD port section 508 509nbsdport: 510 rm -fr $(PORTDIR) 511 mkdir $(PORTDIR) 512 (cd $(PORTSRCDIR);tar cf - .|(cd $(PORTDIR);tar xf -)) 513 cp $(DISTTARBALL) $(DISTFILEDIR) 514 perl sub_vers.pl ${VERSION} $(PLIST)-in $(PLIST); 515 perl sub_vers.pl ${VERSION} $(PORTMK)-in $(PORTMK); 516 ( cd $(PORTDIR); \ 517 make clean; \ 518 make makesum; \ 519 make package; \ 520 make clean \ 521 ) 522 mv $(PKGOUT) $(PKGSHIP) 523 524# Solaris package section 525 526${PKGI}: ${PKGII} 527 perl sub_vers.pl ${VERSION} $< $@ 528 529${PTYP}: ${PTYPI} 530 perl sub_vers.pl ${VERSION} $< $@ 531 532solpkg: ${PKGI} ${PTYP} install 533 ${PKGMK} -o -f ${PTYP} EGsdosc 534 ${PKGTRANS} -o -s /var/spool/pkg ./EGsdosc-${VERSION} EGsdosc 535 cp /var/spool/pkg/EGsdosc-${VERSION} pkgout 536 gzip -f pkgout/EGsdosc-${VERSION} 537 538# RPM section 539 540# Substitute the dist names and revisions in the spec file 541$(SPECFILE): $(SPECFILESOURCE) 542 perl sub_rpm.pl ${VMAJ} ${VMIN} ${VTEENY} ${VRPM} $< $@ 543 544# Grab the built RPMs 545getrpms: 546 cp rpm/RPMS/noarch/* pkgout 547 cp rpm/SRPMS/* pkgout 548 549# Make the source tarball RPM wants 550rpmdist: $(RPMDISTSRC) 551 mkdir $(DISTDIR) 552 (tar cf - $(RPMDISTSRC)|(cd $(DISTDIR);tar xf -)) 553 tar cjf $(RPMDISTTARBALL) $(DISTDIR) 554 rm -fr $(DISTDIR) 555 556# Put the tarball where RPM expects it 557prep-rpmtree: rpmdist 558 rm -fr rpm 559 mkdir -p rpm/SOURCES rpm/SPECS rpm//BUILD rpm/RPMS/noarch rpm/SRPMS 560 cp $(RPMDISTTARBALL) rpm/SOURCES 561 cp $(SPECFILE) rpm/SPECS 562 563# Build the RPMs 564rpm: $(SRC) $(SPECFILE) prep-rpmtree 565 rpmbuild -ba --sign --define "_topdir `pwd`/rpm/" \ 566 --target noarch rpm/SPECS/$(SPECFILE) 567 568 569# Tarball distribution section 570# Make the tarball 571dist: $(DISTSRC) 572 mkdir $(DISTDIR) 573 cp $(DISTSRC) $(DISTDIR) 574 mkdir $(DISTDIR)/dtd 575 cp $(DTD) $(DISTDIR)/dtd 576 mkdir $(DISTDIR)/xsl 577 cp $(XSLHTM) $(DISTDIR)/xsl 578 cp $(XSLFOP) $(DISTDIR)/xsl 579 cp -r packages $(DISTDIR) 580 cp sub_dist.pl $(DISTDIR) 581 cp sub_rpm.pl $(DISTDIR) 582 perl sub_dist.pl $(DIST) $(DISTTARBALL) $(RPM) ${DISTDIR} $(CHANGEDOC) 583 find ${DISTDIR} -type d -name CVS -print | xargs rm -fr 584 mkdir $(DISTDIR)/pkgout 585 tar czf $(DISTTARBALL) $(DISTDIR) 586 rm -fr $(DISTDIR) 587 588 589# Publish the distribution. (If this works for you, 590# please let me know! 8) 591ship: 592 scp $(DISTTARBALL) \ 593 $(MANS) \ 594 $(MANSHTML) \ 595 $(SRCHTML) \ 596 $(INITSCRIPTS) \ 597 $(SRC) \ 598 pkgout/* \ 599 $(DISTDOC) \ 600 hbo@egbok.com:www/htdocs/sudoscript/ 601 602# Housekeeping 603clean: 604 rm -f *~ *.fo \#* $(DISTTARBALL) $(RPMDISTTARBALL) $(SPECFILE) 605 rm -fr $(DISTDIR) 606realclean: clean 607 rm -f $(DOCTARGETS) $(RPM) $(SRPM) $(SDS) $(SDSD) $(MANS) $(MANSHTML) 608 609