1# Makefile for lib-src subdirectory in GNU Emacs. 2# Copyright (C) 1985, 1987, 1988, 1993, 1994, 2001, 2002, 2003, 2004, 3# 2005, 2006, 2007 Free Software Foundation, Inc. 4 5# This file is part of GNU Emacs. 6 7# GNU Emacs is free software; you can redistribute it and/or modify 8# it under the terms of the GNU General Public License as published by 9# the Free Software Foundation; either version 2, or (at your option) 10# any later version. 11 12# GNU Emacs is distributed in the hope that it will be useful, 13# but WITHOUT ANY WARRANTY; without even the implied warranty of 14# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15# GNU General Public License for more details. 16 17# You should have received a copy of the GNU General Public License 18# along with GNU Emacs; see the file COPYING. If not, write to 19# the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, 20# Boston, MA 02110-1301, USA. 21 22# Avoid trouble on systems where the `SHELL' variable might be 23# inherited from the environment. 24SHELL = /bin/sh 25 26# Following ../lisp/Makefile.in. 27EMACS = ../src/emacs 28EMACSOPT = -batch --no-site-file --multibyte 29 30# ==================== Things `configure' will edit ==================== 31 32CC=@CC@ 33CFLAGS=@CFLAGS@ 34version=@version@ 35configuration=@configuration@ 36EXEEXT=@EXEEXT@ 37 38# Program name transformation. 39TRANSFORM = @program_transform_name@ 40 41# ==================== Where To Install Things ==================== 42 43# The default location for installation. Everything is placed in 44# subdirectories of this directory. The default values for many of 45# the variables below are expressed in terms of this one, so you may 46# not need to change them. This is set with the --prefix option to 47# `../configure'. 48prefix=@prefix@ 49 50# Like `prefix', but used for architecture-specific files. This is 51# set with the --exec-prefix option to `../configure'. 52exec_prefix=@exec_prefix@ 53 54# Where to install Emacs and other binaries that people will want to 55# run directly (like etags). This is set with the --bindir option 56# to `../configure'. 57bindir=@bindir@ 58 59# Where to install and expect executable files to be run by Emacs 60# rather than directly by users, and other architecture-dependent 61# data. ${archlibdir} is usually below this. This is set with the 62# --libexecdir option to `../configure'. 63libexecdir=@libexecdir@ 64 65# Directory for local state files for all programs. 66localstatedir=@localstatedir@ 67 68# Where to find the source code. This is set by the configure 69# script's `--srcdir' option. However, the value of ${srcdir} in 70# this makefile is not identical to what was specified with --srcdir, 71# since the variable here has `/lib-src' added at the end. 72 73# We use $(srcdir) explicitly in dependencies so as not to depend on VPATH. 74srcdir=@srcdir@ 75VPATH=@srcdir@ 76 77# The top-level source directory, also set by configure. 78top_srcdir=@top_srcdir@ 79 80# ==================== Emacs-specific directories ==================== 81 82# These variables hold the values Emacs will actually use. They are 83# based on the values of the standard Make variables above. 84 85# Where to put executables to be run by Emacs rather than the user. 86# This path usually includes the Emacs version and configuration name, 87# so that multiple configurations for multiple versions of Emacs may 88# be installed at once. This can be set with the --archlibdir option 89# to `../configure'. 90archlibdir=@archlibdir@ 91 92gamedir=@gamedir@ 93gameuser=@gameuser@ 94 95# ==================== Utility Programs for the Build ================= 96 97# ../configure figures out the correct values for these. 98INSTALL = @INSTALL@ 99INSTALL_PROGRAM = @INSTALL_PROGRAM@ 100INSTALL_DATA = @INSTALL_DATA@ 101INSTALL_SCRIPT = @INSTALL_SCRIPT@ 102# By default, we uphold the dignity of our programs. 103INSTALL_STRIP = 104 105# ========================== Lists of Files =========================== 106 107# Things that a user might actually run, 108# which should be installed in bindir. 109INSTALLABLES = etags${EXEEXT} ctags${EXEEXT} emacsclient${EXEEXT} b2m${EXEEXT} ebrowse${EXEEXT} 110INSTALLABLE_SCRIPTS = rcs-checkin grep-changelog 111 112# Things that Emacs runs internally, or during the build process, 113# which should not be installed in bindir. 114UTILITIES= profile${EXEEXT} digest-doc${EXEEXT} sorted-doc${EXEEXT} movemail${EXEEXT} cvtmail${EXEEXT} fakemail${EXEEXT} \ 115 hexl${EXEEXT} update-game-score${EXEEXT} 116 117DONT_INSTALL= test-distrib${EXEEXT} make-docfile${EXEEXT} 118 119# Like UTILITIES, but they're not system-dependent, and should not be 120# deleted by the distclean target. 121SCRIPTS= rcs2log vcdiff 122 123EXECUTABLES= ${UTILITIES} ${INSTALLABLES} ${SCRIPTS} ${INSTALLABLE_SCRIPTS} 124 125SOURCES = COPYING ChangeLog Makefile.in README emacs.csh \ 126 makedoc.com *.[chy] rcs2log vcdiff 127 128# Additional -D flags for movemail (add to MOVE_FLAGS if desired): 129# MAIL_USE_POP Support mail retrieval from a POP mailbox. 130# MAIL_USE_MMDF Support MMDF mailboxes. 131# MAIL_USE_FLOCK Use flock for file locking (see the comments 132# about locking in movemail.c) 133# MAIL_UNLINK_SPOOL Unlink the user's spool mailbox after reading 134# it (instead of just emptying it). 135# KERBEROS Support Kerberized POP. 136# KRB5 Support Kerberos Version 5 pop instead of 137# Version 4 (define this in addition to 138# KERBEROS). 139# HESIOD Support Hesiod lookups of user mailboxes. 140# MAILHOST A string, the host name of the default POP 141# mail host for the site. 142MOVE_FLAGS= 143 144# ========================== start of cpp stuff ======================= 145/* From here on, comments must be done in C syntax. */ 146 147#define NO_SHORTNAMES 148#define THIS_IS_MAKEFILE 149#define NOT_C_CODE 150#include "../src/config.h" 151 152/* Some machines don\'t find the standard C libraries in the usual place. */ 153#ifndef ORDINARY_LINK 154#ifndef LIB_STANDARD_LIBSRC 155#define LIB_STANDARD_LIBSRC -lc 156#endif 157#else 158#ifndef LIB_STANDARD_LIBSRC 159#define LIB_STANDARD_LIBSRC 160#endif 161#endif 162 163/* Some s/SYSTEM.h files define this to request special libraries. */ 164#ifndef LIBS_SYSTEM 165#define LIBS_SYSTEM 166#endif 167 168/* Some m/MACHINE.h files define this to request special libraries. */ 169#ifndef LIBS_MACHINE 170#define LIBS_MACHINE 171#endif 172 173#ifndef C_SWITCH_SYSTEM 174#define C_SWITCH_SYSTEM 175#endif 176 177#ifndef C_SWITCH_MACHINE 178#define C_SWITCH_MACHINE 179#endif 180 181#undef MOVEMAIL_NEEDS_BLESSING 182#ifndef MAIL_USE_FLOCK 183#ifndef MAIL_USE_LOCKF 184#define MOVEMAIL_NEEDS_BLESSING 185#endif 186#endif 187 188#ifdef MOVEMAIL_NEEDS_BLESSING 189#define BLESSMAIL blessmail 190#else 191#define BLESSMAIL 192#endif 193 194#ifdef KERBEROS 195# ifdef HAVE_LIBKRB 196 KRB4LIB = -lkrb 197# else 198# ifdef HAVE_LIBKRB4 199 KRB4LIB = -lkrb4 200# endif 201# endif 202# ifdef HAVE_LIBDES 203 DESLIB = -ldes 204# else 205# ifdef HAVE_LIBDES425 206 DESLIB = -ldes425 207# endif 208# endif 209# ifdef HAVE_LIBKRB5 210 KRB5LIB = -lkrb5 211# endif 212# ifdef HAVE_LIBK5CRYPTO 213 CRYPTOLIB = -lk5crypto 214# else 215# ifdef HAVE_LIBCRYPTO 216 CRYPTOLIB = -lcrypto 217# endif 218# endif 219# ifdef HAVE_LIBCOM_ERR 220 COM_ERRLIB = -lcom_err 221# endif 222#endif /* KERBEROS */ 223 224/* If HESIOD is defined, set this to "-lhesiod". */ 225#ifdef HAVE_LIBHESIOD 226# ifdef HAVE_LIBRESOLV 227 HESIODLIB= -lhesiod -lresolv 228# else 229 HESIODLIB= -lhesiod 230# endif 231#endif 232 233LIBS_MOVE=$(KRB4LIB) $(DESLIB) $(KRB5LIB) $(CRYPTOLIB) $(COM_ERRLIB) $(HESIODLIB) 234 235#ifdef HAVE_LIBLOCKFILE 236LIBS_MAIL=-llockfile 237#else 238#ifdef HAVE_LIBMAIL 239LIBS_MAIL=-lmail 240#endif 241#endif 242 243LOADLIBES=LIBS_SYSTEM LIBS_MACHINE LIB_STANDARD_LIBSRC 244 245/* We need to #define emacs to get the right versions of some files. 246 Some other files - those shared with other GNU utilities - need 247 HAVE_CONFIG_H #defined before they know they can take advantage of 248 the information in ../src/config.h. */ 249ALL_CFLAGS = C_SWITCH_SYSTEM C_SWITCH_MACHINE -DHAVE_CONFIG_H \ 250 -I. -I../src -I${srcdir} -I${srcdir}/../src ${LDFLAGS} ${CPPFLAGS} ${CFLAGS} 251LINK_CFLAGS = C_SWITCH_SYSTEM C_SWITCH_MACHINE -DHAVE_CONFIG_H \ 252 -I. -I../src -I${srcdir} -I${srcdir}/../src ${LDFLAGS} ${CFLAGS} 253CPP_CFLAGS = C_SWITCH_SYSTEM C_SWITCH_MACHINE -DHAVE_CONFIG_H \ 254 -I. -I../src -I${srcdir} -I${srcdir}/../src ${CPPFLAGS} ${CFLAGS} 255/* This was all of CPP_CFLAGS except -Demacs. 256 Now that -Demacs has been deleted from CPP_CFLAGS, 257 this is actually the same as CPP_CFLAGS, but let\'s not delete it yet. */ 258BASE_CFLAGS = C_SWITCH_SYSTEM C_SWITCH_MACHINE -DHAVE_CONFIG_H \ 259 -I. -I../src -I${srcdir} -I${srcdir}/../src ${CPPFLAGS} ${CFLAGS} 260 261/* This is the default compilation command. 262 But we should never rely on it, because some make version 263 failed to find it for getopt.o. 264 Using an explicit command made it work. */ 265.c.o: 266 ${CC} -c ${CPP_CFLAGS} $< 267 268all: ${DONT_INSTALL} ${UTILITIES} ${INSTALLABLES} ${SCRIPTS} ${INSTALLABLE_SCRIPTS} 269 270/* These targets copy the scripts into the build directory 271so that they can be run from there in an uninstalled Emacs. */ 272rcs2log: $(srcdir)/rcs2log 273 cp -p $(srcdir)/rcs2log rcs2log 274 275rcs-checkin: $(srcdir)/rcs-checkin 276 cp -p $(srcdir)/rcs-checkin rcs-checkin 277 278grep-changelog: $(srcdir)/grep-changelog 279 cp -p $(srcdir)/grep-changelog grep-changelog 280 281vcdiff: $(srcdir)/vcdiff 282 cp -p $(srcdir)/vcdiff vcdiff 283 284#ifdef MOVEMAIL_NEEDS_BLESSING 285blessmail: 286 $(EMACS) $(EMACSOPT) -l $(srcdir)/../lisp/mail/blessmail.el 287 chmod +x blessmail 288#endif 289 290maybe-blessmail: BLESSMAIL 291#ifdef MOVEMAIL_NEEDS_BLESSING 292/* Don\'t charge ahead and do it! Let the installer decide. 293 ./blessmail $(DESTDIR)${archlibdir}/movemail${EXEEXT} */ 294 @if [ `wc -l <blessmail` != 2 ] ; then \ 295 dir=`sed -n -e 's/echo mail directory = \(.*\)/\1/p' blessmail`; \ 296 echo Assuming $$dir is really the mail spool directory, you should; \ 297 echo run lib-src/blessmail $(DESTDIR)${archlibdir}/movemail${EXEEXT}; \ 298 echo as root, to give movemail${EXEEXT} appropriate permissions.; \ 299 echo Do that after running make install.; \ 300 fi 301#endif 302 303/* Install the internal utilities. Until they are installed, we can 304 just run them directly from lib-src. */ 305$(DESTDIR)${archlibdir}: all 306 @echo 307 @echo "Installing utilities run internally by Emacs." 308 $(top_srcdir)/mkinstalldirs $(DESTDIR)${archlibdir} 309 if [ `(cd $(DESTDIR)${archlibdir} && /bin/pwd)` != `/bin/pwd` ]; then \ 310 for file in ${UTILITIES}; do \ 311 $(INSTALL_PROGRAM) $(INSTALL_STRIP) $$file $(DESTDIR)${archlibdir}/$$file ; \ 312 done ; \ 313 fi 314 $(top_srcdir)/mkinstalldirs $(DESTDIR)${gamedir} 315 touch $(DESTDIR)${gamedir}/snake-scores 316 touch $(DESTDIR)${gamedir}/tetris-scores 317/* If the following commands fail, that is not a big deal. 318 update-game-score will detect at runtime that it is not setuid, 319 and handle things accordingly. */ 320 -if chown ${gameuser} $(DESTDIR)${archlibdir}/update-game-score && chmod u+s $(DESTDIR)${archlibdir}/update-game-score; then \ 321 chown ${gameuser} $(DESTDIR)${gamedir}; \ 322 chmod u=rwx,g=rwx,o=rx $(DESTDIR)${gamedir}; \ 323 fi 324 if [ `(cd $(DESTDIR)${archlibdir} && /bin/pwd)` \ 325 != `(cd ${srcdir} && /bin/pwd)` ]; then \ 326 for file in ${SCRIPTS}; do \ 327 $(INSTALL_SCRIPT) ${srcdir}/$$file $(DESTDIR)${archlibdir}/$$file; \ 328 done ; \ 329 fi 330 331install: $(DESTDIR)${archlibdir} 332 @echo 333 @echo "Installing utilities for users to run." 334 for file in ${INSTALLABLES} ; do \ 335 $(INSTALL_PROGRAM) $(INSTALL_STRIP) $${file} $(DESTDIR)${bindir}/`echo $${file} | sed '$(TRANSFORM)'` ; \ 336 chmod a+rx $(DESTDIR)${bindir}/`echo $${file} | sed '$(TRANSFORM)'`; \ 337 done 338 for file in ${INSTALLABLE_SCRIPTS} ; do \ 339 $(INSTALL_SCRIPT) ${srcdir}/$${file} $(DESTDIR)${bindir}/`echo $${file} | sed '$(TRANSFORM)'` ; \ 340 chmod a+rx $(DESTDIR)${bindir}/`echo $${file} | sed '$(TRANSFORM)'`; \ 341 done 342 343uninstall: 344 (cd $(DESTDIR)${bindir}; \ 345 for file in ${INSTALLABLES} ${INSTALLABLE_SCRIPTS}; do \ 346 rm -f $(DESTDIR)${bindir}/`echo $${file} | sed '$(TRANSFORM)'` ; \ 347 done) 348 (cd $(DESTDIR)${archlibdir}; \ 349 rm -f ${UTILITIES} ${INSTALLABLES} ${SCRIPTS} ${INSTALLABLE_SCRIPTS}) 350 351mostlyclean: 352 -rm -f core *.o getopt.h getopt.h-t 353 354clean: mostlyclean 355 -rm -f ${INSTALLABLES} ${UTILITIES} ${DONT_INSTALL} 356 -rm -f fns*.el *.tab.c *.tab.h 357 358distclean: clean 359 -rm -f TAGS 360 -rm -f Makefile Makefile.c blessmail 361 362maintainer-clean: distclean 363 true 364 365extraclean: maintainer-clean 366 -rm -f *~ \#* 367 368unlock: 369 chmod u+w $(SOURCES) 370 371relock: 372 chmod u-w $(SOURCES) 373 374/* Test the contents of the directory. */ 375check: 376 @echo "We don't have any tests for GNU Emacs yet." 377 378tags: TAGS 379TAGS: etags${EXEEXT} 380 etags *.[ch] 381 382/* This verifies that the non-ASCII characters in the file \`testfile\' 383 have not been clobbered by whatever means were used to copy and 384 distribute Emacs. If they were clobbered, all the .elc files were 385 clobbered too. */ 386test-distrib${EXEEXT}: ${srcdir}/test-distrib.c 387 $(CC) ${ALL_CFLAGS} -o test-distrib ${srcdir}/test-distrib.c 388 ./test-distrib ${srcdir}/testfile 389 390/* We need the following in order to create a <getopt.h> when the system 391 doesn't have one that works with the given compiler. */ 392GETOPT_H = @GETOPT_H@ 393getopt.h: getopt_.h 394 cp $(srcdir)/getopt_.h $@-t 395 mv $@-t $@ 396 397GETOPTOBJS = @GETOPTOBJS@ 398GETOPTDEPS = $(GETOPTOBJS) $(GETOPT_H) 399getopt.o: ${srcdir}/getopt.c $(GETOPT_H) ${srcdir}/gettext.h 400 ${CC} -c ${CPP_CFLAGS} ${srcdir}/getopt.c 401getopt1.o: ${srcdir}/getopt1.c $(GETOPT_H) 402 ${CC} -c ${CPP_CFLAGS} ${srcdir}/getopt1.c 403 404#ifdef REGEXP_IN_LIBC 405REGEXPOBJ = 406REGEXPDEPS = 407#else 408REGEXPOBJ = regex.o 409REGEXPDEPS = $(REGEXPOBJ) $(srcdir)/../src/regex.h 410#endif 411 412regex.o: $(srcdir)/../src/regex.c $(srcdir)/../src/regex.h ../src/config.h 413 ${CC} -c ${BASE_CFLAGS} -DCONFIG_BROKETS -DINHIBIT_STRING_HEADER ${srcdir}/../src/regex.c 414 415etags${EXEEXT}: ${srcdir}/etags.c $(GETOPTDEPS) $(REGEXPDEPS) ../src/config.h 416 $(CC) ${ALL_CFLAGS} -DEMACS_NAME="\"GNU Emacs"\" -DVERSION="\"${version}\"" ${srcdir}/etags.c $(GETOPTOBJS) $(REGEXPOBJ) $(LOADLIBES) -o etags 417 418ebrowse${EXEEXT}: ${srcdir}/ebrowse.c $(GETOPTDEPS) ../src/config.h 419 $(CC) ${ALL_CFLAGS} -DVERSION="\"${version}\"" ${srcdir}/ebrowse.c $(GETOPTOBJS) $(LOADLIBES) -o ebrowse 420 421/* We depend on etags to assure that parallel makes don\'t write two 422 etags.o files on top of each other. */ 423ctags${EXEEXT}: etags${EXEEXT} 424 $(CC) ${ALL_CFLAGS} -DCTAGS -DEMACS_NAME="\"GNU Emacs"\" -DVERSION="\"${version}\"" ${srcdir}/etags.c $(GETOPTOBJS) $(REGEXPOBJ) $(LOADLIBES) -o ctags 425 426profile${EXEEXT}: ${srcdir}/profile.c ../src/config.h 427 $(CC) ${ALL_CFLAGS} ${srcdir}/profile.c $(LOADLIBES) -o profile 428 429make-docfile${EXEEXT}: ${srcdir}/make-docfile.c ../src/config.h 430 $(CC) ${ALL_CFLAGS} ${srcdir}/make-docfile.c $(LOADLIBES) -o make-docfile 431 432digest-doc${EXEEXT}: ${srcdir}/digest-doc.c 433 $(CC) ${ALL_CFLAGS} ${srcdir}/digest-doc.c $(LOADLIBES) -o digest-doc 434 435sorted-doc${EXEEXT}: ${srcdir}/sorted-doc.c 436 $(CC) ${ALL_CFLAGS} ${srcdir}/sorted-doc.c $(LOADLIBES) -o sorted-doc 437 438b2m${EXEEXT}: ${srcdir}/b2m.c ../src/config.h $(GETOPTDEPS) 439 $(CC) ${ALL_CFLAGS} ${srcdir}/b2m.c -DVERSION="\"${version}\"" \ 440 $(GETOPTOBJS) $(LOADLIBES) -o b2m 441 442movemail${EXEEXT}: movemail.o pop.o $(GETOPTDEPS) 443 $(CC) ${LINK_CFLAGS} ${MOVE_FLAGS} movemail.o pop.o $(GETOPTOBJS) $(LOADLIBES) $(LIBS_MAIL) $(LIBS_MOVE) -o movemail 444 445movemail.o: ${srcdir}/movemail.c ../src/config.h $(GETOPT_H) 446 $(CC) -c ${CPP_CFLAGS} -Demacs ${MOVE_FLAGS} ${srcdir}/movemail.c 447 448pop.o: ${srcdir}/pop.c ../src/config.h 449 $(CC) -c ${CPP_CFLAGS} ${MOVE_FLAGS} ${srcdir}/pop.c 450 451cvtmail${EXEEXT}: ${srcdir}/cvtmail.c 452 $(CC) ${ALL_CFLAGS} ${srcdir}/cvtmail.c $(LOADLIBES) -o cvtmail 453 454fakemail${EXEEXT}: ${srcdir}/fakemail.c ../src/config.h 455 $(CC) ${ALL_CFLAGS} ${srcdir}/fakemail.c $(LOADLIBES) -o fakemail 456 457emacsclient${EXEEXT}: ${srcdir}/emacsclient.c ../src/config.h $(GETOPTDEPS) 458 $(CC) ${ALL_CFLAGS} ${srcdir}/emacsclient.c $(GETOPTOBJS) \ 459 -DVERSION="\"${version}\"" \ 460 $(LOADLIBES) -o emacsclient 461 462hexl${EXEEXT}: ${srcdir}/hexl.c ../src/config.h 463 $(CC) ${ALL_CFLAGS} ${srcdir}/hexl.c $(LOADLIBES) -o hexl 464 465update-game-score${EXEEXT}: update-game-score.o $(GETOPTDEPS) 466 $(CC) ${LINK_CFLAGS} ${MOVE_FLAGS} update-game-score.o $(GETOPTOBJS) $(LOADLIBES) -o update-game-score 467 468update-game-score.o: ${srcdir}/update-game-score.c ../src/config.h $(GETOPT_H) 469 $(CC) -c ${CPP_CFLAGS} ${srcdir}/update-game-score.c \ 470 -DHAVE_SHARED_GAME_DIR="\"$(gamedir)\"" 471 472/* These are NOT included in INSTALLABLES or UTILITIES. 473 See ../src/Makefile.in. */ 474emacstool${EXEEXT}: ${srcdir}/emacstool.c 475 $(CC) ${srcdir}/emacstool.c -o emacstool ${ALL_CFLAGS} \ 476 -lsuntool -lsunwindow -lpixrect $(LOADLIBES) 477 478/* For SUN Japanese Language Environment. */ 479nemacstool${EXEEXT}: ${srcdir}/emacstool.c 480 $(CC) -o nemacstool -DJLE ${ALL_CFLAGS} ${srcdir}/emacstool.c \ 481 -lsuntool -lmle -lsunwindow -lpixrect $(LOADLIBES) 482 483xvetool${EXEEXT}: ${srcdir}/emacstool.c 484 $(CC) -o xvetool -DXVIEW ${ALL_CFLAGS} ${srcdir}/emacstool.c \ 485 -lxview -lX -I$(OPENWINHOME)/include -L$(OPENWINHOME)/lib \ 486 $(LOADLIBES) 487 488xveterm${EXEEXT}: ${srcdir}/emacstool.c 489 $(CC) -o xveterm -DXVIEW -DTTERM ${ALL_CFLAGS} ${srcdir}/emacstool.c \ 490 -lxview -lolgx -lX -I$(OPENWINHOME)/include -L$(OPENWINHOME)/lib \ 491 $(LOADLIBES) 492