Skip to content

Commit aff647a

Browse files
committed
- Fixed perl install location
1 parent 8c34272 commit aff647a

File tree

7 files changed

+185
-3
lines changed

7 files changed

+185
-3
lines changed

legacy_notes/knobs.odt

16.8 KB
Binary file not shown.

legacy_notes/knobs.pdf

109 KB
Binary file not shown.

src/Makefile

+3-3
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ clean:
88
$(MAKE) -C tcl clean
99
$(MAKE) -C python clean
1010
$(MAKE) -C verilog clean
11-
#$(MAKE) -C perl clean
11+
$(MAKE) -C perl clean
1212

1313
build:
1414
@echo ARCH=$(ARCH)
@@ -17,14 +17,14 @@ build:
1717
$(MAKE) -C tcl
1818
$(MAKE) -C python
1919
$(MAKE) -C verilog
20-
#$(MAKE) -C perl
20+
$(MAKE) -C perl
2121

2222
installarch:
2323
$(MAKE) -C c install
2424
$(MAKE) -C tcl install
2525
$(MAKE) -C python install CFLAGS=
2626
$(MAKE) -C verilog install
27-
#$(MAKE) -C perl install
27+
$(MAKE) -C perl install
2828

2929
install:
3030
$(MAKE) CFLAGS="-I../c -m64 -fPIC" ARCH=x86_64 INSTALL_LIB=lib64 clean build installarch

src/perl/Makefile

+22
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
INSTALL_LIB=lib64
2+
3+
build: sknobs.pm sknobs_wrap.c sknobs.mk
4+
make -f sknobs.mk
5+
6+
test:
7+
make -f sknobs.mk test
8+
9+
install:
10+
make -f sknobs.mk install
11+
12+
sknobs.pm sknobs_wrap.c: sknobs.i
13+
swig -perl5 sknobs.i
14+
15+
sknobs.mk: Makefile.PL
16+
perl Makefile.PL INSTALLSITEARCH=${PREFIX}/${ARCH}/${INSTALL_LIB}/perl
17+
18+
clean:
19+
if [ -f sknobs.mk ]; then make -f sknobs.mk clean; fi
20+
if [ -f sknobs.pm ]; then rm sknobs.pm; fi
21+
if [ -f sknobs_wrap.c ]; then rm sknobs_wrap.c; fi
22+
if [ -f sknobs.mk.old ]; then rm sknobs.mk.old; fi

src/perl/Makefile.PL

+9
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
use ExtUtils::MakeMaker;
2+
WriteMakefile(
3+
NAME => 'sknobs',
4+
MAKEFILE => 'sknobs.mk',
5+
INC => '-I../c',
6+
LIBS => ['-lm'],
7+
OBJECT => '../c/sknobs.o sknobs_wrap.o',
8+
test => {TESTS => 't/sknobs.t'},
9+
);

src/perl/sknobs.i

