Skip to content
This repository has been archived by the owner on Jun 9, 2018. It is now read-only.

Commit

Permalink
build without deprecated dynpmc.pl & dynoplibs.pl
Browse files Browse the repository at this point in the history
  • Loading branch information
fperrad committed Feb 23, 2009
1 parent 8cac149 commit a6c1ada
Show file tree
Hide file tree
Showing 4 changed files with 309 additions and 64 deletions.
59 changes: 52 additions & 7 deletions Configure.pl
@@ -1,21 +1,66 @@
# $Id$
# Copyright (C) 2009, Parrot Foundation.
# $Id$

use strict;
use warnings;
use 5.008;

my $build_dir = '../..';
my $hll = 'wmlscript';
my $cmd = qq{$^X -Ilib tools/dev/reconfigure.pl --step=gen::languages --languages=$hll};
# Get a list of parrot-configs to invoke.
my @parrot_config_exe = (
'parrot/parrot_config',
'../../parrot_config',
'parrot_config',
);

# Get configuration information from parrot_config
my %config = read_parrot_config(@parrot_config_exe);
unless (%config) {
die "Unable to locate parrot_config.";
}

# Create the Makefile using the information we just got
create_makefiles(%config);

print "Running '$cmd' in $build_dir\n";
chdir $build_dir;
`$cmd`
sub read_parrot_config {
my @parrot_config_exe = @_;
my %config = ();
for my $exe (@parrot_config_exe) {
no warnings;
if (open my $PARROT_CONFIG, '-|', "$exe --dump") {
print "Reading configuration information from $exe\n";
while (<$PARROT_CONFIG>) {
$config{$1} = $2 if (/(\w+) => '(.*)'/);
}
close $PARROT_CONFIG;
last if %config;
}
}
%config;
}


# Generate Makefiles from a configuration
sub create_makefiles {
my %config = @_;
my %makefiles = (
'config/makefiles/root.in' => 'Makefile',
'config/makefiles/pmc.in' => 'pmc/Makefile',
'config/makefiles/ops.in' => 'ops/Makefile',
);
my $build_tool = $config{libdir} . $config{versiondir}
. '/tools/dev/gen_makefile.pl';

foreach my $template (keys %makefiles) {
my $makefile = $makefiles{$template};
print "Creating $makefile\n";
system($config{perl}, $build_tool, $template, $makefile);
}
}

# Local Variables:
# mode: cperl
# cperl-indent-level: 4
# fill-column: 100
# End:
# vim: expandtab shiftwidth=4:

84 changes: 84 additions & 0 deletions config/makefiles/ops.in
@@ -0,0 +1,84 @@
## $Id$

# values from parrot_config
VERSION_DIR = @versiondir@
INCLUDE_DIR = @includedir@$(VERSION_DIR)
LIB_DIR = @libdir@$(VERSION_DIR)
#STAGING_DIR = ../../dynext
STAGING_DIR = @build_dir@/runtime/parrot/dynext
#INSTALL_DIR = $(LIB_DIR)/languages/wmlscript/dynext
INSTALL_DIR = $(LIB_DIR)/dynext

# Set up extensions
LOAD_EXT = @load_ext@
O = @o@

# Setup some commands
PERL = @perl@
RM_F = @rm_f@
CHMOD = @chmod@
CP = @cp@
CC = @cc@ -c
LD = @ld@
LDFLAGS = @ldflags@ @ld_debug@ @rpath_blib@ @linkflags@
LD_LOAD_FLAGS = @ld_load_flags@
CFLAGS = @ccflags@ @cc_shared@ @cc_debug@ @ccwarn@ @cc_hasjit@ @cg_flag@ @gc_flag@
CC_OUT = @cc_o_out@
LD_OUT = @ld_out@
#IF(parrot_is_shared):LIBPARROT = @libparrot_ldflags@
#ELSE:LIBPARROT =

OPS2C = $(PERL) $(LIB_DIR)/tools/build/ops2c.pl

INCLUDES = -I$(INCLUDE_DIR) -I$(INCLUDE_DIR)/pmc
LINKARGS = $(LDFLAGS) $(LD_LOAD_FLAGS) $(LIBPARROT)

OPS_FILE = wmls.ops


all: staging

