1# ****************************************************************************** 2# 3# libcsc: Make Subsystem 4# 5# ---------------------------------------------------------------- 6# 7# Copyright (c) 2001, 2002 Douglas R. Jerome, Peoria, AZ USA 8# 9# This program is free software; you can redistribute it and/or modify 10# it under the terms of the GNU Library General Public License as 11# published by the Free Software Foundation; either version 2 of the 12# License, or (at your option) any later version. 13# 14# This program is distributed in the hope that it will be useful, 15# but WITHOUT ANY WARRANTY; without even the implied warranty of 16# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 17# GNU General Public License for more details. 18# 19# You should have received a copy of the GNU Library General Public 20# License along with this program; if not, write to the Free Software 21# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. 22# 23# ---------------------------------------------------------------- 24# 25# FILE NAME 26# 27# $RCSfile: Makefile.src,v $ 28# $Revision: 1.13 $ 29# $Date: 2003/03/26 02:02:39 $ 30# 31# PROGRAM INFORMATION 32# 33# Developed by: libcsc project 34# Developer: Douglas R. Jerome, drj, <jerome@primenet.com> 35# 36# FILE DESCRIPTION 37# 38# This is the main source code make file. 39# 40# CHANGE LOG 41# 42# 25mar03 drj Fixed debug target. 43# 44# 06nov02 drj Cleaned up echoed message in the doc target. 45# 46# 02may02 drj Cleaned up making for debug. Added OSTYPE and use it 47# for -pthread option with linux. 48# 49# 19apr02 drj Added csc_notify. 50# 51# 18apr02 drj Added csc_symtab. 52# 53# 15apr02 drj Added csc_hash and csc_math. 54# 55# 11apr02 drj Added csc_tree. 56# 57# 16feb02 drj Added csc_list. 58# 59# 25jun01 drj File generation. 60# 61# ****************************************************************************** 62 63 64# *************************************************************************** # 65# Macro Definitions # 66# *************************************************************************** # 67 68# -- Configuration 69# 70VERSION = $(shell cd .. && ls *.is.version | sed -e 's/\.is\.version//') 71OSTYPE = $(shell \ 72 if [ "`uname -s`" = "SunOS" -a "`uname -r | cut -c 1`" = "5" ]; then \ 73 echo "SOLARIS"; \ 74 else \ 75 if [ "`uname -s`" = "Linux" ]; then \ 76 echo "LINUX"; \ 77 fi \ 78 fi \ 79 ) 80 81# -- Input Files 82# 83HEADERS = 84OBJECTS = \ 85 csc_config.o \ 86 csc_file.o \ 87 csc_hash.o \ 88 csc_io.o \ 89 csc_list.o \ 90 csc_math.o \ 91 csc_mem.o \ 92 csc_notify.o \ 93 csc_sock.o \ 94 csc_string.o \ 95 csc_symbol.o \ 96 csc_symtab.o \ 97 csc_sys.o \ 98 csc_timer.o \ 99 csc_tree.o \ 100 xcsc_debug.o 101SOURCES = \ 102 csc_config.c \ 103 csc_file.c \ 104 csc_hash.c \ 105 csc_io.c \ 106 csc_list.c \ 107 csc_math.c \ 108 csc_mem.c \ 109 csc_notify.c \ 110 csc_sock.c \ 111 csc_string.c \ 112 csc_symbol.c \ 113 csc_symtab.c \ 114 csc_sys.c \ 115 csc_timer.c \ 116 csc_tree.c \ 117 xcsc_debug.c 118 119# -- Generated Files 120# 121ARCHIVE = libcsc.a 122LMODULE = libcsc.o 123ARCHIVE_DEBUG = libcsc_debug.a 124LMODULE_DEBUG = libcsc_debug.o 125PROGRAM = libcsc-config 126 127# -- Install Locations 128# 129INSTALLPREFIX = /usr/local 130INSTALLEXE = ${INSTALLPREFIX}/bin 131INSTALLINC = ${INSTALLPREFIX}/include 132INSTALLLIB = ${INSTALLPREFIX}/lib 133 134# -- Extra, Referenced Files; extra compilation switches, etc. 135# 136C_HEADER_DIR = ../include 137LOCAL_INCLUDES = -I. -I${C_HEADER_DIR} 138LOCAL_DEFINES = 139LIB_DIRS = 140LIBS = 141 142ifeq ("${OSTYPE}","LINUX") 143LOCAL_DEFINES += -pthread 144endif 145 146 147# *************************************************************************** # 148# More Macro Definitions # 149# *************************************************************************** # 150 151# -- Tools 152# 153AR = ar 154CAT = cat 155CC = gcc 156CHMOD = chmod 157CP = cp 158INSTALL = install -c 159LD = ld 160LINK = ln -f -s 161MV = mv 162NM = nm 163RANLIB = ranlib 164RM = rm -f 165STRIP = strip 166SZ = size 167 168# -- cc Flags 169# 170CC_COMPILER = -ansi -c -pipe ${CC_PARAMS} 171CC_WARNING = -Wall -W -Wmissing-prototypes -Wmissing-declarations 172CFLAGS = ${CC_COMPILER} ${CC_WARNING} 173 174# -- cpp Flags 175# 176CPP_DEFINES = ${CDEBUGFLAGS} ${LOCAL_DEFINES} -D${OSTYPE} 177CPP_INCLUDES = ${LOCAL_INCLUDES} ${EXTRA_INCLUDES} -I- 178CPPFLAGS = -MMD ${CPP_DEFINES} ${CPP_INCLUDES} 179 180# -- ld Flags 181# 182LDFLAGS = -r 183 184 185# *************************************************************************** # 186# Make Rules # 187# *************************************************************************** # 188 189%:: ${PROJECTDIR}/RCS/%,v 190 $(CO) $(COFLAGS) $@ $< 191 192.c.o: 193 @echo "" 194 @echo "***** $<" 195 time ${CC} ${CFLAGS} ${CPPFLAGS} $< 196 197 198# *************************************************************************** # 199# Make Targets # 200# *************************************************************************** # 201 202.PHONEY: default 203.PHONEY: clean cleanall cleandoc config docclean doc incbuild 204.PHONEY: install installlibrary installheaders installprogram 205.PHONEY: testhclean testh 206.PHONEY: archive debug exe headers lib library lmodule objects sources 207 208# --------------------------------------------------------------------------- 209# -- Default Target 210# --------------------------------------------------------------------------- 211 212default: ${ARCHIVE} ${LMODULE} ${PROGRAM} 213 214# --------------------------------------------------------------------------- 215# -- Housekeeping Targets 216# --------------------------------------------------------------------------- 217 218clean: 219 ${RM} ${OBJECTS} ${OBJECTS:.o=.d} .depend 220 ${RM} ${ARCHIVE_DEBUG} ${ARCHIVE_DEBUG}.names 221 ${RM} ${LMODULE_DEBUG} ${LMODULE_DEBUG}.names 222 ${RM} ${ARCHIVE} ${ARCHIVE}.names 223 ${RM} ${LMODULE} ${LMODULE}.names 224 ${RM} ${PROGRAM} config-main.o config-main.d csc_config.h core 225 226cleanall: clean 227 ${RM} ../lib/${ARCHIVE} ../lib/${ARCHIVE_DEBUG} 228 ${RM} ../lib/${LMODULE} ../lib/${LMODULE_DEBUG} 229 ${RM} ../bin/${PROGRAM} 230 231cleandoc: 232 ${RM} ../doc/man?/* 233 234config: 235 @${RM} csc_config.h 236 @echo "/*" >> csc_config.h 237 @echo " * This file is generated by Makefile.src" >> csc_config.h 238 @echo " * Edits to this file will be lost." >> csc_config.h 239 @echo " */" >> csc_config.h 240 @echo "" >> csc_config.h 241 @echo "#define CSC_CFLAGS \"${CPP_INCLUDES}\"" >> csc_config.h 242 @echo "#define CSC_LDFLAGS \"${LIB_DIRS}\"" >> csc_config.h 243 @echo "#define CSC_LIBS \"${LIBS}\"" >> csc_config.h 244 @buildnum=0; \ 245 if [ -f .build ]; then \ 246 buildnum=`cat .build`; \ 247 fi; \ 248 echo "#define CSC_BUILD \"$${buildnum}\"" >> csc_config.h 249 @builddate=""; \ 250 if [ -f .date ]; then \ 251 builddate=`cat .date`; \ 252 ${RM} .date; \ 253 fi; \ 254 echo "#define CSC_DATE \"$${builddate}\"" >> csc_config.h 255 @echo "#define CSC_VERSION \"${VERSION}\"" >> csc_config.h 256 257docclean: 258 ${RM} ../doc/man?/* 259 260doc: 261 @echo "" 262 @echo "---------------------------------------------------------------" 263 @echo "" 264 @echo "Removing old documentation (function overviews)." 265 @${RM} ../doc/man3/* 266 @echo "Removing old documentation (subsystem overviews)." 267 @${RM} ../doc/manl/* 268 @echo "" 269 @echo "Ripping documentation from sources:" 270 @mrip=""; \ 271 if [ -f ../../Cmrip ]; then \ 272 mrip="../../Cmrip"; \ 273 fi; \ 274 if [ -f ../tools/mrip ]; then \ 275 mrip="../tools/mrip"; \ 276 fi; \ 277 echo "SUBSYSTEM(s)"; \ 278 for file in ${SOURCES}; do \ 279 $${mrip} -v 1 -r $${file} -d ../doc/manl -k SUBSYSTEM; \ 280 ${RM} $${file}.rip; \ 281 done; \ 282 echo "SUBROUTINE(s)"; \ 283 for file in ${SOURCES}; do \ 284 $${mrip} -v 1 -r $${file} -d ../doc/man3 -k SUBROUTINE; \ 285 ${RM} $${file}.rip; \ 286 done 287 @echo "" 288 @echo "Look in ../doc/manl and ../doc/man3 for documentaion." 289 @echo "" 290 291incbuild: 292 @buildnum=0; \ 293 if [ -f .build ]; then \ 294 buildnum=`cat .build`; \ 295 buildnum=`expr $${buildnum} + 1`; \ 296 ${RM} .build; \ 297 fi; \ 298 echo $${buildnum} > .build 299 @${RM} .date; echo `date '+%a. %h %d, 20%y, %r'` > .date 300 301# --------------------------------------------------------------------------- 302# -- Installation Targets 303# --------------------------------------------------------------------------- 304 305install: installlibrary installheaders installprogram 306 307installlibrary: ${ARCHIVE} ${LMODULE} 308 cd ../lib && make -f Makefile.lib install "INSTALLLIB=${INSTALLLIB}" 309 310installheaders: headers 311 cd ../include && \ 312 make -f Makefile.include install "INSTALLINC=${INSTALLINC}" 313 314installprogram: ${PROGRAM} 315 cd ../bin && make -f Makefile.bin install "INSTALLEXE=${INSTALLEXE}" 316 317# --------------------------------------------------------------------------- 318# -- Test Targets 319# --------------------------------------------------------------------------- 320 321TEST_DEPS = _HEADERlibcsc.d \ 322 _HEADERlibcsc_debug.d 323 324TEST_OBJS = _HEADERlibcsc.o \ 325 _HEADERlibcsc_debug.o 326 327testhclean: 328 ${RM} ${TEST_DEPS} ${TEST_OBJS} 329 330testh: headers ${HEADERS} ${SOURCES} ${TEST_OBJS} 331 @${RM} ${TEST_DEPS} ${TEST_OBJS} 332 @echo "Done." 333 334# --------------------------------------------------------------------------- 335# -- Build Targets 336# --------------------------------------------------------------------------- 337 338archive: ${ARCHIVE} 339 340debug: 341 make clean 342 make CDEBUGFLAGS=-DDEBUG CC_PARAMS=-g 343 ${MV} ../lib/${LMODULE} ../lib/${LMODULE_DEBUG} 344 ${MV} ../lib/${ARCHIVE} ../lib/${ARCHIVE_DEBUG} 345 ${LINK} ${LMODULE_DEBUG} ../lib/${LMODULE} 346 ${LINK} ${ARCHIVE_DEBUG} ../lib/${ARCHIVE} 347 make clean 348 349exe: ${PROGRAM} 350 351headers: ${HEADERS} 352 cd ${C_HEADER_DIR} && make -f Makefile.include headers 353 354lib library lmodule: ${LMODULE} 355 356objects: config ${OBJECTS} 357 358sources: ${SOURCES} 359 360${ARCHIVE}: headers ${HEADERS} ${SOURCES} config ${OBJECTS} 361 @echo "" 362 @echo "----------------------------------------------------------------" 363 @echo "" 364 @${RM} .depend 365 ${CAT} ${OBJECTS:.o=.d} > .depend 366 @echo "" 367 @echo "##### Removing old library '${ARCHIVE}'..." 368 ${RM} ${ARCHIVE} 369 @echo "" 370 @echo "##### Archiving objects ${OBJECTS} into '${ARCHIVE}'." 371 @echo "" 372 @echo "##### Building new archive ..." 373 ${AR} r ${ARCHIVE} ${OBJECTS} 374 ${RANLIB} ${ARCHIVE} 375 @echo "" 376 @echo "##### New archive '${ARCHIVE}' built from:" 377 ${AR} vt ${ARCHIVE} 378 @echo "" 379 @echo "##### Size statistics for ${ARCHIVE}:" 380 ${SZ} ${ARCHIVE} 381 @echo "" 382 ${NM} ${ARCHIVE} > ${ARCHIVE}.names 383 ${CHMOD} 644 ${ARCHIVE} 384 ${CHMOD} 644 ${ARCHIVE}.names 385 ${RM} ../lib/${ARCHIVE} 386 ${CP} ${ARCHIVE} ../lib 387 @echo "" 388 @echo "##### Finished making the '${ARCHIVE}' object archive." 389 @echo "" 390 391${LMODULE}: headers ${HEADERS} ${SOURCES} config ${OBJECTS} 392 @echo "" 393 @echo "----------------------------------------------------------------" 394 @echo "" 395 @${RM} .depend 396 ${CAT} ${OBJECTS:.o=.d} > .depend 397 @echo "" 398 @echo "##### Removing old object module '${LMODULE}'..." 399 ${RM} ${LMODULE} 400 @echo "" 401 @echo "##### Time statistics for linking '${LMODULE}' with command:" 402 time ${LD} ${LDFLAGS} -o ${LMODULE} ${OBJECTS} 403 @echo "" 404 @echo "##### Size statistics for ${LMODULE}:" 405 ${SZ} ${LMODULE} 406 @echo "" 407 ${NM} ${LMODULE} > ${LMODULE}.names 408 ${CHMOD} 644 ${LMODULE} 409 ${CHMOD} 644 ${LMODULE}.names 410 ${RM} ../lib/${LMODULE} 411 ${CP} ${LMODULE} ../lib 412 @echo "" 413 @echo "##### Finished making the '${LMODULE}' object module file." 414 @echo "" 415 416${PROGRAM}: config config-main.o csc_config.o 417 @echo "" 418 @echo "---------------------------------------------------------------" 419 @echo "" 420 @echo "##### Time statistics for linking '${PROGRAM}' with command:" 421 time ${CC} -o ${PROGRAM} config-main.o csc_config.o 422 @echo "" 423 ${STRIP} ${PROGRAM} 424 ${CHMOD} 775 ${PROGRAM} 425 ${CP} ${PROGRAM} ../bin 426 ${CHMOD} 755 ../bin/${PROGRAM} 427 @echo "" 428 @echo "##### Finished making the '${PROGRAM}' executable program." 429 @echo "" 430 431 432# The .depend file contains the header file dependencies. 433# 434-include .depend 435 436 437# end of Makefile 438