+141
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,141 @@
1+
%module sknobs
2+
3+
#include "Extern.h"
4+
#include "perl.h"
5+
#include "XSUB.h"
6+
7+
// This tells SWIG to treat char ** as a special case
8+
%typemap(perl5,in) char ** {
9+
AV *tempav;
10+
I32 len;
11+
int i;
12+
SV **tv;
13+
if (!SvROK($input))
14+
croak("$input is not a reference.");
15+
if (SvTYPE(SvRV($input)) != SVt_PVAV)
16+
croak("$input is not an array.");
17+
tempav = (AV*)SvRV($input);
18+
len = av_len(tempav);
19+
$1 = (char **) malloc((len+2)*sizeof(char *));
20+
for (i = 0; i <= len; i++) {
21+
tv = av_fetch(tempav, i, 0);
22+
$1[i] = (char *) SvPV(*tv,PL_na);
23+
}
24+
$1[i] = 0;
25+
};
26+
27+
// This cleans up our char ** array after the function call
28+
%typemap(perl5,freearg) char ** {
29+
free($1);
30+
}
31+
32+
%rename("close") close_();
33+
34+
%inline %{
35+
36+
#include "sknobs.h"
37+
38+
static int init(char **argv) {
39+
int argc = 0, i, cargc=0;
40+
char **cargv;
41+
while (argv[argc])
42+
++argc;
43+
cargv = (char**)malloc((argc+1) * sizeof(char *));
44+
cargv[cargc++] = "sknobs";
45+
for (i=0; i<argc; ++i)
46+
cargv[cargc++] = argv[i];
47+
int result = sknobs_init(cargc, cargv);
48+
free(cargv);
49+
return result;
50+
}
51+
52+
static void close_() {
53+
sknobs_close();
54+
}
55+
56+
static int add(char *pattern, char *value, char *comment) {
57+
return sknobs_add(pattern, value, comment);
58+
}
59+
60+
static int load(char **argv, char *comment) {
61+
int argc = 0, i, cargc=0;
62+
char **cargv;
63+
while (argv[argc]) ++argc;
64+
cargv = (char**)malloc((argc+1) * sizeof(char *));
65+
cargv[cargc++] = "sknobs";
66+
for (i=0; i<argc; ++i)
67+
cargv[cargc++] = argv[i];
68+
int result = sknobs_load(cargc, cargv, comment);
69+
free(cargv);
70+
return result;
71+
}
72+
73+
static int load_string(char *name, char *buffer, char *comment) {
74+
return sknobs_load_string(name, buffer, comment);
75+
}
76+
77+
static int load_file(char *filename) {
78+
return sknobs_load_file(filename);
79+
}
80+
81+
static int load_file_if_exists(char *filename) {
82+
return sknobs_load_file_if_exists(filename);
83+
}
84+
85+
static int exists(char *name) {
86+
return sknobs_exists(name);
87+
}
88+
89+
static void* iterate(char *name) {
90+
return sknobs_iterate(name);
91+
}
92+
93+
static int iterator_next(void* iterator) {
94+
return sknobs_iterator_next(iterator);
95+
}
96+
97+
static char *iterator_get_string(void* iterator) {
98+
return sknobs_iterator_get_string(iterator);
99+
}
100+
101+
static char *get_string(char *name, char *defaultValue) {
102+
return sknobs_get_string(name, defaultValue);
103+
}
104+
105+
static char *find_file(char *filename) {
106+
return sknobs_find_file(filename);
107+
}
108+
109+
static char *get_filename(char *name, char *defaultValue) {
110+
return sknobs_get_filename(name, defaultValue);
111+
}
112+
113+
static long get_value(char *name, long defaultValue) {
114+
return sknobs_get_value(name, defaultValue);
115+
}
116+
117+
static long get_dynamic_value(char *name, long defaultValue) {
118+
return sknobs_get_dynamic_value(name, defaultValue);
119+
}
120+
121+
static void set_string(char *name, char *value) {
122+
sknobs_set_string(name, value);
123+
}
124+
125+
static void set_value(char *name, long value) {
126+
sknobs_set_value(name, value);
127+
}
128+
129+
static void set_seed(long value) {
130+
sknobs_set_seed(value);
131+
}
132+
133+
static void dump() {
134+
sknobs_dump();
135+
}
136+
137+
static void save(char *filename) {
138+
sknobs_save(filename);
139+
}
140+
141+
%}

src/perl/t/sknobs.t

+10
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
use Test;
2+
use sknobs;
3+
4+
plan tests => 4;
5+
6+
ok(sknobs::init(\@ARGV), 0);
7+
ok(sknobs::get_value("argument", 0), 0);
8+
ok(sknobs::get_string("argument", "unspecified"), "unspecified");
9+
sknobs::set_value("argument", 999);
10+
ok(sknobs::get_dynamic_value("argument", 0), 999);

0 commit comments

Comments
 (0)