home *** CD-ROM | disk | FTP | other *** search
/ Dream 52 / Amiga_Dream_52.iso / Amiga / Workbench / Archivers / gsmPPC.lha / gsmPPC / Makefile < prev    next >
Makefile  |  1998-04-27  |  12KB  |  495 lines

  1. # Copyright 1992-1996 by Jutta Degener and Carsten Bormann, Technische
  2. # Universitaet Berlin.  See the accompanying file "COPYRIGHT" for
  3. # details.  THERE IS ABSOLUTELY NO WARRANTY FOR THIS SOFTWARE.
  4.  
  5. # Machine- or installation dependent flags you should configure to port
  6.  
  7. SASR    = -DSASR
  8. ######### Define SASR if >> is a signed arithmetic shift (-1 >> 1 == -1)
  9.  
  10. MULHACK = -DUSE_FLOAT_MUL
  11. ######### Define this if your host multiplies floats faster than integers,
  12. ######### e.g. on a SPARCstation.
  13.  
  14. FAST    = -DFAST
  15. ######### Define together with USE_FLOAT_MUL to enable the GSM library's
  16. ######### approximation option for incorrect, but good-enough results.
  17.  
  18. # LTP_CUT    = -DLTP_CUT
  19. LTP_CUT    =
  20. ######### Define to enable the GSM library's long-term correlation 
  21. ######### approximation option---faster, but worse; works for
  22. ######### both integer and floating point multiplications.
  23. ######### This flag is still in the experimental stage.
  24.  
  25. #WAV49    = -DWAV49
  26. WAV49    =
  27. ######### Define to enable the GSM library's option to pack GSM frames 
  28. ######### in the style used by the WAV #49 format.  If you want to write
  29. ######### a tool that produces .WAV files which contain GSM-encoded data,
  30. ######### define this, and read about the GSM_OPT_WAV49 option in the
  31. ######### manual page on gsm_option(3).
  32.  
  33. # Choose a compiler.  The code works both with ANSI and K&R-C.
  34. # Use -DNeedFunctionPrototypes to compile with, -UNeedFunctionPrototypes to
  35. # compile without, function prototypes in the header files.
  36. #
  37. # You can use the -DSTUPID_COMPILER to circumvent some compilers'
  38. # static limits regarding the number of subexpressions in a statement.
  39.  
  40. # CC        = cc
  41. # CCFLAGS     = -c -DSTUPID_COMPILER
  42.  
  43. # CC        = /usr/lang/acc
  44. # CCFLAGS     = -c -O
  45.  
  46. CC        = gcc -ansi -pedantic
  47. CCFLAGS     = -c -O2 -DNeedFunctionPrototypes=1
  48.  
  49. LD         = $(CC)
  50.  
  51. # LD        = gcc
  52. # LDFLAGS     =
  53.  
  54.  
  55. # If your compiler needs additional flags/libraries, regardless of
  56. # the source compiled, configure them here.
  57.  
  58. # CCINC    = -I/usr/gnu/lib/gcc-2.1/gcc-lib/sparc-sun-sunos4.1.2/2.1/include
  59. ######### Includes needed by $(CC)
  60.  
  61. # LDINC    = -L/usr/gnu/lib/gcc-2.1/gcc-lib/sparc-sun-sunos4.1.2/2.1
  62. ######### Library paths needed by $(LD)
  63.  
  64. # LDLIB    = -lgcc
  65. ######### Additional libraries needed by $(LD)
  66.  
  67.  
  68. # Where do you want to install libraries, binaries, a header file
  69. # and the manual pages?
  70. #
  71. # Leave INSTALL_ROOT empty (or just don't execute "make install") to
  72. # not install gsm and toast outside of this directory.
  73.  
  74. INSTALL_ROOT    =
  75.  
  76. # Where do you want to install the gsm library, header file, and manpages?
  77. #
  78. # Leave GSM_INSTALL_ROOT empty to not install the GSM library outside of
  79. # this directory.
  80.  
  81. GSM_INSTALL_ROOT = $(INSTALL_ROOT)
  82. GSM_INSTALL_LIB = $(GSM_INSTALL_ROOT)/lib
  83. GSM_INSTALL_INC = $(GSM_INSTALL_ROOT)/inc
  84. GSM_INSTALL_MAN = $(GSM_INSTALL_ROOT)/man/man3
  85.  
  86.  
  87. # Where do you want to install the toast binaries and their manpage?
  88. #
  89. # Leave TOAST_INSTALL_ROOT empty to not install the toast binaries outside
  90. # of this directory.
  91.  
  92. TOAST_INSTALL_ROOT      = $(INSTALL_ROOT)
  93. TOAST_INSTALL_BIN = $(TOAST_INSTALL_ROOT)/bin
  94. TOAST_INSTALL_MAN = $(TOAST_INSTALL_ROOT)/man/man1
  95.  
  96. #  Other tools
  97.  
  98. SHELL        = /bin/sh
  99. LN        = ln
  100. BASENAME     = basename
  101. AR        = ar
  102. ARFLAGS        = cr
  103. RMFLAGS        =
  104. FIND        = find
  105. COMPRESS     = compress
  106. COMPRESSFLAGS     = 
  107. # RANLIB     = true
  108. RANLIB         = ranlib
  109.  
  110. #
  111. #    You shouldn't have to configure below this line if you're porting.
  112.  
  113.  
  114. # Local Directories
  115.  
  116. ROOT    = .
  117. ADDTST    = $(ROOT)/add-test
  118. TST    = $(ROOT)/tst
  119. MAN    = $(ROOT)/man
  120. BIN    = $(ROOT)/bin
  121. SRC    = $(ROOT)/src
  122. LIB    = $(ROOT)/lib
  123. TLS    = $(ROOT)/tls
  124. INC    = $(ROOT)/inc
  125.  
  126. # Flags
  127.  
  128. # DEBUG    = -DNDEBUG
  129. ######### Remove -DNDEBUG to enable assertions.
  130.  
  131. CFLAGS    = $(CCFLAGS) $(SASR) $(DEBUG) $(MULHACK) $(FAST) $(LTP_CUT) \
  132.     $(WAV49) $(CCINC) -I$(INC)
  133. ######### It's $(CC) $(CFLAGS)
  134.  
  135. LFLAGS    = $(LDFLAGS) $(LDINC)
  136. ######### It's $(LD) $(LFLAGS)
  137.  
  138.  
  139. # Targets
  140.  
  141. LIBGSM    = $(LIB)/libgsm.a
  142.  
  143. TOAST    = $(BIN)/toast
  144. UNTOAST    = $(BIN)/untoast
  145. TCAT    = $(BIN)/tcat
  146.  
  147. # Headers
  148.  
  149. GSM_HEADERS =    $(INC)/gsm.h
  150.  
  151. HEADERS    =    $(INC)/proto.h        \
  152.         $(INC)/unproto.h    \
  153.         $(INC)/config.h        \
  154.         $(INC)/private.h    \
  155.         $(INC)/gsm.h        \
  156.         $(INC)/toast.h        \
  157.         $(TLS)/taste.h
  158.  
  159. # Sources
  160.  
  161. GSM_SOURCES =    $(SRC)/add.c        \
  162.         $(SRC)/code.c        \
  163.         $(SRC)/debug.c        \
  164.         $(SRC)/decode.c        \
  165.         $(SRC)/long_term.c    \
  166.         $(SRC)/lpc.c        \
  167.         $(SRC)/preprocess.c    \
  168.         $(SRC)/rpe.c        \
  169.         $(SRC)/gsm_destroy.c    \
  170.         $(SRC)/gsm_decode.c    \
  171.         $(SRC)/gsm_encode.c    \
  172.         $(SRC)/gsm_explode.c    \
  173.         $(SRC)/gsm_implode.c    \
  174.         $(SRC)/gsm_create.c    \
  175.         $(SRC)/gsm_print.c    \
  176.         $(SRC)/gsm_option.c    \
  177.         $(SRC)/short_term.c    \
  178.         $(SRC)/table.c
  179.  
  180. TOAST_SOURCES = $(SRC)/toast.c         \
  181.         $(SRC)/toast_lin.c    \
  182.         $(SRC)/toast_ulaw.c    \
  183.         $(SRC)/toast_alaw.c    \
  184.         $(SRC)/toast_audio.c
  185.  
  186. SOURCES    =    $(GSM_SOURCES)        \
  187.         $(TOAST_SOURCES)    \
  188.         $(ADDTST)/add_test.c    \
  189.         $(TLS)/sour.c        \
  190.         $(TLS)/ginger.c        \
  191.         $(TLS)/sour1.dta    \
  192.         $(TLS)/sour2.dta    \
  193.         $(TLS)/bitter.c        \
  194.         $(TLS)/bitter.dta    \
  195.         $(TLS)/taste.c        \
  196.         $(TLS)/sweet.c        \
  197.         $(TST)/cod2lin.c    \
  198.         $(TST)/cod2txt.c    \
  199.         $(TST)/gsm2cod.c    \
  200.         $(TST)/lin2cod.c    \
  201.         $(TST)/lin2txt.c
  202.  
  203. # Object files
  204.  
  205. GSM_OBJECTS =    $(SRC)/add.o        \
  206.         $(SRC)/code.o        \
  207.         $(SRC)/debug.o        \
  208.         $(SRC)/decode.o        \
  209.         $(SRC)/long_term.o    \
  210.         $(SRC)/lpc.o        \
  211.         $(SRC)/preprocess.o    \
  212.         $(SRC)/rpe.o        \
  213.         $(SRC)/gsm_destroy.o    \
  214.         $(SRC)/gsm_decode.o    \
  215.         $(SRC)/gsm_encode.o    \
  216.         $(SRC)/gsm_explode.o    \
  217.         $(SRC)/gsm_implode.o    \
  218.         $(SRC)/gsm_create.o    \
  219.         $(SRC)/gsm_print.o    \
  220.         $(SRC)/gsm_option.o    \
  221.         $(SRC)/short_term.o    \
  222.         $(SRC)/table.o
  223.  
  224. TOAST_OBJECTS =    $(SRC)/toast.o         \
  225.         $(SRC)/toast_lin.o    \
  226.         $(SRC)/toast_ulaw.o    \
  227.         $(SRC)/toast_alaw.o    \
  228.         $(SRC)/toast_audio.o
  229.  
  230. OBJECTS =     $(GSM_OBJECTS) $(TOAST_OBJECTS)
  231.  
  232. # Manuals
  233.  
  234. GSM_MANUALS =    $(MAN)/gsm.3        \
  235.         $(MAN)/gsm_explode.3    \
  236.         $(MAN)/gsm_option.3    \
  237.         $(MAN)/gsm_print.3
  238.  
  239. TOAST_MANUALS =    $(MAN)/toast.1
  240.  
  241. MANUALS    =     $(GSM_MANUALS) $(TOAST_MANUALS) $(MAN)/bitter.1
  242.  
  243. # Other stuff in the distribution
  244.  
  245. STUFF =     ChangeLog            \
  246.         INSTALL            \
  247.         MACHINES        \
  248.         MANIFEST        \
  249.         Makefile        \
  250.         README            \
  251.         $(ADDTST)/add_test.dta    \
  252.         $(TLS)/bitter.dta    \
  253.         $(TST)/run
  254.  
  255.  
  256. # Install targets
  257.  
  258. GSM_INSTALL_TARGETS =    \
  259.         $(GSM_INSTALL_LIB)/libgsm.a        \
  260.         $(GSM_INSTALL_INC)/gsm.h        \
  261.         $(GSM_INSTALL_MAN)/gsm.3        \
  262.         $(GSM_INSTALL_MAN)/gsm_explode.3    \
  263.         $(GSM_INSTALL_MAN)/gsm_option.3        \
  264.         $(GSM_INSTALL_MAN)/gsm_print.3
  265.  
  266. TOAST_INSTALL_TARGETS =    \
  267.         $(TOAST_INSTALL_BIN)/toast        \
  268.         $(TOAST_INSTALL_BIN)/tcat        \
  269.         $(TOAST_INSTALL_BIN)/untoast        \
  270.         $(TOAST_INSTALL_MAN)/toast.1
  271.  
  272.  
  273. # Default rules
  274.  
  275. .c.o:
  276.         $(CC) $(CFLAGS) $?
  277.         @-mv `$(BASENAME) $@` $@ > /dev/null 2>&1
  278.  
  279. # Target rules
  280.  
  281. all:        $(LIBGSM) $(TOAST) $(TCAT) $(UNTOAST)
  282.         @-echo $(ROOT): Done.
  283.  
  284. tst:        $(TST)/lin2cod $(TST)/cod2lin $(TOAST) $(TST)/test-result
  285.         @-echo tst: Done.
  286.  
  287. addtst:        $(ADDTST)/add $(ADDTST)/add_test.dta
  288.         $(ADDTST)/add < $(ADDTST)/add_test.dta > /dev/null
  289.         @-echo addtst: Done.
  290.  
  291. misc:        $(TLS)/sweet $(TLS)/bitter $(TLS)/sour $(TLS)/ginger     \
  292.             $(TST)/lin2txt $(TST)/cod2txt $(TST)/gsm2cod
  293.         @-echo misc: Done.
  294.  
  295. install:    toastinstall gsminstall
  296.         @-echo install: Done.
  297.  
  298.  
  299. # The basic API: libgsm
  300.  
  301. $(LIBGSM):    $(LIB) $(GSM_OBJECTS)
  302.         -rm $(RMFLAGS) $(LIBGSM)
  303.         $(AR) $(ARFLAGS) $(LIBGSM) $(GSM_OBJECTS)
  304.         $(RANLIB) $(LIBGSM)
  305.  
  306.  
  307. # Toast, Untoast and Tcat -- the compress-like frontends to gsm.
  308.  
  309. $(TOAST):    $(BIN) $(TOAST_OBJECTS) $(LIBGSM)
  310.         $(LD) $(LFLAGS) -o $(TOAST) $(TOAST_OBJECTS) $(LIBGSM) $(LDLIB)
  311.  
  312. $(UNTOAST):    $(BIN) $(TOAST)
  313.         -rm $(RMFLAGS) $(UNTOAST)
  314.         $(LN) $(TOAST) $(UNTOAST)
  315.  
  316. $(TCAT):    $(BIN) $(TOAST)
  317.         -rm $(RMFLAGS) $(TCAT)
  318.         $(LN) $(TOAST) $(TCAT)
  319.  
  320.  
  321. # The local bin and lib directories
  322.  
  323. $(BIN):
  324.         if [ ! -d $(BIN) ] ; then mkdir $(BIN) ; fi
  325.  
  326. $(LIB):
  327.         if [ ! -d $(LIB) ] ; then mkdir $(LIB) ; fi
  328.  
  329.  
  330. # Installation
  331.  
  332. gsminstall:
  333.         -if [ x"$(GSM_INSTALL_ROOT)" != x ] ; then    \
  334.             make $(GSM_INSTALL_TARGETS) ;    \
  335.         fi
  336.  
  337. toastinstall:
  338.         -if [ x"$(TOAST_INSTALL_ROOT)" != x ]; then    \
  339.             make $(TOAST_INSTALL_TARGETS);    \
  340.         fi
  341.  
  342. gsmuninstall:
  343.         -if [ x"$(GSM_INSTALL_ROOT)" != x ] ; then    \
  344.             rm $(RMFLAGS) $(GSM_INSTALL_TARGETS) ;    \
  345.         fi
  346.  
  347. toastuninstall:
  348.         -if [ x"$(TOAST_INSTALL_ROOT)" != x ] ; then     \
  349.             rm $(RMFLAGS) $(TOAST_INSTALL_TARGETS);    \
  350.         fi
  351.  
  352. $(TOAST_INSTALL_BIN)/toast:    $(TOAST)
  353.         -rm $@
  354.         cp $(TOAST) $@
  355.         chmod 755 $@
  356.  
  357. $(TOAST_INSTALL_BIN)/untoast:    $(TOAST_INSTALL_BIN)/toast
  358.         -rm $@
  359.         ln $? $@
  360.  
  361. $(TOAST_INSTALL_BIN)/tcat:    $(TOAST_INSTALL_BIN)/toast
  362.         -rm $@
  363.         ln $? $@
  364.  
  365. $(TOAST_INSTALL_MAN)/toast.1:    $(MAN)/toast.1
  366.         -rm $@
  367.         cp $? $@
  368.         chmod 444 $@
  369.  
  370. $(GSM_INSTALL_MAN)/gsm.3:    $(MAN)/gsm.3
  371.         -rm $@
  372.         cp $? $@
  373.         chmod 444 $@
  374.  
  375. $(GSM_INSTALL_MAN)/gsm_option.3:    $(MAN)/gsm_option.3
  376.         -rm $@
  377.         cp $? $@
  378.         chmod 444 $@
  379.  
  380. $(GSM_INSTALL_MAN)/gsm_explode.3:    $(MAN)/gsm_explode.3
  381.         -rm $@
  382.         cp $? $@
  383.         chmod 444 $@
  384.  
  385. $(GSM_INSTALL_MAN)/gsm_print.3:    $(MAN)/gsm_print.3
  386.         -rm $@
  387.         cp $? $@
  388.         chmod 444 $@
  389.  
  390. $(GSM_INSTALL_INC)/gsm.h:    $(INC)/gsm.h
  391.         -rm $@
  392.         cp $? $@
  393.         chmod 444 $@
  394.  
  395. $(GSM_INSTALL_LIB)/libgsm.a:    $(LIBGSM)
  396.         -rm $@
  397.         cp $? $@
  398.         chmod 444 $@
  399.  
  400.  
  401. # Distribution
  402.  
  403. dist:        gsm-1.0.tar.Z
  404.         @echo dist: Done.
  405.  
  406. gsm-1.0.tar.Z:    $(STUFF) $(SOURCES) $(HEADERS) $(MANUALS)
  407.         (    cd $(ROOT)/..;                \
  408.             tar cvf - `cat $(ROOT)/gsm-1.0/MANIFEST    \
  409.                 | sed '/^#/d'`            \
  410.         ) | $(COMPRESS) $(COMPRESSFLAGS) > $(ROOT)/gsm-1.0.tar.Z
  411.  
  412. # Clean
  413.  
  414. uninstall:    toastuninstall gsmuninstall
  415.         @-echo uninstall: Done.
  416.  
  417. semi-clean:
  418.         -rm $(RMFLAGS)  */*.o            \
  419.             $(TST)/lin2cod $(TST)/lin2txt    \
  420.             $(TST)/cod2lin $(TST)/cod2txt    \
  421.             $(TST)/gsm2cod             \
  422.             $(TST)/*.*.*
  423.         -$(FIND) . \( -name core -o -name foo \) \
  424.             -print | xargs rm $(RMFLAGS)
  425.  
  426. clean:    semi-clean
  427.         -rm $(RMFLAGS) $(LIBGSM) $(ADDTST)/add        \
  428.             $(TOAST) $(TCAT) $(UNTOAST)    \
  429.             $(ROOT)/gsm-1.0.tar.Z
  430.  
  431.  
  432. # Two tools that helped me generate gsm_encode.c and gsm_decode.c,
  433. # but aren't generally needed to port this.
  434.  
  435. $(TLS)/sweet:    $(TLS)/sweet.o $(TLS)/taste.o
  436.         $(LD) $(LFLAGS) -o $(TLS)/sweet \
  437.             $(TLS)/sweet.o $(TLS)/taste.o $(LDLIB)
  438.  
  439. $(TLS)/bitter:    $(TLS)/bitter.o $(TLS)/taste.o
  440.         $(LD) $(LFLAGS) -o $(TLS)/bitter \
  441.             $(TLS)/bitter.o $(TLS)/taste.o $(LDLIB)
  442.  
  443. # A version of the same family that Jeff Chilton used to implement
  444. # the WAV #49 GSM format.
  445.  
  446. $(TLS)/ginger:    $(TLS)/ginger.o $(TLS)/taste.o
  447.         $(LD) $(LFLAGS) -o $(TLS)/ginger \
  448.             $(TLS)/ginger.o $(TLS)/taste.o $(LDLIB)
  449.  
  450. $(TLS)/sour:    $(TLS)/sour.o $(TLS)/taste.o
  451.         $(LD) $(LFLAGS) -o $(TLS)/sour \
  452.             $(TLS)/sour.o $(TLS)/taste.o $(LDLIB)
  453.  
  454. # Run $(ADDTST)/add < $(ADDTST)/add_test.dta to make sure the
  455. # basic arithmetic functions work as intended.
  456.  
  457. $(ADDTST)/add:    $(ADDTST)/add_test.o
  458.         $(LD) $(LFLAGS) -o $(ADDTST)/add $(ADDTST)/add_test.o $(LDLIB)
  459.  
  460.  
  461. # Various conversion programs between linear, text, .gsm and the code
  462. # format used by the tests we ran (.cod).  We paid for the test data,
  463. # so I guess we can't just provide them with this package.  Still,
  464. # if you happen to have them lying around, here's the code.
  465. # You can use gsm2cod | cod2txt independently to look at what's
  466. # coded inside the compressed frames, although this shouldn't be
  467. # hard to roll on your own using the gsm_print() function from
  468. # the API.
  469.  
  470.  
  471. $(TST)/test-result:    $(TST)/lin2cod $(TST)/cod2lin $(TOAST) $(TST)/run
  472.             ( cd $(TST); ./run ) 
  473.  
  474. $(TST)/lin2txt:        $(TST)/lin2txt.o $(LIBGSM)
  475.             $(LD) $(LFLAGS) -o $(TST)/lin2txt \
  476.                 $(TST)/lin2txt.o $(LIBGSM) $(LDLIB)
  477.  
  478. $(TST)/lin2cod:        $(TST)/lin2cod.o $(LIBGSM)
  479.             $(LD) $(LFLAGS) -o $(TST)/lin2cod \
  480.                 $(TST)/lin2cod.o $(LIBGSM) $(LDLIB)
  481.  
  482. $(TST)/gsm2cod:        $(TST)/gsm2cod.o $(LIBGSM)
  483.             $(LD) $(LFLAGS) -o $(TST)/gsm2cod \
  484.                 $(TST)/gsm2cod.o $(LIBGSM) $(LDLIB)
  485.  
  486. $(TST)/cod2txt:        $(TST)/cod2txt.o $(LIBGSM)
  487.             $(LD) $(LFLAGS) -o $(TST)/cod2txt \
  488.                 $(TST)/cod2txt.o $(LIBGSM) $(LDLIB)
  489.  
  490. $(TST)/cod2lin:        $(TST)/cod2lin.o $(LIBGSM)
  491.             $(LD) $(LFLAGS) -o $(TST)/cod2lin \
  492.                 $(TST)/cod2lin.o $(LIBGSM) $(LDLIB)
  493.