Cleanup after lib detection.
[dbm-dynpmcs:dbm-dynpmcs.git] / setup.pir
1 #!/usr/bin/env parrot
2
3 =head1 NAME
4
5 setup.pir - Python distutils style
6
7 =head1 DESCRIPTION
8
9 No Configure step, no Makefile generated.
10
11 =head1 USAGE
12
13     $ parrot setup.pir build
14     $ parrot setup.pir test
15     $ sudo parrot setup.pir install
16
17 =cut
18
19 .sub 'main' :main
20     .param pmc args
21     $S0 = shift args
22     load_bytecode 'distutils.pbc'
23
24     .const 'Sub' libdetect = 'libdetect'
25     register_step_before('build', libdetect)
26
27     $P0 = new 'Hash'
28     $P0['name'] = 'dbm-dynpmcs'
29     $P0['abstract'] = 'dynpmc interface to dbm-like databases.'
30     $P0['description'] = 'dynpmc to encapsulate and abstract the myriad of dbm-like databases under a sigle interface.'
31     $P1 = split ' ', 'gdbm qdbm ndbm sdbm dbm bdb parrot dynpmcs'
32     $P0['keywords'] = $P1
33     $P0['license_type'] = 'Artistic License 2.0'
34     $P0['license_uri'] = 'http://www.perlfoundation.org/artistic_license_2_0'
35     $P0['copyright_holder'] = 'Parrot Foundation'
36     $P0['authority'] = 'http://gitorious.org/dbm-dynpmcs'
37     $P0['checkout_uri'] = 'git://gitorious.org/dbm-dynpmcs/dbm-dynpmcs.git'
38     $P0['browser_uri'] = 'http://gitorious.org/dbm-dynpmcs'
39     $P0['project_uri'] = 'http://gitorious.org/dbm-dynpmcs'
40
41     # build
42     $P2 = new 'Hash'
43     $P2['gdbmhash'] = 'src/pmc/gdbmhash.pmc'
44     $P0['dynpmc'] = $P2
45     $S0 = get_ldflags()
46     $P0['dynpmc_ldflags'] = $S0
47
48     #test
49     $S0 = get_parrot()
50     $P0['prove_exec'] = $S0
51
52     .tailcall setup(args :flat, $P0 :flat :named)
53 .end
54
55 .sub 'get_ldflags' :anon
56     .local pmc config
57     config = get_config()
58     $S0 = '-lgdbm'
59     $S1 = config['osname']
60     unless $S1 == 'MSWin32' goto L1
61     $S0 = '-llibgdbm'
62     $S2 = config['cc']
63     if $S2 == 'gcc' goto L1
64     $S0 = 'gdbm.lib'
65   L1:
66     .return ($S0)
67 .end
68
69 .sub 'libdetect' :anon
70     .param pmc kv :slurpy :named
71
72     $S0 = get_ldflags()
73     $S0 = cc_run(<<'SOURCE_C', $S0 :named('ldflags'), 0 :named('verbose'))
74 #include <stdio.h>
75 #include <stdlib.h>
76 #include <gdbm.h>
77
78 int
79 main(int argc, char *argv[])
80 {
81     GDBM_FILE dbf;
82     datum key, val_in, val_out;
83
84     dbf = gdbm_open("gdbm_test_db", 0, GDBM_NEWDB, 0666, 0);
85     if (!dbf) {
86         fprintf(stderr, "File %s could not be created.\n", argv[1]);
87         exit(2);
88     }
89
90     key.dptr  = "Is gdbm funktional?";
91     key.dsize = 19;
92     val_in.dptr  = "gdbm is working.";
93     val_in.dsize = 17;
94
95     gdbm_store(dbf, key, val_in, GDBM_INSERT);
96
97     val_out = gdbm_fetch(dbf, key);
98
99     if (val_out.dsize > 0) {
100         printf("%s\n", val_out.dptr);
101         free(val_out.dptr);
102     }
103     else {
104         printf("Key not found.\n");
105     }
106     gdbm_close(dbf);
107
108     return EXIT_SUCCESS;
109 }
110 SOURCE_C
111
112     unlink('gdbm_test_db')
113     $I0 = index $S0, "gdbm is working."
114     if $I0 == 0 goto L1
115     die $S0
116   L1:
117 .end
118
119 # Local Variables:
120 #   mode: pir
121 #   fill-column: 100
122 # End:
123 # vim: expandtab shiftwidth=4 ft=pir:
124