bsd.README revision 1.55
1# $NetBSD: bsd.README,v 1.55 1999/11/30 16:16:43 sommerfeld Exp $ 2# @(#)bsd.README 8.2 (Berkeley) 4/2/94 3 4This is the README file for the new make "include" files for the BSD 5source tree. The files are installed in /usr/share/mk, and are, by 6convention, named with the suffix ".mk". 7 8Note, this file is not intended to replace reading through the .mk 9files for anything tricky. 10 11=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= 12 13RANDOM THINGS WORTH KNOWING: 14 15The files are simply C-style #include files, and pretty much behave like 16you'd expect. The syntax is slightly different in that a single '.' is 17used instead of the hash mark, i.e. ".include <bsd.prog.mk>". 18 19One difference that will save you lots of debugging time is that inclusion 20of the file is normally done at the *end* of the Makefile. The reason for 21this is because .mk files often modify variables and behavior based on the 22values of variables set in the Makefile. To make this work, remember that 23the FIRST target found is the target that is used, i.e. if the Makefile has: 24 25 a: 26 echo a 27 a: 28 echo a number two 29 30the command "make a" will echo "a". To make things confusing, the SECOND 31variable assignment is the overriding one, i.e. if the Makefile has: 32 33 a= foo 34 a= bar 35 36 b: 37 echo ${a} 38 39the command "make b" will echo "bar". This is for compatibility with the 40way the V7 make behaved. 41 42It's fairly difficult to make the BSD .mk files work when you're building 43multiple programs in a single directory. It's a lot easier split up the 44programs than to deal with the problem. Most of the agony comes from making 45the "obj" directory stuff work right, not because we switched to a new version 46of make. So, don't get mad at us, figure out a better way to handle multiple 47architectures so we can quit using the symbolic link stuff. (Imake doesn't 48count.) 49 50The file .depend in the source directory is expected to contain dependencies 51for the source files. This file is read automatically by make after reading 52the Makefile. 53 54The variable DESTDIR works as before. It's not set anywhere but will change 55the tree where the file gets installed. 56 57The profiled libraries are no longer built in a different directory than 58the regular libraries. A new suffix, ".po", is used to denote a profiled 59object, and ".so" denotes a shared (position-independent) object. 60 61The following variables that control how things are made/installed that 62are not set by default. These should not be set by Makefiles; they're for 63the user to define in MAKECONF (see bsd.own.mk, below) or on the make(1) 64command line: 65 66BUILD If defined, 'make install' checks that the targets in the 67 source directories are up-to-date and remakes them if they 68 are out of date, instead of blindly trying to install 69 out of date or non-existant targets. 70 71UPDATE If defined, 'make install' only installs targets that are 72 more recently modified in the source directories that their 73 installed counterparts. 74 75UNPRIVILEGED If defined, don't set the owner/group/mode when installing 76 files or directories. This allows a non-root "make install". 77 78MKCATPAGES If "no", don't build or install the catman pages. 79 80MKDOC If "no", don't build or install the documentation. 81 82MKINFO If "no", don't build or install Info documentation from 83 Texinfo source files. 84 85MKLINT If "no", don't build or install the lint libraries. 86 87MKMAN If "no", don't build or install the man or catman pages. 88 Also acts as "MKCATPAGES=no" 89 90MKNLS If "no", don't build or install the NLS files. 91 92MKOBJ If "no", don't enable the rule which creates objdirs. 93 "yes" by default. 94 95MKOBJDIRS If "no", don't create objdirs during a "make build". 96 "no" by default. 97 98MKPIC If "no", don't build or install shared libraries. 99 100MKPICINSTALL If "no", don't install the *_pic.a libraries. 101 102MKPROFILE If "no", don't build or install the profiling libraries. 103 104MKSHARE If "no", act as "MKCATPAGES=no MKDOC=no MKINFO=no MKMAN=no 105 MKNLS=no". I.e, don't build catman pages, documentation, 106 Info documentation, man pages, NLS files, ... 107 108=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= 109 110The include file <sys.mk> has the default rules for all makes, in the BSD 111environment or otherwise. You probably don't want to touch this file. 112 113=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= 114 115The include file <bsd.man.mk> handles installing manual pages and their 116links. 117 118It has a two targets: 119 120 maninstall: 121 Install the manual page sources and their links. 122 catinstall: 123 Install the preformatted manual pages and their links. 124 125It sets/uses the following variables: 126 127MANDIR Base path for manual installation. 128 129MANGRP Manual group. 130 131MANOWN Manual owner. 132 133MANMODE Manual mode. 134 135MANSUBDIR Subdirectory under the manual page section, i.e. "/vax" 136 or "/tahoe" for machine specific manual pages. 137 138MAN The manual pages to be installed (use a .1 - .9 suffix). 139 140MLINKS List of manual page links (using a .1 - .9 suffix). The 141 linked-to file must come first, the linked file second, 142 and there may be multiple pairs. The files are soft-linked. 143 144The include file <bsd.man.mk> includes a file named "../Makefile.inc" if 145it exists. 146 147=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= 148 149The include file <bsd.own.mk> contains source tree configuration parameters, 150such as the owners, groups, etc. for both manual pages and binaries, and 151a few global "feature configuration" parameters. 152 153It has no targets. 154 155To get system-specific configuration parameters, bsd.own.mk will try to 156include the file specified by the "MAKECONF" variable. If MAKECONF is not 157set, or no such file exists, the system make configuration file, /etc/mk.conf 158is included. These files may define any of the variables described below. 159 160bsd.own.mk sets the following variables, if they are not already defined 161(defaults are in brackets): 162 163BSDSRCDIR The real path to the system sources, so that 'make obj' 164 will work correctly. [/usr/src] 165 166BSDOBJDIR The real path to the system 'obj' tree, so that 'make obj' 167 will work correctly. [/usr/obj] 168 169BINGRP Binary group. [wheel] 170 171BINOWN Binary owner. [root] 172 173BINMODE Binary mode. [555] 174 175NONBINMODE Mode for non-executable files. [444] 176 177MANDIR Base path for manual installation. [/usr/share/man/cat] 178 179MANGRP Manual group. [wheel] 180 181MANOWN Manual owner. [root] 182 183MANMODE Manual mode. [${NONBINMODE}] 184 185MANINSTALL Manual installation type: maninstall, catinstall, or both 186 187LIBDIR Base path for library installation. [/usr/lib] 188 189LINTLIBDIR Base path for lint(1) library installation. [/usr/libdata/lint] 190 191LIBGRP Library group. [${BINGRP}] 192 193LIBOWN Library owner. [${BINOWN}] 194 195LIBMODE Library mode. [${NONBINMODE}] 196 197DOCDIR Base path for system documentation (e.g. PSD, USD, etc.) 198 installation. [/usr/share/doc] 199 200DOCGRP Documentation group. [wheel] 201 202DOCOWN Documentation owner. [root] 203 204DOCMODE Documentation mode. [${NONBINMODE}] 205 206NLSDIR Base path for National Language Support files installation. 207 [/usr/share/nls] 208 209NLSGRP National Language Support files group. [wheel] 210 211NLSOWN National Language Support files owner. [root] 212 213NLSMODE National Language Support files mode. [${NONBINMODE}] 214 215STRIPFLAG The flag passed to the install program to cause the binary 216 to be stripped. This is to be used when building your 217 own install script so that the entire system can be made 218 stripped/not-stripped using a single knob. [-s] 219 220COPY The flag passed to the install program to cause the binary 221 to be copied rather than moved. This is to be used when 222 building our own install script so that the entire system 223 can either be installed with copies, or with moves using 224 a single knob. [-c] 225 226Additionally, the following variables may be set by bsd.own.mk or in a 227make configuration file to modify the behaviour of the system build 228process (default values are in brackets along with comments, if set by 229bsd.own.mk): 230 231CRYPTOBASE Select which cryptography code base to use when building 232 cryptography support into the system. See the 233 bsd.crypto.mk section for more information. 234 235EXPORTABLE_SYSTEM 236 Forces CRYPTOBASE to the value "none" for compatibility 237 with older NetBSD build environments. See the bsd.crypto.mk 238 section for more information. 239 240SKEY Compile in support for S/key authentication. [yes, set 241 unconditionally] 242 243KERBEROS Compile in support for Kerberos 4 authentication. 244 245KERBEROS5 Compile in support for Kerberos 5 authentication. 246 247MANZ Compress manual pages at installation time. 248 249SYS_INCLUDE Copy or symlink kernel include files into /usr/include. 250 Possible values are "symlinks" or "copies" (which is 251 the same as the variable being unset). 252 253NOPROFILE Do not build profiled versions of system libraries 254 255NOPIC Do not build PIC versions of system libraries, and 256 do not build shared libraries. [set if ${MACHINE_ARCH} 257 is "sparc64", unset otherwise.] 258 259NOLINT Do not build lint libraries. 260 261OBJECT_FMT Object file format. [set to "ELF" on architectures that 262 use ELF -- currently if ${MACHINE_ARCH} is "alpha", 263 "mipsel", "mipseb", "powerpc", "sparc", "sparc64", 264 and "i386", or set to "a.out" on other architectures]. 265 266 267bsd.own.mk is generally useful when building your own Makefiles so that 268they use the same default owners etc. as the rest of the tree. 269 270=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= 271 272The include file <bsd.prog.mk> handles building programs from one or 273more source files, along with their manual pages. It has a limited number 274of suffixes, consistent with the current needs of the BSD tree. 275 276It has eight targets: 277 278 all: 279 build the program and its manual page 280 clean: 281 remove the program, any object files and the files a.out, 282 Errs, errs, mklog, and ${PROG}.core. 283 cleandir: 284 remove all of the files removed by the target clean, as 285 well as .depend, tags, and any manual pages. 286 `distclean' is a synonym for `cleandir'. 287 depend: 288 make the dependencies for the source files, and store 289 them in the file .depend. 290 includes: 291 install any header files. 292 install: 293 install the program and its manual pages; if the Makefile 294 does not itself define the target install, the targets 295 beforeinstall and afterinstall may also be used to cause 296 actions immediately before and after the install target 297 is executed. 298 lint: 299 run lint on the source files 300 tags: 301 create a tags file for the source files. 302 303It sets/uses the following variables: 304 305BINGRP Binary group. 306 307BINOWN Binary owner. 308 309BINMODE Binary mode. 310 311CLEANFILES Additional files to remove for the clean and cleandir targets. 312 313COPTS Additional flags to the compiler when creating C objects. 314 315CPPFLAGS Additional flags to the C pre-processor 316 317LDADD Additional loader objects. Usually used for libraries. 318 For example, to load with the compatibility and utility 319 libraries, use: 320 321 LDADD+=-lutil -lcompat 322 323LDFLAGS Additional loader flags. 324 325LINKS The list of binary links; should be full pathnames, the 326 linked-to file coming first, followed by the linked 327 file. The files are hard-linked. For example, to link 328 /bin/test and /bin/[, use: 329 330 LINKS= ${DESTDIR}/bin/test ${DESTDIR}/bin/[ 331 332SYMLINKS The list of symbolic links; should be full pathnames. 333 Syntax is identical to LINKS. Note that DESTDIR is not 334 automatically included in the link. 335 336MAN Manual pages (should end in .1 - .9). If no MAN variable is 337 defined, "MAN=${PROG}.1" is assumed. 338 339PROG The name of the program to build. If not supplied, nothing 340 is built. 341 342PROGNAME The name that the above program will be installed as, if 343 different from ${PROG}. 344 345SRCS List of source files to build the program. If SRCS is not 346 defined, it's assumed to be ${PROG}.c. 347 348DPADD Additional dependencies for the program. Usually used for 349 libraries. For example, to depend on the compatibility and 350 utility libraries use: 351 352 DPADD+=${LIBCOMPAT} ${LIBUTIL} 353 354 The following libraries are predefined for DPADD: 355 356 LIBCRT0?= ${DESTDIR}/usr/lib/crt0.o 357 LIBC?= ${DESTDIR}/usr/lib/libc.a 358 LIBC_PIC?= ${DESTDIR}/usr/lib/libc_pic.a 359 LIBCOMPAT?= ${DESTDIR}/usr/lib/libcompat.a 360 LIBCRYPT?= ${DESTDIR}/usr/lib/libcrypt.a 361 LIBCURSES?= ${DESTDIR}/usr/lib/libcurses.a 362 LIBDBM?= ${DESTDIR}/usr/lib/libdbm.a 363 LIBDES?= ${DESTDIR}/usr/lib/libdes.a 364 LIBEDIT?= ${DESTDIR}/usr/lib/libedit.a 365 LIBGCC?= ${DESTDIR}/usr/lib/libgcc.a 366 LIBGNUMALLOC?= ${DESTDIR}/usr/lib/libgnumalloc.a 367 LIBIPSEC?= ${DESTDIR}/usr/lib/libipsec.a 368 LIBKDB?= ${DESTDIR}/usr/lib/libkdb.a 369 LIBKRB?= ${DESTDIR}/usr/lib/libkrb.a 370 LIBKVM?= ${DESTDIR}/usr/lib/libkvm.a 371 LIBL?= ${DESTDIR}/usr/lib/libl.a 372 LIBM?= ${DESTDIR}/usr/lib/libm.a 373 LIBMENU?= ${DESTDIR}/usr/lib/libmenu.a 374 LIBMP?= ${DESTDIR}/usr/lib/libmp.a 375 LIBNTP?= ${DESTDIR}/usr/lib/libntp.a 376 LIBPC?= ${DESTDIR}/usr/lib/libpc.a 377 LIBPCAP?= ${DESTDIR}/usr/lib/libpcap.a 378 LIBPLOT?= ${DESTDIR}/usr/lib/libplot.a 379 LIBPOSIX?= ${DESTDIR}/usr/lib/libposix.a 380 LIBRESOLV?= ${DESTDIR}/usr/lib/libresolv.a 381 LIBRPCSVC?= ${DESTDIR}/usr/lib/librpcsvc.a 382 LIBSKEY?= ${DESTDIR}/usr/lib/libskey.a 383 LIBTERMCAP?= ${DESTDIR}/usr/lib/libtermcap.a 384 LIBTELNET?= ${DESTDIR}/usr/lib/libtelnet.a 385 LIBUTIL?= ${DESTDIR}/usr/lib/libutil.a 386 LIBWRAP?= ${DESTDIR}/usr/lib/libwrap.a 387 LIBY?= ${DESTDIR}/usr/lib/liby.a 388 LIBZ?= ${DESTDIR}/usr/lib/libz.a 389 390 391SHAREDSTRINGS If defined, a new .c.o rule is used that results in shared 392 strings, using xstr(1). Note that this will not work with 393 parallel makes. 394 395STRIP The flag passed to the install program to cause the binary 396 to be stripped. 397 398SUBDIR A list of subdirectories that should be built as well. 399 Each of the targets will execute the same target in the 400 subdirectories. 401 402SCRIPTS A list of interpreter scripts [file.{sh,csh,pl,awk,...}]. 403 These are installed exactly like programs. 404 405SCRIPTSNAME The name that the above program will be installed as, if 406 different from ${SCRIPTS}. These can be further specialized 407 by setting SCRIPTSNAME_<script>. 408 409FILES A list of files to install. The installation is controlled 410 by the FILESNAME, FILESOWN, FILESGRP, FILESMODE, FILESDIR 411 variables that can be further specialized by FILES<VAR>_<file> 412 413The include file <bsd.prog.mk> includes the file named "../Makefile.inc" 414if it exists, as well as the include file <bsd.man.mk>. 415 416Some simple examples: 417 418To build foo from foo.c with a manual page foo.1, use: 419 420 PROG= foo 421 422 .include <bsd.prog.mk> 423 424To build foo from foo.c with a manual page foo.2, add the line: 425 426 MAN= foo.2 427 428If foo does not have a manual page at all, add the line: 429 430 NOMAN= noman 431 432If foo has multiple source files, add the line: 433 434 SRCS= a.c b.c c.c d.c 435 436=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= 437 438The include file <bsd.subdir.mk> contains the default targets for building 439subdirectories. It has the same eight targets as <bsd.prog.mk>: all, 440clean, cleandir, depend, includes, install, lint, and tags. For all of 441the directories listed in the variable SUBDIRS, the specified directory 442will be visited and the target made. There is also a default target which 443allows the command "make subdir" where subdir is any directory listed in 444the variable SUBDIRS. 445 446=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= 447 448The include file <bsd.links.mk> handles the LINKS and SYMLINKS variables 449and is included from from bsd.lib.mk and bsd.prog.mk. 450 451=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= 452 453The include file <bsd.files.mk> handles the FILES variables and is included 454from bsd.lib.mk and bsd.prog.mk. 455 456=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= 457 458The include file <bsd.inc.mk> defines the includes target and uses two 459variables: 460 461INCS The list of include files 462 463INCSDIR The location to install the include files. 464 465=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= 466 467The include file <bsd.kinc.mk> defines the many targets (includes, 468subdirectories, etc.), and is used by kernel makefiles to handle 469include file installation. It is intended to be included alone, by 470kernel Makefiles. Please see bsd.kinc.mk for more details, and keep 471the documentation in that file up to date. 472 473=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= 474 475The include file <bsd.info.mk> is used to generate and install GNU Info 476documentation from respective Texinfo source files. It defines three 477implicit targets (.txi.info, .texi.info, and .texinfo.info), and uses the 478following variables: 479 480TEXINFO List of Texinfo source files. Info documentation will 481 consist of single files with the extension replaced by 482 .info. 483 484INFOFLAGS Flags to pass to makeinfo. [] 485 486INSTALL_INFO Name of install-info program. [install-info] 487 488MAKEINFO Name of makeinfo program. [makeinfo] 489 490=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= 491 492The include file <bsd.sys.mk> is used by <bsd.prog.mk> and 493<bsd.lib.mk>. It contains overrides that are used when building 494the NetBSD source tree. For instance, if "PARALLEL" is defined by 495the program/library Makefile, it includes a set of rules for lex and 496yacc that allow multiple lex and yacc targets to be built in parallel. 497 498=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= 499 500The include file <bsd.lib.mk> has support for building libraries. It has 501the same eight targets as <bsd.prog.mk>: all, clean, cleandir, depend, 502includes, install, lint, and tags. Additionally, it has a checkver target 503which checks for installed shared object libraries whose version is greater 504that the version of the source. It has a limited number of suffixes, 505consistent with the current needs of the BSD tree. 506 507It sets/uses the following variables: 508 509LIB The name of the library to build. 510 511LIBDIR Target directory for libraries. 512 513LINTLIBDIR Target directory for lint libraries. 514 515LIBGRP Library group. 516 517LIBOWN Library owner. 518 519LIBMODE Library mode. 520 521LDADD Additional loader objects. 522 523MAN The manual pages to be installed (use a .1 - .9 suffix). 524 525MKLINKLIB If "no", act as "MKPICINSTALL=no MKPROFILE=no". 526 Also: 527 - don't install the .a libraries 528 - don't install _pic.a libraries on PIC systems 529 - don't build .a libraries on PIC systems 530 - don't install the .so symlink on ELF systems 531 I.e, only install the shared library (and the .so.major 532 symlink on ELF). 533 534MKPICLIB If "no", don't build _pic.a libraries, and build the 535 shared object libraries from the .a libraries. A 536 symlink is installed in ${DESTDIR}/usr/lib for the 537 _pic.a library pointing to the .a library. 538 539NOCHECKVER_<library> 540NOCHECKVER If set, disables checking for installed shared object 541 libraries with versions greater than the source. A 542 particular library name, without the "lib" prefix, may 543 be appended to the variable name to disable the check for 544 only that library. 545 546SRCS List of source files to build the library. Suffix types 547 .s, .c, and .f are supported. Note, .s files are preferred 548 to .c files of the same name. (This is not the default for 549 versions of make.) 550 551The include file <bsd.lib.mk> includes the file named "../Makefile.inc" 552if it exists, as well as the include file <bsd.man.mk>. 553 554It has rules for building profiled objects; profiled libraries are 555built by default. 556 557Libraries are ranlib'd when made. 558 559=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= 560 561The include file <bsd.crypto.mk> contains variables related to building 562cryptography support into the system. 563 564It has no targets. 565 566In order to get system-specific crypto configuration parameters, 567bsd.crypto.mk will include <bsd.own.mk>, which in turn will include 568the configuration file specified by the "MAKECONF" variable. See 569the <bsd.own.mk> section for more information. 570 571bsd.crypto.mk requires the "SRCTOP" variable to be defined before 572inclusion. This variable contains the relative path to the top of 573the source tree, with no trailing '/'. 574 575The variable "CRYPTOBASE" may be set by the user to select which 576cryptography code base will be used when building the system. If 577CRYPTOBASE is set to "none", no cryptography support will be built 578into the system. CRYPTOBASE should be set to the name of the crypto 579sub-tree in the SRCTOP directory. If CRYPTOBASE is not set, 580bsd.crypto.mk will use the following algorithm to set the variable: 581 582 .if exists(${SRCTOP}/crypto-us) 583 CRYPTOBASE=crypto-us 584 .elif exists(${SRCTOP}/crypto-intl) 585 CRYPTOBASE=crypto-intl 586 .else 587 undef CRYPTOBASE 588 .endif 589 590Note that it is legal for the user to set CRYPTOBASE to a relative 591path outside of the source directory. For example: 592 593 CRYPTOPATH= ../cryptosrc-intl/crypto-intl 594 595If CRYPTOBASE is set and not set to "none", bsd.crypto.mk will use 596CRYPTOBASE to set the "CRYPTOPATH" variable. CRYPTOPATH is set to 597the value "${SRCTOP}/${CRYPTOBASE}". 598 599Once CRYPTOPATH is set by bsd.crypto.mk, it checks to see if the 600path actually exists. If it does not exist, the variable is undefined. 601Program and library Makefiles may key off the definition of CRYPTOPATH 602to determine if cryptography support is to be included in that program. 603For example, a typical program Makefile should do the following: 604 605 SRCTOP= ../.. 606 .include <bsd.crypto.mk> 607 608 PROG= login 609 SRCS= login.c 610 . 611 . 612 . 613 .if defined(CRYPTOPATH) 614 .sinclude "${CRYPTOPATH}/usr.bin/login/Makefile.frag" 615 .endif 616 617The Makefile.frag included (if it exists) will now influence the build 618of the login(1) program, specifying additional source files, libraries, 619and CPP flags. 620 621The "EXPORTABLE_SYSTEM" variable, if set, causes CRYPTOBASE to be set 622to "none". This is for compatibilty with older NetBSD build environments. 623 624=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= 625