generate: $(OPS_FILE)
$(OPS2C) C --dynamic $(OPS_FILE)
$(OPS2C) CSwitch --dynamic $(OPS_FILE)
#IF(cg_flag): $(OPS2C) CGoto --dynamic $(OPS_FILE)
#IF(cg_flag): $(OPS2C) CGP --dynamic $(OPS_FILE)

compile: generate
$(CC) $(CC_OUT) wmls_ops$(O) $(INCLUDES) $(CFLAGS) wmls_ops.c
$(CC) $(CC_OUT) wmls_ops_switch$(O) $(INCLUDES) $(CFLAGS) wmls_ops_switch.c
#IF(cg_flag): $(CC) $(CC_OUT) wmls_ops_cg$(O) $(INCLUDES) $(CFLAGS) wmls_ops_cg.c
#IF(cg_flag): $(CC) $(CC_OUT) wmls_ops_cgp$(O) $(INCLUDES) $(CFLAGS) wmls_ops_cgp.c

linklibs: compile
$(LD) $(LD_OUT) wmls_ops$(LOAD_EXT) wmls_ops$(O) $(LINKARGS)
$(LD) $(LD_OUT) wmls_ops_switch$(LOAD_EXT) wmls_ops_switch$(O) $(LINKARGS)
#IF(cg_flag): $(LD) $(LD_OUT) wmls_ops_cg$(LOAD_EXT) wmls_ops_cg$(O) $(LINKARGS)
#IF(cg_flag): $(LD) $(LD_OUT) wmls_ops_cgp$(LOAD_EXT) wmls_ops_cgp$(O) $(LINKARGS)

staging: linklibs
#IF(cygwin or hpux): CHMOD 0775 "*$(LOAD_EXT)"
$(CP) "*$(LOAD_EXT)" $(STAGING_DIR)

install:
#IF(cygwin or hpux): CHMOD 0775 "*$(LOAD_EXT)"
$(CP) "*$(LOAD_EXT)" $(INSTALL_DIR)

uninstall:
$(RM_F) "$(INSTALL_DIR)/wmls_ops*$(LOAD_EXT)"

Makefile: ../config/makefiles/ops.in
cd .. && $(PERL) Configure.pl

clean:
$(RM_F) "*$(LOAD_EXT)" "*$(O)" "*.c" "*.h" \
"$(STAGING_DIR)/wmls_ops*$(LOAD_EXT)"

realclean: clean
$(RM_F) Makefile

# Local variables:
# mode: makefile
# End:
# vim: ft=make:

118 changes: 118 additions & 0 deletions config/makefiles/pmc.in
@@ -0,0 +1,118 @@
## $Id$

# values from parrot_config
VERSION_DIR = @versiondir@
INCLUDE_DIR = @includedir@$(VERSION_DIR)
LIB_DIR = @libdir@$(VERSION_DIR)
SRC_DIR = @srcdir@$(VERSION_DIR)
TOOLS_DIR = @libdir@$(VERSION_DIR)/tools/lib
#STAGING_DIR = ../../dynext
STAGING_DIR = @build_dir@/runtime/parrot/dynext
#INSTALL_DIR = $(LIB_DIR)/languages/wmlscript2/dynext
INSTALL_DIR = $(LIB_DIR)/dynext

# Set up extensions
LOAD_EXT = @load_ext@
O = @o@

# Setup some commands
PERL = @perl@
RM_F = @rm_f@
CHMOD = @chmod@
CP = @cp@
CC = @cc@ -c
LD = @ld@
LDFLAGS = @ldflags@ @ld_debug@
LD_LOAD_FLAGS = @ld_load_flags@
CFLAGS = @ccflags@ @cc_shared@ @cc_debug@ @ccwarn@ @cc_hasjit@ @cg_flag@ @gc_flag@
CC_OUT = @cc_o_out@
LD_OUT = @ld_out@
#IF(parrot_is_shared):LIBPARROT = @libparrot_ldflags@
#ELSE:LIBPARROT =

PMC2C_INCLUDES = --include $(SRC_DIR) --include $(SRC_DIR)/pmc
#PMC2C = $(PERL) $(LIB_DIR)/tools/build/pmc2c.pl
PMC2C = $(PERL) @build_dir@/tools/build/pmc2c.pl
PMC2CD = $(PMC2C) --dump $(PMC2C_INCLUDES)
PMC2CC = $(PMC2C) --c $(PMC2C_INCLUDES)

