Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
M
mruby
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Libraries
mruby
Commits
b4c4fce0
Commit
b4c4fce0
authored
Sep 23, 2012
by
Daniel Bovensiepen
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Modify generator for using printf
parent
62b652c2
Changes
1
Show whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
88 additions
and
84 deletions
+88
-84
mrbgems/generator.c
mrbgems/generator.c
+88
-84
No files found.
mrbgems/generator.c
View file @
b4c4fce0
...
@@ -5,6 +5,7 @@
...
@@ -5,6 +5,7 @@
#include <sys/types.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <sys/stat.h>
#include <mrbconf.h>
#include <mrbconf.h>
#include <stdlib.h>
static
int
static
int
one
(
const
struct
dirent
*
unused
)
one
(
const
struct
dirent
*
unused
)
...
@@ -45,8 +46,8 @@ directory_exists(char path[4096]) {
...
@@ -45,8 +46,8 @@ directory_exists(char path[4096]) {
* FALSE => template for all GEMs
* FALSE => template for all GEMs
*
*
*/
*/
static
char
static
char
*
*
for_each_gem
(
char
before
[
1024
],
char
after
[
1024
],
for_each_gem
(
char
before
[
1024
],
char
after
[
1024
],
char
start
[
1024
],
char
end
[
1024
],
char
start
[
1024
],
char
end
[
1024
],
char
dir_to_skip
[
1024
])
char
dir_to_skip
[
1024
])
{
{
...
@@ -54,10 +55,12 @@ static char
...
@@ -54,10 +55,12 @@ static char
int
n
;
int
n
;
char
gemname
[
1024
]
=
""
;
char
gemname
[
1024
]
=
""
;
char
gemname_path
[
4096
]
=
""
;
char
gemname_path
[
4096
]
=
""
;
char
complete_line
[
4096
]
=
""
;
char
src_path
[
4096
]
=
""
;
char
src_path
[
4096
]
=
""
;
struct
stat
attribut
;
struct
stat
attribut
;
// return value
char
*
complete_line
=
malloc
(
4096
+
sizeof
(
char
));
strcat
(
complete_line
,
start
);
strcat
(
complete_line
,
start
);
n
=
scandir
(
"./g"
,
&
eps
,
one
,
alphasort
);
n
=
scandir
(
"./g"
,
&
eps
,
one
,
alphasort
);
...
@@ -114,102 +117,100 @@ make_gem_makefile()
...
@@ -114,102 +117,100 @@ make_gem_makefile()
int
gem_c_empty
;
int
gem_c_empty
;
int
gem_ruby_empty
;
int
gem_ruby_empty
;
puts
(
"CFLAGS := -I. -I../../include -I../../src"
);
printf
(
"CFLAGS := -I. -I../../include -I../../src
\n\n
"
puts
(
""
);
"ifeq ($(OS),Windows_NT)
\n
"
puts
(
"ifeq ($(OS),Windows_NT)"
);
"MAKE_FLAGS = --no-print-directory CC=$(CC) LL=$(LL) ALL_CFLAGS='$(ALL_CFLAGS)'
\n
"
puts
(
"MAKE_FLAGS = --no-print-directory CC=$(CC) LL=$(LL) ALL_CFLAGS='$(ALL_CFLAGS)'"
);
"else
\n
"
puts
(
"else"
);
"MAKE_FLAGS = --no-print-directory CC='$(CC)' LL='$(LL)' ALL_CFLAGS='$(ALL_CFLAGS)'
\n
"
puts
(
"MAKE_FLAGS = --no-print-directory CC='$(CC)' LL='$(LL)' ALL_CFLAGS='$(ALL_CFLAGS)'"
);
"endif
\n\n
"
);
puts
(
"endif"
);
puts
(
""
);
/* is there any GEM available? */
gem_check
=
for_each_gem
(
""
,
""
,
""
,
""
,
""
);
gem_check
=
for_each_gem
(
""
,
""
,
""
,
""
,
""
);
if
(
strcmp
(
gem_check
,
""
)
==
0
)
if
(
strcmp
(
gem_check
,
""
)
==
0
)
gem_empty
=
TRUE
;
gem_empty
=
TRUE
;
else
else
gem_empty
=
FALSE
;
gem_empty
=
FALSE
;
/* is there a C extension available? */
gem_check
=
for_each_gem
(
""
,
""
,
""
,
""
,
"src"
);
gem_check
=
for_each_gem
(
""
,
""
,
""
,
""
,
"src"
);
if
(
strcmp
(
gem_check
,
""
)
==
0
)
if
(
strcmp
(
gem_check
,
""
)
==
0
)
gem_c_empty
=
TRUE
;
gem_c_empty
=
TRUE
;
else
else
gem_c_empty
=
FALSE
;
gem_c_empty
=
FALSE
;
/* is there a Ruby extension available */
gem_check
=
for_each_gem
(
""
,
""
,
""
,
""
,
"mrblib"
);
gem_check
=
for_each_gem
(
""
,
""
,
""
,
""
,
"mrblib"
);
if
(
strcmp
(
gem_check
,
""
)
==
0
)
if
(
strcmp
(
gem_check
,
""
)
==
0
)
gem_ruby_empty
=
TRUE
;
gem_ruby_empty
=
TRUE
;
else
else
gem_ruby_empty
=
FALSE
;
gem_ruby_empty
=
FALSE
;
p
uts
(
".PHONY : all
"
);
p
rintf
(
".PHONY : all
\n
"
);
if
(
gem_empty
)
{
if
(
gem_empty
)
{
puts
(
"all :"
);
printf
(
"all :
\n\n
"
);
puts
(
""
);
}
}
else
{
else
{
if
(
gem_c_empty
)
{
if
(
gem_c_empty
)
{
p
uts
(
"all : mrblib_gem.o"
);
p
rintf
(
"all : mrblib_gem.o
\n
"
puts
(
"
\t
$(AR) rs ../../lib/libmruby.a mrblib_gem.o
"
);
"
\t
$(AR) rs ../../lib/libmruby.a mrblib_gem.o
\n
"
);
}
}
else
if
(
gem_ruby_empty
)
{
else
if
(
gem_ruby_empty
)
{
p
uts
(
"all : all_gems
"
);
p
rintf
(
"all : all_gems
\n
"
);
}
}
else
{
else
{
p
uts
(
"all : all_gems mrblib_gem.o"
);
p
rintf
(
"all : all_gems mrblib_gem.o
\n
"
puts
(
"
\t
$(AR) rs ../../lib/libmruby.a mrblib_gem.o
"
);
"
\t
$(AR) rs ../../lib/libmruby.a mrblib_gem.o
\n
"
);
}
}
p
uts
(
"
"
);
p
rintf
(
"
\n
"
);
// Rule for building all C extensions of each Gem
// Rule for building all C extensions of each Gem
if
(
!
gem_c_empty
)
{
if
(
!
gem_c_empty
)
{
p
uts
(
"all_gems :"
);
p
rintf
(
"all_gems :
\n
%s"
,
puts
(
for_each_gem
(
"
\t
@$(MAKE) -C "
,
" $(MAKE_FLAGS)
\n
"
,
""
,
""
,
""
));
for_each_gem
(
"
\t
@$(MAKE) -C "
,
" $(MAKE_FLAGS)
\n
"
,
""
,
""
,
""
)
puts
(
""
);
);
}
}
// Rule for building all Ruby Extension of each Gem
// Rule for building all Ruby Extension of each Gem
if
(
!
gem_ruby_empty
)
{
if
(
!
gem_ruby_empty
)
{
puts
(
"mrblib_gem.o : mrblib_gem.c"
);
printf
(
"mrblib_gem.o : mrblib_gem.c
\n\n
"
puts
(
""
);
puts
(
"mrblib_gem.c : mrblib_gem.ctmp"
);
"mrblib_gem.c : mrblib_gem.ctmp
\n
"
puts
(
"
\t
cat $< > $@"
);
"
\t
cat $< > $@
\n\n
"
puts
(
""
);
puts
(
"mrblib_gem.ctmp : mrblib_gem.rbtmp"
);
"mrblib_gem.ctmp : mrblib_gem.rbtmp
\n
"
puts
(
"
\t
../../bin/mrbc -Bmrblib_gem_irep -o$@ $<"
);
"
\t
../../bin/mrbc -Bmrblib_gem_irep -o$@ $<
\n\n
"
puts
(
""
);
puts
(
"mrblib_gem.rbtmp :"
);
"mrblib_gem.rbtmp :
\n
%s"
,
puts
(
for_each_gem
(
" "
,
"/mrblib/*.rb"
,
"
\t
cat"
,
"> mrblib_gem.rbtmp"
,
"mrblib"
));
for_each_gem
(
" "
,
"/mrblib/*.rb"
,
"
\t
cat"
,
"> mrblib_gem.rbtmp"
,
"mrblib"
)
puts
(
""
);
);
}
}
}
}
puts
(
".PHONY : prepare-test"
);
printf
(
".PHONY : prepare-test
\n
"
puts
(
"prepare-test : mrbgemtest.ctmp"
);
"prepare-test : mrbgemtest.ctmp
\n\n
"
puts
(
""
);
puts
(
"mrbgemtest.ctmp : mrbgemtest.rbtmp"
);
"mrbgemtest.ctmp : mrbgemtest.rbtmp
\n
"
puts
(
"
\t
../../bin/mrbc -Bmrbgemtest_irep -omrbgemtest.ctmp mrbgemtest.rbtmp"
);
"
\t
../../bin/mrbc -Bmrbgemtest_irep -omrbgemtest.ctmp mrbgemtest.rbtmp
\n\n
"
puts
(
""
);
puts
(
"mrbgemtest.rbtmp :"
);
"mrbgemtest.rbtmp :
\n
"
);
if
(
!
gem_empty
)
if
(
!
gem_empty
)
puts
(
for_each_gem
(
" "
,
"/test/*.rb "
,
"
\t
cat"
,
" > mrbgemtest.rbtmp"
,
""
));
printf
(
"%s"
,
for_each_gem
(
" "
,
"/test/*.rb "
,
"
\t
cat"
,
" > mrbgemtest.rbtmp"
,
""
)
);
else
else
puts
(
"
\t
../generator rbtmp > mrbgemtest.rbtmp"
);
printf
(
"
\t
../generator rbtmp > mrbgemtest.rbtmp
\n
"
);
puts
(
""
);
p
uts
(
".PHONY : clean"
);
p
rintf
(
"
\n
.PHONY : clean
\n
"
puts
(
"clean :"
);
"clean :
\n
"
puts
(
"
\t
$(RM) *.c *.d *.rbtmp *.ctmp *.o mrbtest
"
);
"
\t
$(RM) *.c *.d *.rbtmp *.ctmp *.o mrbtest
\n
"
);
if
(
!
gem_empty
)
if
(
!
gem_empty
)
puts
(
for_each_gem
(
"
\t
@$(MAKE) clean -C "
,
" $(MAKE_FLAGS)
\n
"
,
""
,
""
,
""
));
printf
(
"%s"
,
for_each_gem
(
"
\t
@$(MAKE) clean -C "
,
" $(MAKE_FLAGS)
\n
"
,
""
,
""
,
""
)
);
}
}
/*
/*
...
@@ -224,72 +225,75 @@ make_init_gems()
...
@@ -224,72 +225,75 @@ make_init_gems()
int
gem_c_empty
;
int
gem_c_empty
;
int
gem_ruby_empty
;
int
gem_ruby_empty
;
/* is there any GEM available? */
gem_check
=
for_each_gem
(
""
,
""
,
""
,
""
,
""
);
gem_check
=
for_each_gem
(
""
,
""
,
""
,
""
,
""
);
if
(
strcmp
(
gem_check
,
""
)
==
0
)
if
(
strcmp
(
gem_check
,
""
)
==
0
)
gem_empty
=
TRUE
;
gem_empty
=
TRUE
;
else
else
gem_empty
=
FALSE
;
gem_empty
=
FALSE
;
/* is there a C extension available? */
gem_check
=
for_each_gem
(
""
,
""
,
""
,
""
,
"src"
);
gem_check
=
for_each_gem
(
""
,
""
,
""
,
""
,
"src"
);
if
(
strcmp
(
gem_check
,
""
)
==
0
)
if
(
strcmp
(
gem_check
,
""
)
==
0
)
gem_c_empty
=
TRUE
;
gem_c_empty
=
TRUE
;
else
else
gem_c_empty
=
FALSE
;
gem_c_empty
=
FALSE
;
/* is there a Ruby extension available */
gem_check
=
for_each_gem
(
""
,
""
,
""
,
""
,
"mrblib"
);
gem_check
=
for_each_gem
(
""
,
""
,
""
,
""
,
"mrblib"
);
if
(
strcmp
(
gem_check
,
""
)
==
0
)
if
(
strcmp
(
gem_check
,
""
)
==
0
)
gem_ruby_empty
=
TRUE
;
gem_ruby_empty
=
TRUE
;
else
else
gem_ruby_empty
=
FALSE
;
gem_ruby_empty
=
FALSE
;
puts
(
"/*"
);
printf
(
"/*
\n
"
puts
(
" * This file contains a list of all"
);
" * This file contains a list of all
\n
"
puts
(
" * initializing methods which are"
);
" * initializing methods which are
\n
"
puts
(
" * necessary to bootstrap all gems."
);
" * necessary to bootstrap all gems.
\n
"
puts
(
" *"
);
" *
\n
"
puts
(
" * IMPORTANT:"
);
" * IMPORTANT:
\n
"
puts
(
" * This file was generated!"
);
" * This file was generated!
\n
"
puts
(
" * All manual changes will get lost."
);
" * All manual changes will get lost.
\n
"
puts
(
" */"
);
" */
\n\n
"
"#include
\"
mruby.h
\"\n
"
puts
(
""
);
"#include
\"
mruby/irep.h
\"\n
"
puts
(
"#include
\"
mruby.h
\"
"
);
"#include
\"
mruby/dump.h
\"\n
"
puts
(
"#include
\"
mruby/irep.h
\"
"
);
"#include
\"
mruby/string.h
\"\n
"
puts
(
"#include
\"
mruby/dump.h
\"
"
);
"#include
\"
mruby/proc.h
\"\n
"
puts
(
"#include
\"
mruby/string.h
\"
"
);
""
);
puts
(
"#include
\"
mruby/proc.h
\"
"
);
puts
(
""
);
if
(
!
gem_c_empty
)
if
(
!
gem_c_empty
)
puts
(
for_each_gem
(
"void mrb_"
,
"_gem_init(mrb_state*);
\n
"
,
""
,
""
,
"src"
));
printf
(
"%s"
,
for_each_gem
(
"void mrb_"
,
"_gem_init(mrb_state*);
\n
"
,
""
,
""
,
"src"
)
);
if
(
!
gem_ruby_empty
)
if
(
!
gem_ruby_empty
)
puts
(
"extern const char mrblib_gem_irep[];"
);
printf
(
"extern const char mrblib_gem_irep[];
\n
"
);
puts
(
""
);
p
uts
(
"void"
);
p
rintf
(
"
\n
void
\n
"
puts
(
"mrb_init_mrbgems(mrb_state *mrb) {"
);
"mrb_init_mrbgems(mrb_state *mrb) {"
);
if
(
!
gem_c_empty
)
if
(
!
gem_c_empty
)
puts
(
for_each_gem
(
" mrb_"
,
"_gem_init(mrb);
\n
"
,
""
,
""
,
"src"
));
printf
(
"%s"
,
for_each_gem
(
" mrb_"
,
"_gem_init(mrb);
\n
"
,
""
,
""
,
"src"
)
);
if
(
!
gem_ruby_empty
)
{
if
(
!
gem_ruby_empty
)
{
p
uts
(
" int n = mrb_read_irep(mrb, mrblib_gem_irep);"
);
p
rintf
(
" int n = mrb_read_irep(mrb, mrblib_gem_irep);
\n
"
puts
(
" mrb_run(mrb, mrb_proc_new(mrb, mrb->irep[n]), mrb_top_self(mrb));"
);
" mrb_run(mrb, mrb_proc_new(mrb, mrb->irep[n]), mrb_top_self(mrb));
\n
"
puts
(
" if (mrb->exc) {"
);
" if (mrb->exc) {
\n
"
puts
(
" mrb_p(mrb, mrb_obj_value(mrb->exc));"
);
" mrb_p(mrb, mrb_obj_value(mrb->exc));
\n
"
puts
(
" exit(0);"
);
" exit(0);
\n
"
puts
(
" }"
);
" }"
);
}
}
p
uts
(
"}"
);
p
rintf
(
"}"
);
}
}
void
void
make_rbtmp
()
make_rbtmp
()
{
{
p
uts
(
"
"
);
p
rintf
(
"
\n
"
);
}
}
int
int
...
@@ -306,7 +310,7 @@ main (int argc, char *argv[])
...
@@ -306,7 +310,7 @@ main (int argc, char *argv[])
return
1
;
return
1
;
}
}
else
{
else
{
p
uts
(
"Argument missing! Options: 'makefile', 'init_gems', 'rbtmp'"
);
p
rintf
(
"Argument missing! Options: 'makefile', 'init_gems', 'rbtmp'"
);
return
1
;
return
1
;
}
}
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment