forked from root-project/root
-
Notifications
You must be signed in to change notification settings - Fork 0
/
makecint.1
758 lines (727 loc) · 24.8 KB
/
makecint.1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
.\" Hey, EMACS: -*- nroff -*-
.\" First parameter, NAME, should be all caps
.\" Second parameter, 1, should be 1-8, maybe w/ subsection
.\" other parameters are allowed: see man(7), man(1)
.TH MAKECINT 1 "February 3, 2001"
.\" Please adjust this date whenever revising the manpage.
.\"
.\" Some roff macros, for reference:
.\" .nh disable hyphenation
.\" .hy enable hyphenation
.\" .ad l left justify
.\" .ad b justify to both left and right margins
.\" .nf disable filling
.\" .fi enable filling
.\" .br insert line break
.\" .sp <n> insert n+1 empty lines
.\" for manpage-specific macros, see man(7)
.SH NAME
makecint \- C/C++ interpreter-compiler
.SH SYNOPSIS
.B makecint
[ -mk MAKEFILE ] [ -o OBJECT ] [ -H C++HEADER ] [ -C++ C++SOURCE]
[ -m ] [ -p ] [ -dl DLL ] [ -h CHEADER ] [ -C CSOURCE]
[ -l LIB ] [ -i STUBC] [ -i++ STUBC++ ]
.SH DESCRIPTION
.B makecint
is an utility to link compiled C/C++ objects with the Cint C/C++
interpreter. Functions, global variables and classes defined in a
C/C++ pre-compiled library can be seamlessly accessed from the
interpreter. As you call yacc/lex a compiler-compiler, we call
makecint an interpreter-compiler. A pre-compiled library can be
dynamically loaded as Dynamic Link Library (DLL). See also cint (1).
.br
(This sounds smooth, however, I recommend to start from very simple
example. Linking non-trivial libraries will be tricky. Contact
MXJ02154@niftyserve.or.jp if you need help.)
.br
.SH OUTLINE OF MAKING A PRECOMPILED LIBRARY
Generic outline of making a precompiled library will be
described in this section.
.br
.B Files
.br
You need to prepare header files [xxx.h] which includes
interface of the encapsulated C/C++ library. You also need
either source files [xxx.C] [xxx.c], object files [xxx.o],
library files [xxx].a or combination of those.
.br
.B Procedure
.br
1) Create a Makefile
.br
First of all, you need to create a Makefile by using
makecint. Makecint will automate a process of generating
Makefile. In following example, makecint will create a
Makefile which compiles "mycint" executable. The "mycint"
embeds xxx.C and yyy.o as precompiled library.
.nf
$ makecint -mk Makefile -o mycint -H xxx.h yyy.h -C++ xxx.C yyy.o
.fi
Command line options will be explained later in this document.
.br
2) Modify Makefile (if needed)
.br
Please check the created Makefile and modify it if needed.
If your library is simple, modification may not be needed.
However, when linking non-trivial libraries, you may need
to carefully examine and modify Makefile by hand.
.br
3) Do make
.br
Do make. "mycint" will be compiled and linked. "mycint" is
a customized C/C++ interpreter which pre-includes
interface to xxx.h and yyy.h.
.nf
$ make
.fi
Inside the make, Cint is invoked for making dictionary
source code G__cpp_[XXX].C and/or G__c_[XXX].c. These source
files include interface methods for enabling seamless
access between the interpreter and a compiled code.
.br
.B Examples
.br
/usr/share/doc/cint/demo/makecint directory contains examples.
Refer to /usr/share/doc/cint/demo/makecint/README.txt for
details.
.SH WHAT CAN BE DONE WITH THE PRECOMPILED LIBRARY
.B Non static global variable and function
.br
Non static global variables and functions can be accessed from the
interpreter.
.br
.B Class members
.br
Public member of classes and structs can be accessed from the
interpreter. You can not access private and protected members from the
interpreter. Size of class/struct objects and data-member/base-class
offsets match to the compiled code. (If you use a special technique,
you can access protected member from the interpreter. SEE '#pragma
link C++ class+protected')
.br
.B Template
.br
Instantiated template class and template function can be
accessed from the interpreter. Template itself can not
be precompiled.
.br
.B typedef
.br
Typedef information is precompiled and can be used from
the interpreter.
.br
.B Inheritance, Class object as member
.br
Inheritance and class object members are handled properly when they
are precompiled. Precompiled class can be a super-class of an
interpreted class. Also, object of precompiled class can be a member
of an interpreted class. Virtual function defined in precompiled
class is only virtual within the precompiled object because compiler
and interpreter has different virtual function resolution
mechanism. There will be a possible enhancement in the future.
.br
.B Default constructor, copy constructor , destructor
.br
If one of default constructor, copy constructor or destructor is
declared private (or protected), the class can not be accessed from
the interpreter.
.SH OPTIONS
Space between option specifier and option argument is significant.
You must put space between them. For example, '-o object' is valid
but '-oobject' is not. Exceptions are -D and -I options which accepts
arguments like '-DMACRO1' and '-I/home/mydir/include'.
.TP
.B \-o OBJ
specify object name (customized C/C++ interpreter).
.br
-o option specifies object name which becomes a customized C/C++
interpreter. -o option can not be omitted, otherwise -dl option
must be given. -o and -dl options are exclusive. Only one of them
must be given. For example,
.nf
$ makecint -mk Makefile -o mycint -H prog.h -C++ prog.C
$ make
.fi
Will make customized cint "mycint" including prog.C user specific
library.
.TP
.B \-dl DYNLIB
Generate dynamic link library object.
.br
This option generates dynamic link library(DLL) which can be
dynamically linked with cint at run time. For example,
.nf
$ makecint -mk Makefile -dl func.dl -H func1.h func2.h -C++ func1.C func2.C
$ make
.fi
This will generate a DLL 'func.dl' which includes Position Independent
Code of func1.C, func2.C. -dl option compiles user specific Suffix of
the dynamic link library can be either '.dl', '.sl', or '.DLL'. You
can link func.dl by passing it to cint. Multiple DLL can be linked at
a time if there is no cyclic symbol dependency.
.nf
$ cint func.dl othersource.c
$ cint func1.dl func2.dl othersource.c
.fi
You can link the DLL by '#include' or '#pragma include' statement in
the source code. '#include' and '#pragma include' behaves exactly the
same except that when you try to compile the source code by a
compiler '#include' will cause an error.
.br
For example,
.nf
// Interpreted source file
#include "func1.dl"
#pragma include "func1.dl"
main() {
.
}
.fi
Operation of the dynamic link library function/global/stub are
identical to that of archived version. Option '-o' and '-m' can not
be used with '-dl'. Installation and all makecint activity must be
done under same OS and compiler environment.
.TP
.B \-mk MKFILE
Create interface routine and makefile, no compilation.
.br
The '-mk MKFILE' option will specify name of created makefile. For
example
.nf
$ makecint -mk make.prog1 -o prog1 -H prog1.h -C++ prog1.C
$ make -f make.prog1
$ prog1
.fi
.TP
.B \-p
Use preprocessor before parsing parameter information files (OLD)
.br
If '-p' option is added, parameter information files are preprocessed
by real preprocessor. Cint does not parse define macro perfectly. It
is recommended to use -p option when you link non-trivial library with
heavy define macro usage. Name of C/C++ preprocessor must be set in
the $CINTSYSDIR/MAKEINFO file.
.nf
$ makecint -mk Makeit -p -o mycint -H prog.h -C++ prog.C
$ make -f Makeit
.fi
This option is being obsoleted. Use +P,-P instead.
.TP
.B \-m
Needed if main() is included in the source file.
.br
If main() function is included in the precompiled object, '-m' option
must be given. This option avoids linking Cint main function. You
need to call G__init_cint() and G__calc() to start C/C++ interpreter
from your host program. (See example below) Header file
$CINTSYSDIR/G__ci.h has to be included.
.nf
/* Example host program host.c
* $ makecint -mk Makefile -o host -m -I$CINTSYSDIR -h host.h -C host.c
* $ make
*/
#include <G__ci.h>
#include "host.h" /* host.h can be an empty file */
main() {
int state;
char command[100], macrofile[100], *p;
state=G__init_cint("cint");
while(0==state) {
strcpy(macrofile,G__input("Input macro file >"));
if(strcmp(macrofile,"exit")==0) break;
if(0==G__loadfile(macrofile)) {
strcpy(command,macrofile);
p = strchr(command,'.');
if(p) {
strcpy(p,"()");
G__calc(command);
}
G__unloadfile(macrofile);
}
}
G__scratch_all();
}
.fi
.BR
.nf
int G__init_cint(char* command)
.fi
This function will initialize Cint. main() is automatically executed
if it exists and returns 1. If main() is not found it returns 0. It
returns -1 if initialization fails.
.nf
int state;
state=G__init_cint("cint source.c");
// 0==state : initialized but no main()
// 1==state : initialized and main() called
// -1==state: initialization failed
.fi
After the initialization you can use following functions.
.nf
G__value G__calc(char* expression)
.fi
This function evaluates C/C++ expression as string. Returned value is
in the form of generic object G__value. G__value can be translated to
long or double value by 'int G__int(G__value val)' or 'double
G__double(G__value val)' functions. For example,
.nf
// double f(int a) and void g(void) in source.c
double d;
G__init_cint("cint source.c");
G__calc("g()");
d=G__double(G__calc("f(1234)"));
G__scratch_all();
.fi
.nf
long G__int(G__value buf)
.fi
This function converts G__value object to a long int value.
.nf
double G__double(G__value buf)
.fi
This function converts G__value object to a double precision float value.
.nf
int G__loadfile(char* filename)
.fi
This function loads C/C++ source code or Dynamic Link Library(DLL). If
suffix of the filename is .dl, .sl, .so, .dll or .DLL, the file is
linked as DLL. Otherwise, C/C++ source file. It returns 0 if the file
is successfully loaded, 1 if the file is already loaded and -1 if the
file can not be loaded. In case of fatal error, it returns -2.
.nf
G__init_cint("cint");
G__loadfile("src1.C");
G__loadfile("myLib.dl");
G__loadfile("src2.c");
G__calc("f()");
.fi
.nf
int G__unloadfile(char* filename)
.fi
This function unloads C/C++ source code or Dynamic Link
Library(DLL). In order to keep consistency, all the files loaded after
the specified file will be unloaded. It returns 0 if files are
successfully unloaded, -1 if not. It first checks if any of the
function defined in the unloading files are busy.
.nf
G__init_cint("cint src0.c");
G__loadfile("src1.C");
G__loadfile("myLib.dl");
G__loadfile("src2.c");
G__loadfile("src3.C");
....
G__unloadfile("src2.c"); // unload src2.c and src3.C
....
G__loadfile("src4.C");
....
G__unloadfile("src4.C"); // unload src4.C
....
G__unloadfile("src0.c"); // unload all files
.fi
.nf
int G__pause(void)
.fi
This function starts debugger interface. It returns 0 except
\& 'i'(ignore) or 'q'(quit) command is used. You can start interactive
interface as follows.
.nf
G__init_cint("cint source.c");
while(G__pause()==0); // pause until 'i' command
G__scratch_all();
.fi
.nf
char* G__input(char* prompt)
.fi
This function is a command line input frontend function. Although
this is not an essential function to the C/C++ interpreter, this is
often convenient because readline history and command line editing
capability is built-in using GNU readline library. This function
returns a pointer to a static string buffer.
.nf
char *buf[100];
G__init_cint("cint");
strcpy(buf,G__input("Input your command >");
G__calc(buf);
.fi
.nf
void G__scratch_all(void)
.fi
This function terminates interpreter. All the files are unloaded and
environment is reset.
.TP
.B \-D MACRO
Define macro
.br
This option defines macro for global variable parameter information
file. Global variable parameter informa- tion file will be
conditionally parsed with '#ifdef MACRO' statement. You can not put
multiple macro names after '-D'. '-D' must be given before every
individual macro name. Space between -D and macro name is not
significant. You can either go '-DMACRO' or '-D MACRO'.
.nf
$ makecint -mk Makeit -DONLINE -o mycint -H source.h -C++ source.C
$ make -f Makeit
.fi
.TP
.B \-I INCLDPATH
Include file search path
.br
You can not put multiple path after '-I'. '-I' must be given before
every individual include path. Space between -I and pathname is not
significant. You can either go '-Ipath' or '-I path'.
.nf
$ makecint -mk Makeit -I/users/include -I/include -H src.h -C++ src.C
$ make -f Makeit
.fi
.TP
.B \-H SUTPI.h
C++ header as parameter information file.
.br
With the '-H' option, SUTPI.h file is used as parameter information
file for the encapsulated C++ object. Cint will analyze the header
file and create interface method in G__cpp_[XXX].C. Multiple header
files can be given after single '-H' option. Class, struct, union,
enum, public member functions and data members, non-static global
function and variables, typedefs and macros in precompiled library can
be used from interpreter.
.nf
$ makecint -mk Mkit -o mycint -H src1.h src2.h -C++ src1.C src2.C
$ make -f Mkit
.fi
SUTPI.h file must be compliant to cint syntax limi tations described
in /usr/share/doc/cint/limitati.txt. If SUTPI.h uses C++ language
constructs which is not supported by cint, that part must be excluded
by "#ifndef __MAKECINT__" or "#ifndef __CINT__". The macro __CINT__ is
defined both for cint and makecint and __MAKECINT__ is defined only
for makecint.
.nf
class A {
// supported feature
#ifndef __MAKECINT__
// unsupported feature
#endif
};
.fi
.TP
.B \-h SUTPI.h
C header as parameter information file.
.br
With '-h' option, SUTPU.h file is used as parameter information file
for the encapsulated C object. Cint will analyze the file and create
interface method in G__c_[XXX].c. Multiple header files can be given
after one '-h'. Header file must be written in ANSI-C format. K&R
style header is not accepted. struct,union,enum, non-static global
function and variables, typedefs and macros in precompiled library can
be used from interpreter.
.nf
$ makecint -mk Makeit -A -o mycint -h csrc1.h csrc2.h -C csrc1.c csrc2.c
$ make -f Makeit
.fi
SUTPI.h file must be compliant to cint syntax limitations described
/usr/share/doc/cint/limitati.txt. If SUTPI.h uses C++ language
constructs which is not supported by cint, that part must be excluded
by "#ifndef __MAKECINT__" or "#ifndef __CINT__". The macro __CINT__ is
defined both for cint and makecint and __MAKECINT__ is defined only
for makecint.
.TP
.B \+P, \-P
Turn preprocessor mode for following header files on/off
.br
The +P and -P are suboptions of -h , -H option which turns on/off
preprocessor option on file by file basis. Files after +P will be
preprocessed and files after -P won't be preprocessed. You can
selectively use preprocessor in following manner. In this example,
only C.h and D.h , which are enclosed by +P/-P , will be preprocessed
by real C/C++ preprocessor. You must not use -p option when you use
+P/-P option. +P option must always come before -P , however, -P can
be omitted if all files after +P are preprocessed. The name of the
C/C++ preprocessor must be set in the $CINTSYSDIR/MAKEINFO file.
.nf
$ makecint -mk Makeit -o mycint -H A.h B.h +P C.h D.h -P E.h F.h -C++ all.C
$ make -f Makeit
.fi
.TP
.B \+V, \-V
Turn class title loading for following header files on/off
.br
The +V and -V are suboptions for -h , -H option which turns on/off
loading class title by file basis. Class title will be loaded for the
files after +V. Class title won't be loaded for the files after -V.
.nf
$ makecint -mk Makeit -o mycint -H A.h B.h +V C.h D.h -V E.h F.h -C++ all.C
$ make -f Makeit
.fi
Class title has to be described in class/struct defi- nition in header
file as follows. Basically, '//' style comment right after each
member declaration will be loaded as class member comment.
.nf
class ABC {
int a; // title of the member variable
double b; // title of the member variable
int c(); // title of the member function
ClassDef(ABC) // title of the class
} ;
.fi
.TP
.B \-C++ SUT.C
Link C++ source code or object. Not accessed unless -H SUT.h is given.
.br
With the '-C++' option, [sut].C file is used as body of C++ compiled
object.
.br
If appropriate header file is given by '-H' option, those compiled
object can be accessed from the interpreter. At least one header file
must be given by -H option when using -C++ option. Otherwise,
makecint fails. Multiple source files can be given after one
\& '-C++'. Suffix of the C++ source files must be properly set in
the $CINTSYSDIR/MAKEINFO file.
.TP
.B \-C SUT.c
Link C source code or object. Not accessed unless -h SUT.h is given.
.br
With the '-C' option, SUT.c file is used as body of C compiled object.
If the appropriate header file is given by '-h' option, those compiled
objects can be accessed from the interpreter. At least one header file
must be given by -h option when using -C option. Multiple source
files can be given after one '-C'. Suffix of the C source files must
be properly set in the $CINTSYSDIR/MAKEINFO file.
.TP
.B \-i++ STUB.h
C++ STUB function parameter information file.
.br
-i++ option does opposite of -H option. While -H option enables
access of precompiled object from interpreter, -i++ option enables
access of interpreted functions from compiled code.
.nf
#### Example is in /usr/share/doc/cint/demo/makecint/Stub directory
$ makecint -mk Makefile -o mycint -H Src.h -i++ Stub.h -C++ Src.C
$ make -f Makefile
$ mycint Stub.C
.fi
STUB.h file must be compliant to cint syntax limitations described in
/usr/share/doc/cint/limitatitxt. Only non-static global functions can
be specified in STUB.h file. Behavior of class, struct, union, enum
and non-static global variable defined in STUB.h is undefined.
.TP
.B \-i STUB.h
C STUB function parameter information file.
.br
The -i option does the opposite of the -h option. While -h enables
access of precompiled object from interpreter, -i enables access of
interpreted functions from compiled code.
.nf
$ makecint -mk Makefile -o mycint -h Src.h -i Stub.h -C Src.c
$ make -f Makefile
$ mycint Stub.c
.fi
STUB.h file must be compliant to cint syntax limitations described in
man page file /usr/share/doc/cint/limitati.txt. Only non-static global
functions can be specified in STUB.h file. Behavior of struct, union,
enum and non-static global variable defined in STUB.h is undefined.
.TP
.B \-c SUT.c
Same as '-h [sut].c -C [sut].c'
.TP
.B \-l \-lLIB
Compiled object, Library or linker options
.TP
.B \-u UNDEFFILE
Handle undefined typename as class name.
.br
Fighting againt undefined typename is a tidious work, especially when
you do not need public access to those. -u option ignores such
symbols and generates dummy code to eliminate this kind of problem. It
handles unknown typename as a class name which is not exposed. -u
option takes output file name as an argument. All of the undefined
typenames will be written out.
.nf
$ makecint -mk Makeit -u undef.h -H src.h -C++ src.C
$ make -mk Makeit
.fi
This option is not perfect. If you find problem, you need to fix it
manually.
.TP
.B \-U DIR
Directory to disable interface method generation.
.br
If you give this option, cint/makecint will disable dictionary
generation for header files exist under given directory. For
example,
.nf
$ makecint -mk makefile -dl src.dll -I/x/inc -U/x/inc -H src.h
$ make -f makefile
$ cint src.dll
.fi
Suppose you have /x/inc/mylib.h and it is included from src.h, things
defined in /x/inc/mylib.h can not be accessed from the interpreter.
.TP
.B \-Y [0|1]
Ignore std namespace (default=1:ignore)
.TP
.B \-Z [0|1]
Automatic loading of standard header files
.br
If you give this option, cint/makecint will automatically load
standard header files used in header file given by -h/-H
option. Default is off(0). -Z1 must be given to makecint when making
dictinoary. For example,
.nf
// src.h
#include <string> // this will trigger implicit loading
class myclass { .. };
$ makecint -mk makefile -dl src.dll -Z1 -H src.h
$ make -f makefile
$ cint src.dll
cint> .file
0: myheader.dll // explicitly loaded
1: string // loaded implicitly by shared library
2: string.dll // "
3: bool.h // "
.fi
.TP
.B \-cc OPT
Compiler option
.TP
.B \-cint OPT
Cint option
.br
This option specifies command line option directly gieven to
cint. Multiple cint options can be given after -cint. There are a few
important cint options which I will describe below.
.TP
.B \-cint -M NEWDELMASK
Mask operator new/delete generation
.br
Caution: When making cint dictionary or interface method source code,
it usually overloads global new and delete operators. If you have
yourown new/delete operator, you may want to elimitate new and delete
from the dictionary source code. -M option turns off automatic
creation of operator new/delete in the dictionary source code. Mask
flag is given as hex number described below.
.nf
#define G__IS_OPERATOR_NEW 0x01
.fi
Global operator new is found in user header file. Cint automatically
stops generating operator new function in the dictionary.
.nf
#define G__IS_OPERATOR_DELETE 0x02
.fi
Global operator delete is found in user header file. Cint
automatically stops generating operator delete function in the
dictionary.
.nf
#define G__MASK_OPERATOR_NEW 0x04
.fi
Cint does not generate operator new function in the dictionary because
it is explicitly masked by -M0x4 command line option.
.nf
#define G__MASK_OPERATOR_DELETE 0x08
.fi
Cint does not generate operator new function in the dictionary because
it is explicitly masked by -M0x8 command line option.
.nf
#define G__NOT_USING_2ARG_NEW 0x10
.fi
Cint uses operator new function with 1 argument in dictionary source
code.
.br
From cint5.14.60, a new scheme is introduced. This scmeme is still
experimmental. In the new method, following flags dominates
others. This scheme is intended to fix problems associated with global
operator new/delete.
Before 5.14.59, -M0x1c or -M0x10 was needed for HP-UX aCC, Solaris
CC5 and few other compilers. From 5.14.60, this option is not
needed for those platforms any more.
.nf
#define G__DUMMYARG_NEWDELETE 0x100
.fi
If this flag is set, a new operator new/delete scheme is turned
on. With this scheme, cint dictionary generates following functions.
.nf
void* operator new(size_t size,[DLLID]_tag* p);
void operator delete(void *p,[DLLID]_tag* x);
static void G__operator_delete(void *p);
.fi
.nf
#define G__DUMMYARG_NEWDELETE_STATIC 0x200
.fi
This flag makes operator new a static function. So,
following functions will be generated.
.nf
static void* operator new(size_t size,[DLLID]_tag* p);
static void operator delete(void *p,[DLLID]_tag* x);
static void G__operator_delete(void *p);
.fi
Default value is -M0x100 for pure CINT and -M0x1c for ROOTCINT.
.nf
$ makecint -mk Makeit -H src.h -C++ src.C -cint -M0x1c
$ make -mk Makeit
.fi
If you have one argument operator new in your source code, your
operator new should look like below.
.nf
#define G__PVOID (-1)
extern "C" long G__getgvp();
void* operator new(size_t size) {
if(G__PVOID!=G__getgvp()) return((void*)G__getgvp());
// Yourown things...
}
.fi
If you have two argument operator new in your source code, your
operator new should look like below.
.nf
#define G__PVOID (-1)
extern "C" long G__getgvp();
void* operator new(size_t size,void* p) {
if((long)p==G__getgvp() && G__PVOID!=G__getgvp()) return(p);
// Yourown things...
}
.fi
If you have operator delete in your source code, your operator
delete should look like below.
.nf
#define G__PVOID (-1)
extern "C" long G__getgvp();
void operator delete(void *p) {
if((long)p==G__getgvp() && G__PVOID!=G__getgvp()) return;
// Yourown things...
}
.fi
.TP
.B -cint -Z [0|1]
Automatic loading of standard header files
.br
If you give this option, cint/makecint will automatically load
standard header files used in header file given by -h/-H
option. Default is off(0). -Z1 must be given to makecint when making
dictinoary. For example,
.nf
// src.h
#include <string> // this will trigger implicit loading
class myclass { .. };
$ makecint -mk makefile -dl src.dll -H src.h -cint -Z1
$ make -f makefile
$ cint src.dll
cint> .file
0: myheader.dll // explicitly loaded
1: string // loaded implicitly by shared library
2: string.dll // "
3: bool.h // "
.fi
.TP
.B -B FUNCNAME
Initialization function name
.PP
.SH SEE ALSO
.BR cint (1),
.br
The programs are documented fully in various files under
/usr/share/doc/cint/.
.SH AUTHOR
Masaharu Goto <MXJ02154@niftyserve.or.jp>
.br
Copyright \(co 1995-2000 Masaharu Goto
.br
This manual page was compiled from information in the Cint source
package for the Debian GNU/Linux system (but may be used by others).