#INCLUDES = -I$(INCLUDE_DIR) -I$(INCLUDE_DIR)/pmc
INCLUDES = -I$(INCLUDE_DIR) -I$(INCLUDE_DIR)/pmc -I@build_dir@/src/pmc
LINKARGS = $(LDFLAGS) $(LD_LOAD_FLAGS) $(LIBPARROT)

PMC_SOURCES = \
wmlsinteger.pmc \
wmlsfloat.pmc \
wmlsstring.pmc \
wmlsboolean.pmc \
wmlsinvalid.pmc \
wmlsbytecode.pmc

WMLSCRIPT_GROUP = wmls_group

OBJS = \
lib-$(WMLSCRIPT_GROUP)$(O) \
wmlsinteger$(O) \
wmlsfloat$(O) \
wmlsstring$(O) \
wmlsboolean$(O) \
wmlsinvalid$(O) \
wmlsbytecode$(O)


all: staging

generate: $(PMC_SOURCES)
$(PMC2CD) wmlsinteger.pmc
$(PMC2CD) wmlsfloat.pmc
$(PMC2CD) wmlsstring.pmc
$(PMC2CD) wmlsboolean.pmc
$(PMC2CD) wmlsinvalid.pmc
$(PMC2CD) wmlsbytecode.pmc
$(PMC2CC) wmlsinteger.pmc
$(PMC2CC) wmlsfloat.pmc
$(PMC2CC) wmlsstring.pmc
$(PMC2CC) wmlsboolean.pmc
$(PMC2CC) wmlsinvalid.pmc
$(PMC2CC) wmlsbytecode.pmc
$(PMC2C) --library $(WMLSCRIPT_GROUP) --c $(PMC_SOURCES)

compile: generate
$(CC) $(CC_OUT) wmlsinteger$(O) $(INCLUDES) $(CFLAGS) wmlsinteger.c
$(CC) $(CC_OUT) wmlsfloat$(O) $(INCLUDES) $(CFLAGS) wmlsfloat.c
$(CC) $(CC_OUT) wmlsstring$(O) $(INCLUDES) $(CFLAGS) wmlsstring.c
$(CC) $(CC_OUT) wmlsboolean$(O) $(INCLUDES) $(CFLAGS) wmlsboolean.c
$(CC) $(CC_OUT) wmlsinvalid$(O) $(INCLUDES) $(CFLAGS) wmlsinvalid.c
$(CC) $(CC_OUT) wmlsbytecode$(O) $(INCLUDES) $(CFLAGS) wmlsbytecode.c
$(CC) $(CC_OUT) lib-$(WMLSCRIPT_GROUP)$(O) $(INCLUDES) $(CFLAGS) $(WMLSCRIPT_GROUP).c

linklibs: compile
$(LD) $(LD_OUT) $(WMLSCRIPT_GROUP)$(LOAD_EXT) $(OBJS) $(LINKARGS)

staging: linklibs
#IF(cygwin or hpux): CHMOD 0775 "*$(LOAD_EXT)"
$(CP) "*$(LOAD_EXT)" $(STAGING_DIR)

install:
#IF(cygwin or hpux): CHMOD 0775 "*$(LOAD_EXT)"
$(CP) "*$(LOAD_EXT)" $(INSTALL_DIR)

uninstall:
$(RM_F) $(INSTALL_DIR)/$(WMLSCRIPT_GROUP)$(LOAD_EXT)

Makefile: ../config/makefiles/pmc.in
cd .. && $(PERL) Configure.pl

clean:
$(RM_F) "*$(LOAD_EXT)" "*$(O)" "*.c" "*.h" "*.dump" \
$(STAGING_DIR)/$(WMLSCRIPT_GROUP)$(LOAD_EXT)
#IF(win32): $(RM_F) "*.exp" "*.ilk" "*.manifext" "*.pdb" "*.lib"

realclean: clean
$(RM_F) Makefile

# Local variables:
# mode: makefile
# End:
# vim: ft=make:

0 comments on commit a6c1ada

Please sign in to comment.