source: git/Singular/Makefile.in @ 8b0b91

spielwiese
Last change on this file since 8b0b91 was 8b0b91, checked in by Michael Brickenstein <bricken@…>, 21 years ago
*bricken: CXXG = @CXX@ git-svn-id: file:///usr/local/Singular/svn/trunk@6579 2c84dea3-7e68-4137-9b89-c4e89433aadc
  • Property mode set to 100644
File size: 27.2 KB
Line 
1#################################################################
2###
3### Makefile for Singular
4###
5#################################################################
6
7SHELL           = /bin/sh
8
9##
10## version
11##
12SINGULAR_VERSION        = @SINGULAR_VERSION@
13SINGULAR                = @SINGULAR@
14SINGUNAME               = @SINGUNAME@
15EXEC_EXT                = @EXEC_EXT@
16##
17## various paths
18##
19srcdir          = @srcdir@
20prefix          = @prefix@
21exec_prefix     = @exec_prefix@
22libdir          = @libdir@
23# program executable goes here
24bindir          = @bindir@
25# includes are taken from here
26includedir      = @includedir@
27slibdir         = ${prefix}/LIB
28install_bindir  = ${install_prefix}/${SINGUNAME}
29install_slibdir = ${install_prefix}/LIB
30
31##
32## various programs
33##
34@SET_MAKE@
35CC              = @CC@
36LD              = @LD@
37CXX             = @CXX@
38LEX             = @LEX@
39PERL            = @PERL@
40BISON           = bison
41INSTALL         = @INSTALL@
42INSTALL_PROGRAM = @INSTALL_PROGRAM@
43INSTALL_DATA    = @INSTALL_DATA@
44MKINSTALLDIRS   = ./mkinstalldirs
45LN_S            = @LN_S@
46
47##
48## compiler and linker options
49##
50PIPE            = @PIPE@
51CFLAGS          = @CFLAGS@ ${PIPE}
52CXXFLAGS        = @CXXFLAGS@ ${PIPE}
53CXXTEMPLFLAGS   = @CXXTEMPLFLAGS@
54CPPFLAGS        = -I${srcdir} @CPPFLAGS@
55DEFS            = -DNDEBUG -DOM_NDEBUG -D@SING_UNAME@ @DEFS@
56LDFLAGS         = @LDFLAGS@
57LD_DYN_FLAGS    = @LD_DYN_FLAGS@
58SFLAGS          = @SFLAGS@
59SLDFLAGS        = @SLDFLAGS@
60
61LD_LIBC         = -lc
62STATIC_LDFLAGS  = @STATIC_LDFLAGS@
63# under cygwin, do not explicitly link against -lm, for it is the cygwin
64# lib -- if you really want to do this, use -lm as the _last_ thing on the
65# arguments to link
66ifneq ($(SINGUNAME),ix86-Win)
67LIBS            = -lm @NEED_LIBS@
68else
69LIBS            = -lsingfac -lsingcf -lgmp -static -lgdbm -lreadline -lncurses
70endif
71MP_LIBS         = @MP_LIBS@
72DL_KERNEL       = @DL_KERNEL@
73HAVE_MPSR       = @HAVE_MPSR@
74
75ifdef LD_STATIC
76LDFLAGS  := ${STATIC_LDFLAGS} ${LDFLAGS}
77SING_EXEC = Singular-static
78LIBS := ${MP_LIBS} ${LIBS}
79DL_KERNEL =
80else
81LDFLAGS  := ${LD_DYN_FLAGS} ${LDFLAGS}
82SING_EXEC = Singular
83endif
84
85# CXXFLAGS =  -g -Wall -Wno-unused
86# CFLAGS =  -g -Wall -Wno-unused
87##
88## End configuration dependend stuff
89#################################################################
90
91###
92### file sets
93###
94
95# normal C++ source files
96CXXSOURCES=grammar.cc scanner.cc algmap.cc attrib.cc clapconv.cc \
97    clapsing.cc mminit.cc eigenval.cc\
98    extra.cc febase.cc feread.cc fehelp.cc feResource.cc feOpt.cc \
99    ffields.cc hdegree.cc hilb.cc hutil.cc \
100    gring.cc gr_kstd2.cc\
101    ideals.cc intvec.cc \
102    ipassign.cc ipconv.cc ipid.cc iplib.cc \
103    ipprint.cc ipshell.cc khstd.cc kstdfac.cc \
104    kstd1.cc kstd2.cc kutil.cc lists.cc \
105    longalg.cc longrat.cc longrat0.cc \
106    maps.cc matpol.cc sdb.cc gnumpfl.cc gnumpc.cc \
107    modulop.cc mpr_complex.cc sparsmat.cc \
108    fglm.cc fglmzero.cc fglmvec.cc fglmgauss.cc fglmhom.cc fglmcomb.cc \
109    numbers.cc polys.cc p_polys.cc polys0.cc polys1.cc polys-impl.cc \
110    ring.cc shortfl.cc silink.cc kspoly.cc \
111    subexpr.cc syz.cc syz0.cc syz1.cc syz2.cc syz3.cc\
112    timer.cc weight.cc \
113    GMPrat.cc multicnt.cc npolygon.cc semic.cc spectrum.cc splist.cc \
114    libparse.cc mod_raw.cc sing_win.cc\
115    gms.cc pcv.cc units.cc kbuckets.cc sbuckets.cc\
116    mpr_inout.cc mpr_base.cc mpr_numeric.cc \
117    prCopy.cc p_Mult_q.cc \
118    pDebug.cc pInline2.cc pInline1.cc pInline0.cc \
119    pShallowCopyDelete.cc fast_maps.cc cntrlc.cc misc.cc
120
121# stuff for MP
122MPSR_SOURCES = mpsr_Put.cc mpsr_PutPoly.cc mpsr_GetPoly.cc mpsr_sl.cc\
123        mpsr_Get.cc mpsr_GetMisc.cc mpsr_Error.cc \
124
125
126# stuff for dbm
127DBMSR_SOURCES =  ndbm.cc sing_dbm.cc
128
129# normal C source files
130CSOURCES=weight0.c fegetopt.c fereadl.c page.c dError.c mmstd.c
131
132# C++ sources which are used if part of the kernel are dynamically linked
133DL_KERNEL_SOURCES=p_Procs_Dynamic.cc slInit_Dynamic.cc
134
135# C++ sources which are used for dynamic libraries if part of the kernel is
136# dynamically linked
137DL_LIB_SOURCES=p_Procs_Lib.cc
138
139# C++ sources which are used if no parts of the kernel are dynamically linked
140STATIC_SOURCES=p_Procs_Static.cc slInit_Static.cc
141
142# C++ sources for which both, shared and static object files are needed
143COMMON_SOURCES = $(MPSR_SOURCES) $(DBMSR_SOURCES)
144
145# special C++ source files (need extra compiling and/or linking), for which
146# dependencies should be generated
147ESOURCES=mmalloc.cc iparith.cc $(COMMON_SOURCES) \
148        $(DL_KERNEL_SOURCES) $(DL_LIB_SOURCES) $(STATIC_SOURCES)
149
150SOURCES=${CSOURCES} ${CXXSOURCES} \
151        grammar.y scanner.l libparse.l syz2.cc prCopyTemplate.cc \
152        p_Delete__T.cc p_ShallowCopyDelete__T.cc \
153        p_Copy__T.cc p_Mult_nn__T.cc  pp_Mult_nn__T.cc \
154        pp_Mult_mm__T.cc p_Mult_mm__T.cc \
155        p_Minus_mm_Mult_qq__T.cc p_Add_q__T.cc \
156        p_Neg__T.cc pp_Mult_Coeff_mm_DivSelect__T.cc \
157        pp_Mult_Coeff_mm_DivSelectMult__T.cc \
158        p_Merge_q__T.cc pp_Mult_mm_Noether__T.cc\
159        p_kBucketSetLm__T.cc \
160        kInline.cc utils.cc utils.h \
161        tesths.cc mpsr_Tok.cc claptmpl.cc
162
163HEADERS=algmap.h hutil.h lists.h stairc.h attrib.h ideals.h \
164        longalg.h mpsr_Tok.h structs.h intvec.h longrat.h \
165        numbers.h stype.h clapconv.h ipconv.h maps.h page.h \
166        subexpr.h clapsing.h ipid.h matpol.h polys.h p_polys.h syz.h \
167        cntrlc.h ipprint.h ring.h timer.h sdb.h dError.h \
168        febase.h ipshell.h shortfl.h tok.h mpr_complex.h mpr_global.h \
169        page.h gring.h fast_maps.h \
170        ffields.h khstd.h silink.h sparsmat.h gnumpfl.h gnumpc.h \
171        fglm.h kstd1.h modulop.h sing_dbm.h weight.h \
172        fglmgauss.h fglmvec.h mpsr.h mpsr_sl.h\
173        kstdfac.h mpsr_Get.h kmatrix.h\
174        kutil.h mpsr_Put.h\
175        ndbm.h dbm_sl.h polys-impl.h libparse.h \
176        GMPrat.h multicnt.h npolygon.h semic.h spectrum.h splist.h multicnt.h \
177        gms.h pcv.h units.h eigenval.h mod_raw.h kbuckets.h sbuckets.h\
178        mpr_global.h mpr_inout.h mpr_base.h mpr_numeric.h \
179        feOpt.h fegetopt.h distrib.h walk.h \
180        prCopy.h prCopyMacros.h \
181        p_MemAdd.h p_MemCopy.h p_MemCmp.h p_Numbers.h \
182        pInline2.h pInline1.h pInline0.h mmalloc.h static.h\
183        omSingularConfig.h pShallowCopyDelete.h \
184        p_Procs_Dynamic.h p_Procs_Impl.h p_Procs_Set.h \
185        p_Procs.h p_Procs_Static.h p_Mult_q.h
186
187DISTFILES=${SOURCES} ${HEADERS} ${ESOURCES} \
188        Makefile.in configure.in configure \
189        mod2.h.in grammar.h testgh install-sh mkinstalldirs \
190        check_aso.pl prCopy.pl
191
192OBJS := $(CXXSOURCES:.cc=.o) $(CSOURCES:.c=.o)
193
194ifeq ($(SINGUNAME),ix86-Win)
195OBJS := $(OBJS) Singular_res.o
196endif
197
198P_PROCS_MODULES = FieldZp FieldIndep FieldQ FieldGeneral
199
200ifeq ($(DL_KERNEL),1)
201OBJS    := $(OBJS) $(DL_KERNEL_SOURCES:.cc=.o)
202DBMSR_SO= dbmsr.so
203DL_LIBS := $(P_PROCS_MODULES:%=p_Procs_%.so) $(DBMSR_SO)
204ifeq ($(HAVE_MPSR), 1)
205MPSR_SO =       mpsr.so
206DL_LIBS :=      $(DL_LIBS) $(MPSR_SO)
207endif
208else
209ifndef LD_STATIC
210LIBS := $(MP_LIBS) $(LIBS)
211endif
212OBJS := $(OBJS) $(STATIC_SOURCES:.cc=.o) $(COMMON_SOURCES:.cc=.o)
213DL_LIBS=
214endif
215
216#
217# Singular libraries which go into distribution
218# MAKE SURE THAT THIS IS UP_TO_DATE
219#
220SLIBS = COPYING \
221        ainvar.lib   algebra.lib   all.lib       brnoeth.lib    classify.lib \
222        deform.lib   elim.lib      equising.lib  finvar.lib     gaussman.lib \
223        general.lib  graphics.lib  hnoether.lib  homolog.lib    inout.lib \
224        intprog.lib  latex.lib     linalg.lib    makedbm.lib    matrix.lib \
225        mprimdec.lib \
226        mondromy.lib mregular.lib  normal.lib    ntsolve.lib    paramet.lib \
227        poly.lib     presolve.lib  primdec.lib   primitiv.lib   qhmoduli.lib \
228        random.lib   reesclos.lib  ring.lib      rinvar.lib     sing.lib \
229        solve.lib    spcurve.lib   spectrum.lib  standard.lib   stratify.lib \
230        surf.lib     toric.lib     triang.lib    zeroset.lib
231
232SLIBS_FILES = $(addprefix LIB/,${SLIBS})
233
234GFTABLES = $(wildcard LIB/gftables/[1-9]*)
235
236##
237## Build Targets
238##
239.l.cc:
240        @if test "x${LEX}" = x; then \
241                echo Error: no lex given, could not rebuilt scanner.cc;\
242                exit 1; \
243        fi
244        ${LEX} -s -I -t $< > scanner.cc
245.y.cc:
246        @if test "x${BISON}" = x; then \
247                echo Error: no bison given, could not rebuilt grammar.cc;\
248                exit 1; \
249        fi
250        ${BISON} -d -t -o grammar.cc $<
251        chmod +x testgh
252        ./testgh
253
254.cc.o: 
255        ${CXX} ${CXXFLAGS} ${CXXTEMPLFLAGS} ${CPPFLAGS} ${DEFS} -c $<
256.c.o:
257        ${CC} ${CFLAGS} ${CPPFLAGS} ${DEFS} -c $<
258
259# building objects for shared libraries
260p_Procs_Lib_%.dl_o : p_Procs_Lib.cc p_Procs_Dynamic.o
261        ${CXX} ${CXXFLAGS} ${CXXTEMPLFLAGS} ${CPPFLAGS} ${DEFS} ${SFLAGS} -Dp_Procs_$* -c $< -o $@
262
263%.dl_o : %.cc
264        ${CXX} ${CXXFLAGS} ${CXXTEMPLFLAGS} ${CPPFLAGS} ${DEFS} ${SFLAGS} -c $< -o $@
265
266
267all:    $(SING_EXEC)
268
269Singular-static: version.h
270        sleep 1
271        echo "#define HAVE_STATIC" > static.h
272        ${MAKE} LD_STATIC=1 S_EXT="-static" Singular-static
273        echo "#undef HAVE_STATIC" > static.h
274
275Singular${S_EXT}: mod2.h Makefile version.h scanner.cc  ${OBJS} mmalloc.o \
276          iparith.o tesths.cc libparse.cc claptmpl.o mpsr_Tok.o $(DL_LIBS)
277        ${CXX} ${CXXFLAGS} ${CPPFLAGS} ${CXXTEMPLFLAGS} ${DEFS} \
278          -o Singular${S_EXT} \
279          tesths.cc iparith.o mpsr_Tok.o claptmpl.o\
280          ${OBJS} ${LDFLAGS} ${LIBS} -lomalloc_ndebug mmalloc.o
281
282%.static: version.h
283        ${MAKE} DL_KERNEL=0 S_EXT=".static" $@
284
285iparith.o mpsr_Tok.o : iparith.inc mpsr_Tok.inc
286
287cntrlc.o cntrlc.og : feOptES.inc feOptTS.inc feOpt.inc
288
289p_Procs_Lib.o: p_Procs_Lib.inc
290
291claptmpl.o: claptmpl.cc mod2.h
292        ${CXX} ${CXXFLAGS}  ${CPPFLAGS} ${DEFS} -c $<   
293
294iparith.inc mpsr_Tok.inc: claptmpl.o iparith.cc mmalloc.o\
295                          ipconv.cc tok.h mpsr_Tok.cc grammar.h mod2.h
296        ${CXX} ${CXXFLAGS} ${CPPFLAGS} ${CXXTEMPLFLAGS} ${DEFS} -DGENTABLE \
297             -o gentable claptmpl.o iparith.cc tesths.cc mpsr_Tok.cc \
298             ${OBJS} ${LDFLAGS} ${LIBS} -lomalloc_ndebug mmalloc.o
299        ./gentable
300        /bin/rm -f gentable gentable.exe
301
302
303version.h: ${SOURCES} ${HEADERS} Makefile.in mod2.h.in \
304           configure.in
305        echo "#define feVersionId "  `date '+%Y%m%d%H'` >version.h
306
307libparse: libparse_main.o utils.o fegetopt.o febase.cc
308        ${CXX}  -DSTANDALONE_PARSER -o libparse febase.cc libparse_main.o utils.o fegetopt.o
309
310libparse_main.o: libparse.cc
311        ${CXX} -c -o libparse_main.o libparse.cc  -DSTANDALONE_PARSER
312
313libparse.cc: libparse.l
314        @if test "x${LEX}" = x; then \
315                echo Error: no lex given, could not rebuilt libparse.cc;\
316                exit 1; \
317        fi
318        ${LEX} -I -Pyylp -olibparse.cc libparse.l
319
320# Hmm compiling with -fomit-frame-pointer resulted in access violation
321# under cygwin
322ESingular: fegetopt.o feResource.cc mod2.h feOpt.cc version.h emacs.cc \
323           feOptES.inc mmalloc.o
324        ${CXX} -O2 ${CPPFLAGS} ${DEFS} -DESINGULAR -o ESingular emacs.cc fegetopt.o \
325        ${LDFLAGS} -lomalloc_ndebug mmalloc.o
326
327TSingular: fegetopt.o feResource.cc mod2.h feOpt.cc version.h emacs.cc \
328           feOptTS.inc mmalloc.o
329        ${CXX} -O2 ${CPPFLAGS} ${DEFS} -DTSINGULAR -o TSingular emacs.cc fegetopt.o \
330        ${LDFLAGS} -lomalloc_ndebug mmalloc.o
331
332feOpt.o: feOpt.inc feOptES.inc feOptTS.inc
333extra.o: feOpt.inc
334
335feOpt.inc: feOpt.cc mod2.h feOpt.h
336        $(CXX) -DGENERATE_OPTION_INDEX feOpt.cc -o feOpt
337        ./feOpt
338        /bin/rm -f feOpt feOpt.exe
339
340feOptES.inc: feOpt.cc mod2.h feOpt.h
341        $(CXX) -DGENERATE_OPTION_INDEX  -DESINGULAR feOpt.cc -o feOpt
342        ./feOpt
343        rm -f feOpt feOpt.exe
344
345feOptTS.inc: feOpt.cc mod2.h feOpt.h
346        $(CXX) -DGENERATE_OPTION_INDEX  -DTSINGULAR feOpt.cc -o feOpt
347        ./feOpt
348        rm -f feOpt feOpt.exe
349
350prCopy.o: prCopy.inc
351
352prCopy.inc : prCopyMacros.h prCopyTemplate.cc prCopy.pl
353        $(PERL) prCopy.pl > prCopy.inc
354
355# additional dependencies for p_Procs_[Static|Dynamic|Lib].cc
356p_Procs_Static.o: p_Procs_Static.inc
357p_Procs_Static.inc: p_Procs_Static.h
358p_Procs_Dynamic.o p_Procs_Lib.o: p_Procs_Dynamic.inc
359p_Procs_Dynamic.inc p_Procs_Lib.inc: p_Procs_Dynamic.h
360
361# here is how p_Procs_[Static|Dynamic].inc is generated
362p_Procs_%.inc: p_Procs_Generate.cc p_Procs_Impl.h mod2.h
363        $(CXX) -g -Wall -Dp_Procs_$* p_Procs_Generate.cc -o p_Procs_$*
364        ./p_Procs_$* > p_Procs_$*.inc
365        -rm -f p_Procs_$* p_Procs_$*.exe
366
367p_Procs_%.so: p_Procs_Lib_%.dl_o
368        $(LD) ${SLDFLAGS} -o $@ $^
369
370mpsr.so: $(MPSR_SOURCES:.cc=.dl_o)
371        $(LD) ${SLDFLAGS} -o $@ $^ -L${libdir} ${MP_LIBS}
372
373dbmsr.so: $(DBMSR_SOURCES:.cc=.dl_o)
374        $(LD) ${SLDFLAGS} -o $@ $^
375
376src: scanner.cc grammar.h grammar.cc libparse.cc
377
378mod2.h: stamp-h
379
380stamp-h : config.status mod2.h.in
381        CONFIG_FILES= CONFIG_HEADERS="mod2.h" ./config.status
382
383Makefile: Makefile.in config.status
384        CONFIG_FILES="Makefile" CONFIG_HEADERS= ./config.status
385
386config.status: configure
387        ./config.status --recheck
388
389configure: configure.in
390        @echo "WARNING: You need to rerun autoconf. I am proceeding, for now."
391        @touch configure
392#       autoconf
393
394ifeq ($(SINGUNAME),ix86-Win)
395##
396## windows only targets
397##
398
399## resources
400Singular.rc: Singular.rc.in config.status
401        CONFIG_FILES="Singular.rc" CONFIG_HEADERS= ./config.status
402
403ESingular_res.o: Singular.rc
404        windres -DESINGULAR -i Singular.rc -o ESingular_res.o
405
406TSingular_res.o: Singular.rc
407        windres -DTSINGULAR -i Singular.rc -o TSingular_res.o
408
409Singular_res.o: Singular.rc
410        windres -DSINGULAR -i Singular.rc -o Singular_res.o
411
412## run
413run.o: run.c run.h
414        gcc -c -I. -O2 run.c -o run.o
415
416runTSingular : run.o TSingular_res.o
417        gcc -mwindows -e _mainCRTStartup run.o TSingular_res.o -o runTSingular.exe
418
419runESingular : run.o ESingular_res.o
420        gcc -mwindows -e _mainCRTStartup run.o ESingular_res.o -o runESingular.exe
421
422RUN_SINGULARS=runESingular runTSingular
423
424endif
425
426##
427## install targets
428##
429install: all installbin installslib
430
431installbin: ${SING_EXEC} libparse ESingular TSingular ${RUN_SINGULARS}
432        ${MKINSTALLDIRS} ${bindir}
433        ${INSTALL_PROGRAM} ${SING_EXEC} ${SINGULAR}
434        ${INSTALL_PROGRAM} libparse ${RUN_SINGULARS} ${bindir}
435        ${INSTALL_PROGRAM} ESingular TSingular ${DL_LIBS} ${bindir}
436        chmod a+x ${SINGULAR}
437        rm -f ${bindir}/${SING_EXEC}${EXEC_EXT}
438        cd ${bindir}; ${LN_S} ${SINGULAR} Singular${EXEC_EXT};
439
440installslib: LIB
441        test -r ${slibdir} || ${LN_S} `pwd`/LIB ${slibdir}
442
443
444uninstall: uninstallbin
445
446uninstallbin:
447        rm -f ${bindir}/Singular${EXEC_EXT}
448        rm -f ${SINGULAR}
449        -rmdir ${bindir}
450
451##
452## clean targest
453##
454mostlyclean:
455        -rm -f Singular Singular-static Singulara Singularg Singularp Singularb libparse feOpt*.inc p_Procs_*.inc
456        -rm -f *.o *.og core *.op *.ob *.ot Singulart *.od *_d.cc *_d.c p_Procs *.oa *.dl_o* *.so*
457        -rm -f ESingular* TSingular*
458
459clean: mostlyclean
460        -rm -f *.bak *.d *.dd depend
461        -rm -f ${slibdir}
462
463distclean: clean
464        -rm -f iparith.inc mpsr_Tok.inc stamp.h
465        -rm -f Singular* *.gprof *.bprof *~ .\#* version.h
466        -rm -f mod2.h Makefile TAGS* tags config.status config.cache config.log
467
468srcclean:
469        @echo "This command is intended for maintainers to use;"
470        @echo "Rebuilding the deleted files requires flex"
471        @echo "bison, perl"
472        -rm -f scanner.cc grammar.h grammar.cc libparse.cc
473
474maintainer-clean: distclean srcclean
475        @echo "This command is intended for maintainers to use;"
476        @echo "Rebuilding the deleted files requires flex"
477        @echo "bison, perl and autoconf"
478        -rm configure
479
480##
481## miscellanous targets
482##
483
484install-bindist: $(HEADERS) $(SOURCES) Makefile depend
485        echo "#define MAKE_DISTRIBUTION " > distrib.h
486        sleep 1
487        ${MAKE} ${SING_EXEC} ESingular TSingular libparse ${RUN_SINGULARS}
488        ${MKINSTALLDIRS} ${install_bindir}
489        ${INSTALL_PROGRAM} -s  ${SING_EXEC} ${install_bindir}/Singular
490        ${INSTALL_PROGRAM} -s  libparse ${RUN_SINGULARS} ESingular TSingular ${DL_LIBS} ${install_bindir}
491        echo "#undef MAKE_DISTRIBUTION " > distrib.h
492
493install-sharedist: ${SLIBS_FILES} LIB/gftables
494        ${MKINSTALLDIRS} ${install_slibdir}
495        cp ${SLIBS_FILES} ${install_slibdir}
496        ${MKINSTALLDIRS} ${install_slibdir}/gftables
497        cp ${GFTABLES} ${install_slibdir}/gftables
498        chmod -R +rX ${install_slibdir}/*
499
500tar:
501        tar cf Singular-${SINGULAR_VERSION}-src.tar ${DISTFILES}
502        gzip -f Singular-${SINGULAR_VERSION}-src.tar
503
504backup: tar
505        mcopy -o Singular-${SINGULAR_VERSION}-src.tar.gz a:
506
507TAGS:   ${SOURCES} ${ESOURCES} ${HEADERS}
508        etags ${SOURCES} ${ESOURCES} ${HEADERS}
509
510tags:   
511        ctags *.y *.l *.c *.h *.cc *.inc
512
513echoLIBS:
514        @echo ${SLIBS}
515
516##
517## Below here is stuff for developpers
518#################################################################
519
520
521##
522## .og files for having -O and -g object versions available at the same time
523##
524
525OBJG1 := $(CXXSOURCES:.cc=.og)
526OBJG2 := $(CSOURCES:.c=.og)
527
528OBJP1 := $(CXXSOURCES:.cc=.op)
529OBJP2 := $(CSOURCES:.c=.op)
530
531OBJB1 := $(CXXSOURCES:.cc=.ob)
532OBJB2 := $(CSOURCES:.c=.ob)
533
534OBJT1 := $(CXXSOURCES:.cc=.ot)
535OBJT2 := $(CSOURCES:.c=.ot)
536
537OBJA1 := $(CXXSOURCES:.cc=.oa)
538OBJA2 := $(CSOURCES:.c=.oa)
539
540
541OBJG=$(OBJG1) $(OBJG2)
542OBJP=$(OBJP1) $(OBJP2)
543OBJB=$(OBJB1) $(OBJB2)
544OBJT=$(OBJT1) $(OBJT2)
545OBJA=$(OBJA1) $(OBJA2)
546
547DL_TAILG=\"sog\"
548DL_TAILP=\"sop\"
549DL_TAILB=\"sob\"
550DL_TAILT=\"sot\"
551DL_TAILA=\"soa\"
552
553
554ifeq ($(DL_KERNEL),1)
555
556OBJG := $(OBJG) $(DL_KERNEL_SOURCES:.cc=.og)
557DL_LIBSG := $(P_PROCS_MODULES:%=p_Procs_%.sog) $(MPSR_SO:%.so=%.sog) $(DBMSR_SO:%.so=%.sog)
558
559OBJP := $(OBJP) $(DL_KERNEL_SOURCES:.cc=.op)
560DL_LIBSP := $(P_PROCS_MODULES:%=p_Procs_%.sop) $(MPSR_SO:%.so=%.sop) $(DBMSR_SO:%.so=%.sop)
561
562OBJB := $(OBJB) $(DL_KERNEL_SOURCES:.cc=.ob)
563DL_LIBSB := $(P_PROCS_MODULES:%=p_Procs_%.sob) $(MPSR_SO:%.so=%.sob) $(DBMSR_SO:%.so=%.sob)
564
565OBJT := $(OBJT) $(DL_KERNEL_SOURCES:.cc=.ot)
566DL_LIBST := $(P_PROCS_MODULES:%=p_Procs_%.sot) $(MPSR_SO:%.so=%.sot) $(DBMSR_SO:%.so=%.sot)
567
568OBJA := $(OBJA) $(DL_KERNEL_SOURCES:.cc=.oa)
569DL_LIBSA := $(P_PROCS_MODULES:%=p_Procs_%.soa) $(MPSR_SO:%.so=%.soa) $(DBMSR_SO:%.so=%.soa)
570
571else
572
573OBJG := $(OBJG) $(STATIC_SOURCES:.cc=.og) $(COMMON_SOURCES:.cc=.og)
574DL_LIBSG=
575
576OBJP := $(OBJP) $(STATIC_SOURCES:.cc=.op) $(COMMON_SOURCES:.cc=.op)
577DL_LIBSP=
578
579OBJB := $(OBJB) $(STATIC_SOURCES:.cc=.ob) $(COMMON_SOURCES:.cc=.ob)
580DL_LIBSB=
581
582OBJT := $(OBJT) $(STATIC_SOURCES:.cc=.ot) $(COMMON_SOURCES:.cc=.ot)
583DL_LIBST=
584
585OBJA := $(OBJA) $(STATIC_SOURCES:.cc=.oa) $(COMMON_SOURCES:.cc=.oa)
586DL_LIBST=
587
588endif
589
590
591##
592## compiler and linker options for debug version
593##
594
595CCG             = gcc
596CXXG            = @CXX@
597CXXM            = gcc -MM -MG -DGENERATE_DEPEND
598CCM             = gcc -MM -MG -DGENERATE_DEPEND
599
600CFLAGSG         = -g -Wall -Wno-unused ${PIPE}
601CXXFLAGSG       = -g -Wall -Wno-unused ${PIPE}
602CXXTEMPLFLAGSG  = -fno-implicit-templates
603DEFSG           = -D@SING_UNAME@ @DEFS@ -DDL_TAIL=$(DL_TAILG)
604
605##
606## Debug Targets
607##
608
609p_Procs_%.sog: p_Procs_Lib_%.dl_og
610        ${CXXG} ${CXXFLAGSG} ${SFLAGS} ${SLDFLAGS} $< -o $@
611
612p_Procs_Lib_%.dl_og : p_Procs_Lib.cc  p_Procs_Dynamic.og
613        ${CXXG} ${CXXFLAGSG} ${CXXTEMPLFLAGS} ${CPPFLAGS} ${DEFSG} ${SFLAGS} -Dp_Procs_$* -c $< -o $@
614
615%.dl_og: %.cc
616        ${CXXG} ${CXXFLAGSG} ${CXXTEMPLFLAGSG} ${CPPFLAGS} ${DEFSG} ${SFLAGS} -c $< -o $@
617
618mpsr.sog: $(MPSR_SOURCES:.cc=.dl_og)
619        ${CXXG} ${CXXFLAGSG} ${SFLAGS} ${SLDFLAGS} ${LDFLAGS} -o $@ $^ ${MP_LIBS}
620
621dbmsr.sog: $(DBMSR_SOURCES:.cc=.dl_og)
622        ${CXXG} ${CXXFLAGSG} ${SFLAGS} ${SLDFLAGS} ${LDFLAGS} -o $@ $^ ${MP_LIBS}
623
624claptmpl.og: claptmpl.cc mod2.h
625        $(CXXG)  ${CXXFLAGSG} ${CPPFLAGS} ${DEFSG} -c $< -o $@
626
627%.og: %.cc
628        $(CXXG) ${CXXFLAGSG} ${CXXTEMPLFLAGSG} ${CPPFLAGS} ${DEFSG} -c $< -o $@
629
630$(OBJG2) : %.og: %.c
631        $(CCG)  ${CFLAGSG} ${CPPFLAGS} ${DEFSG} -c $< -o $@
632
633Singularg${S_EXT}: scanner.cc  $(OBJG)  mmalloc.og $(DL_LIBSG)\
634           iparith.og mpsr_Tok.og claptmpl.og tesths.cc version.h
635        $(CXXG) ${CXXFLAGSG} ${CXXTEMPLFLAGSG} ${CPPFLAGS} ${DEFSG} -o Singularg${S_EXT} \
636        tesths.cc iparith.og mpsr_Tok.og claptmpl.og $(OBJG) ${LDFLAGS} ${LIBS} -lomalloc mmalloc.og \
637        ${LD_DYN_FLAGS} ${LD_LIBC}
638
639iparith.og: iparith.inc iparith.cc
640        $(CXXG)  ${CXXFLAGSG} ${CXXTEMPLFLAGSG} ${CPPFLAGS} ${DEFSG} -c iparith.cc -o iparith.og
641
642mpsr_Tok.og: iparith.inc mpsr_Tok.cc
643        $(CXXG) ${CXXFLAGSG} ${CPPFLAGS} ${CXXTEMPLFLAGSG} ${DEFSG} -c mpsr_Tok.cc -o mpsr_Tok.og
644
645installg: Singularg
646        ${MKINSTALLDIRS} ${bindir}
647        ${INSTALL_PROGRAM} Singularg ${bindir} 
648
649ESingularg: fegetopt.og feResource.cc mod2.h feOpt.cc version.h emacs.cc \
650           feOptES.inc mmalloc.og
651        ${CXXG} ${CXXFLAGSG} ${CPPFLAGS} -DESINGULAR -g ${DEFSG} -o ESingularg emacs.cc fegetopt.og ${LDFLAGS} ${LIBS} -lomalloc mmalloc.og
652
653##
654## compiler and linker options for profile version
655##
656
657CCP             = gcc
658CXXP            = gcc
659
660CFLAGSP         = -pg -O3 ${PIPE}
661CXXFLAGSP       = -pg -O3 ${PIPE}
662CXXTEMPLFLAGSP  = -fno-implicit-templates
663DEFSP           = -DNDEBUG -DOM_NDEBUG -DDO_PROFILE -D@SING_UNAME@ @DEFS@ -DDL_TAIL=$(DL_TAILP)
664LDFLAGSP        = -static @LDFLAGS@
665
666CFLAGSB         = -g -O3 ${PIPE}
667CXXFLAGSB       = -g -O3 ${PIPE}
668CXXTEMPLFLAGSB  = -fno-implicit-templates
669DEFSB           = -D@SING_UNAME@ -DOM_NDEBUG -DNDEBUG @DEFS@ -DDL_TAIL=$(DL_TAILB)
670LDFLAGSB        = -static @LDFLAGS@
671
672# bprof object  file to link with
673BPROFOBJ        = /usr/local/lib/bmon.o
674
675DEFST           = -DNO_INLINE -DNDEBUG -D@SING_UNAME@ -DOM_TRACK=2 -DOM_CHECK=0 @DEFS@ -DDL_TAIL=$(DL_TAILT)
676LDFLAGST        = @LDFLAGS@
677CFLAGST         = -g  -O2 -w ${PIPE}
678CXXFLAGST       = -g  -O2 -w ${PIPE}
679
680##
681## op and ob files for gprof and bprof, ot for mtrack, oc for OMCHECK=1
682##
683
684
685##
686## profile targets
687##
688
689## for gprof
690p_Procs_%.sop: p_Procs_Lib_%.dl_op
691        ${CXXP} ${CXXFLAGSP} ${SFLAGS} ${SLDFLAGS} $< -o $@
692
693p_Procs_Lib_%.dl_op : p_Procs_Lib.cc p_Procs_Dynamic.op
694        ${CXXP} ${CXXFLAGS} ${CXXTEMPLFLAGS} ${CPPFLAGS} ${DEFS} ${SFLAGS} -Dp_Procs_$* -c $< -o $@
695
696%.dl_op: %.cc
697        ${CXXP} ${CXXFLAGSP} ${CXXTEMPLFLAGS} ${CPPFLAGS} ${DEFSP} ${SFLAGS} -c $< -o $@
698
699
700mpsr.sop: $(MPSR_SOURCES:.cc=.dl_op)
701        ${CXXP} ${CXXFLAGSP} ${SFLAGS} ${SLDFLAGS} ${LDFLAGS} -o $@ $^ ${MP_LIBS}
702
703dbmsr.sop: $(DBMSR_SOURCES:.cc=.dl_op)
704        ${CXXP} ${CXXFLAGSP} ${SFLAGS} ${SLDFLAGS} ${LDFLAGS} -o $@ $^ ${MP_LIBS}
705
706claptmpl.op: claptmpl.cc mod2.h
707        $(CXXP)  ${CXXFLAGSP} ${CPPFLAGS} ${DEFSP} -c $< -o $@
708
709%.op: %.cc
710        $(CXXP) ${CXXFLAGSP} ${CXXTEMPLFLAGSP} ${CPPFLAGS} ${DEFSP} -c $< -o $@
711
712$(OBJP2) : %.op: %.c
713        $(CCP)  ${CFLAGSP} ${CPPFLAGS} ${DEFSP} -c $< -o $@
714
715Singularp${S_EXT}: scanner.cc   $(OBJP) mmalloc.op\
716           iparith.op mpsr_Tok.op claptmpl.op tesths.cc version.h $(DL_LIBSP)
717        $(CXXP) ${CXXFLAGSP} ${CXXTEMPLFLAGSP} ${CPPFLAGS} ${DEFSP} -o Singularp${S_EXT} \
718        tesths.cc iparith.op mpsr_Tok.op claptmpl.op $(OBJP) ${LDFLAGSP} ${LIBS} -lomalloc_p mmalloc.op\
719        ${LD_DYN_FLAGS}
720
721iparith.op: iparith.inc iparith.cc
722        $(CXXP)  ${CXXFLAGSP} ${CXXTEMPLFLAGSP} ${CPPFLAGS} ${DEFSP} -c iparith.cc -o iparith.op
723
724mpsr_Tok.op: iparith.inc mpsr_Tok.cc
725        $(CXXP) ${CXXFLAGSP} ${CXXTEMPLFLAGSP} ${CPPFLAGS} ${DEFSP} -c mpsr_Tok.cc -o mpsr_Tok.op
726
727
728## for bprof
729p_Procs_%.sob: p_Procs_Lib_%.dl_ob
730        ${CXXP} ${CXXFLAGSB} ${SFLAGS} ${SLDFLAGS} $< -o $@
731
732p_Procs_Lib_%.dl_ob : p_Procs_Lib.cc  p_Procs_Dynamic.ob
733        ${CXXP} ${CXXFLAGS} ${CXXTEMPLFLAGS} ${CPPFLAGS} ${DEFS} ${SFLAGS} -Dp_Procs_$* -c $< -o $@
734
735%.dl_ob: %.cc
736        ${CXXP} ${CXXFLAGSB} ${CXXTEMPLFLAGS} ${CPPFLAGS} ${DEFSB} ${SFLAGS} -c $< -o $@
737
738mpsr.sob: $(MPSR_SOURCES:.cc=.dl_ob)
739        ${CXXP} ${CXXFLAGSB} ${SFLAGS} ${SLDFLAGS} ${LDFLAGS} -o $@ $^ ${MP_LIBS}
740
741dbmsr.sob: $(DBMSR_SOURCES:.cc=.dl_ob)
742        ${CXXP} ${CXXFLAGSB} ${SFLAGS} ${SLDFLAGS} ${LDFLAGS} -o $@ $^ ${MP_LIBS}
743
744claptmpl.ob: claptmpl.cc mod2.h
745        $(CXXP)  ${CXXFLAGSP} ${CPPFLAGS} ${DEFSB} -c $< -o $@
746
747%.ob: %.cc
748        $(CXXP) ${CXXFLAGSP} ${CXXTEMPLFLAGS} ${CPPFLAGS} ${DEFSB} -c $< -o $@
749
750$(OBJB2) : %.ob: %.c
751        $(CCP)  ${CFLAGSP} ${CPPFLAGS} ${DEFSB} -c $< -o $@
752
753Singularb${S_EXT}: scanner.cc   $(OBJB) iparith.ob mpsr_Tok.ob claptmpl.ob tesths.cc version.h mmalloc.ob
754        $(CXXP) ${CXXFLAGSP} ${CPPFLAGS} ${DEFSB} -o Singularb${S_EXT} \
755        tesths.cc iparith.ob mpsr_Tok.ob claptmpl.ob $(OBJB) $(BPROFOBJ) \
756        ${LDFLAGSP} ${LIBS} -lomalloc_ndebug mmalloc.ob ${LD_DYN_FLAGS}
757
758iparith.ob: iparith.inc iparith.cc
759        $(CXXP)  ${CXXFLAGSP} ${CXXTEMPLFLAGS} ${CPPFLAGS} ${DEFSB} -c iparith.cc -o iparith.ob
760
761mpsr_Tok.ob: iparith.inc mpsr_Tok.cc
762        $(CXXP) ${CXXFLAGSP} ${CXXTEMPLFLAGS} ${CPPFLAGS} ${DEFSB} -c mpsr_Tok.cc -o mpsr_Tok.ob
763
764#
765# for mtrack
766#
767p_Procs_%.sot: p_Procs_Lib_%.dl_ot
768        ${CXXP} ${CXXFLAGST} ${SFLAGS} ${SLDFLAGS} $< -o $@
769
770p_Procs_Lib_%.dl_ot : p_Procs_Lib.cc p_Procs_Dynamic.ot
771        ${CXXP} ${CXXFLAGS} ${CXXTEMPLFLAGS} ${CPPFLAGS} ${DEFS} ${SFLAGS} -Dp_Procs_$* -c $< -o $@
772
773%.dl_ot: %.cc
774        ${CXXP} ${CXXFLAGST} ${CXXTEMPLFLAGS} ${CPPFLAGS} ${DEFST} ${SFLAGS} -c $< -o $@
775
776mpsr.sot: $(MPSR_SOURCES:.cc=.dl_ot)
777        ${CXXP} ${CXXFLAGST} ${SFLAGS} ${SLDFLAGS} ${LDFLAGS} -o $@ $^ ${MP_LIBS}
778
779dbmsr.sot: $(DBMSR_SOURCES:.cc=.dl_ot)
780        ${CXX} ${CXXFLAGST} ${SFLAGS} ${SLDFLAGS} ${LDFLAGS} -o $@ $^ ${MP_LIBS}
781
782claptmpl.ot: claptmpl.cc mod2.h
783        $(CXXP)  ${CXXFLAGST} ${CPPFLAGS} ${DEFST} -c $< -o $@
784
785%.ot: %.cc
786        $(CXXP) ${CXXFLAGST} ${CXXTEMPLFLAGS} ${CPPFLAGS} ${DEFST} -c $< -o $@
787
788$(OBJT2) : %.ot: %.c
789        $(CCP)  ${CFLAGST} ${CPPFLAGS} ${DEFST} -c $< -o $@
790
791Singulart${S_EXT}: scanner.cc   $(OBJT) iparith.ot mpsr_Tok.ot claptmpl.ot tesths.cc version.h  mmalloc.ot $(DL_LIBST)
792        $(CXXP) ${CXXFLAGST} ${CPPFLAGS} ${DEFST} -o Singulart${S_EXT} \
793        tesths.cc iparith.ot mpsr_Tok.ot claptmpl.ot $(OBJT) ${LDFLAGST} ${LIBS} -lomalloc mmalloc.ot \
794        ${LD_DYN_FLAGS}
795
796iparith.ot: iparith.inc iparith.cc
797        $(CXXP)  ${CXXFLAGST} ${CXXTEMPLFLAGS} ${CPPFLAGS} ${DEFST} -c iparith.cc -o iparith.ot
798
799mpsr_Tok.ot: iparith.inc mpsr_Tok.cc
800        $(CXXP) ${CXXFLAGST} ${CXXTEMPLFLAGS} ${CPPFLAGS} ${DEFST} -c mpsr_Tok.cc -o mpsr_Tok.ot
801
802
803#
804# for Singulara
805#
806DEFSA = -DOM_CHECK=1 -DHAVE_ASSUME -DNDEBUG -D@SING_UNAME@ @DEFS@ -DDL_TAIL=$(DL_TAILA)
807CFLAGSA         = -g  -O -Wall -Wno-unused ${PIPE}
808CXXFLAGSA       = -g  -O -Wall -Wno-unused ${PIPE}
809
810p_Procs_%.soa: p_Procs_Lib_%.dl_oa
811        ${CXX} ${CXXFLAGSA} ${SFLAGS} ${SLDFLAGS} $< -o $@
812
813p_Procs_Lib_%.dl_oa : p_Procs_Lib.cc p_Procs_Dynamic.oa
814        ${CXX} ${CXXFLAGS} ${CXXTEMPLFLAGS} ${CPPFLAGS} ${DEFS} ${SFLAGS} -Dp_Procs_$* -c $< -o $@
815
816%.dl_oa: %.cc
817        ${CXX} ${CXXFLAGSA} ${CXXTEMPLFLAGS} ${CPPFLAGS} ${DEFSA} ${SFLAGS} -c $< -o $@
818
819mpsr.soa: $(MPSR_SOURCES:.cc=.dl_oa)
820        ${CXX} ${CXXFLAGSA} ${SFLAGS} ${SLDFLAGS} ${LDFLAGS} -o $@ $^ ${MP_LIBS}
821
822dbmsr.soa: $(DBMSR_SOURCES:.cc=.dl_oa)
823        ${CXX} ${CXXFLAGSA} ${SFLAGS} ${SLDFLAGS} ${LDFLAGS} -o $@ $^ ${MP_LIBS}
824
825
826claptmpl.oa: claptmpl.cc mod2.h
827        $(CXX)  ${CXXFLAGSA} ${CPPFLAGS} ${DEFSA} -c $< -o $@
828
829%.oa: %.cc
830        $(CXX) ${CXXFLAGSA} ${CXXTEMPLFLAGS} ${CPPFLAGS} ${DEFSA} -c $< -o $@
831
832$(OBJA2) : %.oa: %.c
833        $(CC)  ${CFLAGSA} ${CPPFLAGS} ${DEFSA} -c $< -o $@
834
835Singulara${S_EXT}: scanner.cc   $(OBJA) iparith.oa mpsr_Tok.oa claptmpl.oa tesths.cc version.h  mmalloc.oa $(DL_LIBSA)
836        $(CXX) ${CXXFLAGSA} ${CPPFLAGS} ${DEFSA} -o Singulara${S_EXT} \
837        tesths.cc iparith.oa mpsr_Tok.oa claptmpl.oa $(OBJA) ${LDFLAGS} ${LIBS} -lomalloc mmalloc.oa \
838        ${LD_DYN_FLAGS}
839
840iparith.oa: iparith.inc iparith.cc
841        $(CXX)  ${CXXFLAGSA} ${CXXTEMPLFLAGS} ${CPPFLAGS} ${DEFSA} -c iparith.cc -o iparith.oa
842
843mpsr_Tok.oa: iparith.inc mpsr_Tok.cc
844        $(CXX) ${CXXFLAGAT} ${CXXTEMPLFLAGSB} ${CPPFLAGS} ${DEFSA} -c mpsr_Tok.cc -o mpsr_Tok.oa
845
846#
847# for Macro expansion
848#
849CXXSOURCESD := $(CXXSOURCES:%.cc=%_d.cc) $(STATIC_SOURCES:%.cc=%_d.cc)
850CSOURCESD := $(CSOURCES:%.c=%_d.c)
851OBJD1 := $(CXXSOURCESD:.cc=.od)
852OBJD2 := $(CSOURCESD:.c=.od)
853
854%_d.c : %.c
855        $(CCG) $(CFLAGSG) ${CPPFLAGS} ${DEFS}-E -P $< | $(PERL) -p -e 's/;/;\n/g' | $(PERL) -p -e 's/\{/\n\{/g' | $(PERL) -p -e 's/\}/\n\}/g' > $@
856
857%_d.cc : %.cc
858        $(CCG) $(CXXFLAGS) ${CPPFLAGS} ${DEFS} -E -P $< | $(PERL) -p -e 's/;/;\n/g' | $(PERL) -p -e 's/\{/\n\{/g' | $(PERL) -p -e 's/\}/\n\}/g' > $@
859
860.PRECIOUS: %_d.cc %_d.c
861
862%.od : %.c
863        $(CCG)  ${CFLAGSG} ${CPPFLAGS} ${DEFSG} -c $< -o $@
864
865%.od : %.cc
866        $(CXXG) ${CXXFLAGSG} ${CXXTEMPLFLAGSG} ${CPPFLAGS} ${DEFSG} -c $< -o $@
867
868Singular_d: scanner.cc  $(OBJD)  mmalloc.od\
869           iparith.od mpsr_Tok.od claptmpl.og tesths.cc version.h
870        $(CXXG) ${CXXFLAGSG} ${CXXTEMPLFLAGSG} ${CPPFLAGS} ${DEFSG} -o Singularg_d \
871        tesths.cc iparith.od mpsr_Tok.od claptmpl.og $(OBJG) ${LDFLAGS} ${LIBS} -lomalloc mmalloc.od \
872        ${LD_DYN_FLAGS} ${LD_LIBC}
873
874##
875## check_aso
876##
877check_aso:
878        ${PERL} check_aso.pl $(SOURCES)
879##
880## dependencies
881##
882
883%.dd: %.cc mod2.h
884        echo $(@:.dd=.og) $(@:.dd=.op) $(@:.dd=_d.cc) $(@:.dd=.od) $(@:.dd=.ob) $(@:.dd=.ot) $(@:.dd=.oa) $(@:.dd=.dl_o) $(@:.dd=.dl_og) $(@:.dd=.dl_op) $(@:.dd=.dl_od) $(@:.dd=.dl_ob) $(@:.dd=.dl_ot) $(@:.dd=.dl_oa)" " \\ > $@
885        $(CXXM) -DGENTABLE ${CPPFLAGS} ${DEFSG} $< >> $@
886
887%.d: %.c mod2.h
888        echo $(@:.d=.og) $(@:.d=.od) $(@:.dd=_d.c) $(@:.d=.op) $(@:.d=.ob) $(@:.d=.ot) $(@:.d=.oa)" " \\ > $@
889        $(CCM) ${CPPFLAGS} ${DEFSG} $< >> $@
890
891depend:   $(CXXSOURCES:.cc=.dd) $(ESOURCES:.cc=.dd) $(CSOURCES:.c=.d) mod2.h claptmpl.dd
892        cat *.d *.dd >depend
893
894ifeq (depend,$(wildcard depend))
895include depend
896endif
897
898
Note: See TracBrowser for help on using the repository browser.