Determining the platform you are running on

Raimo Niskanen <>
Fri May 31 09:21:11 CEST 2002


I have solved that particular problem by adding tag to
erlang:system_info/1. Unfortunately does it only exist in (yet to come)
R9. It will be:

6> erlang:system_info(system_architecture).
"i686-pc-linux-gnu"


For the daring open source user I submit two "diff -c"s and a rewritten
utility below. I hope these changes are all it takes.

/ Raimo Niskanen, Erlang/OTP, Ericsson AB



================= diff:
*** erts/emulator/beam/erl_bif_info.c@@/main/release/r9_dev/0   Tue Jan
29 11:21:13 2002
--- erts/emulator/beam/erl_bif_info.c@@/main/release/r9_dev/1   Tue Jan
29 13:51:01 2002
***************
*** 760,766 ****
        n++;
        hp = HAlloc(BIF_P, n*2);
        BIF_RET(buf_to_intlist(&hp, tmp_buf, n, NIL));
!     }
  #ifdef INSTRUMENT
      else if (BIF_ARG_1 == am_allocated) {
        Eterm val;
--- 760,773 ----
        n++;
        hp = HAlloc(BIF_P, n*2);
        BIF_RET(buf_to_intlist(&hp, tmp_buf, n, NIL));
!     } else if (BIF_ARG_1 == am_system_architecture) {
!       int n;
! 
!       sys_strcpy((char*)tmp_buf, ERLANG_ARCHITECTURE);
!       n = sys_strlen((char*)tmp_buf);
!       hp = HAlloc(BIF_P, n*2);
!       BIF_RET(buf_to_intlist(&hp, tmp_buf, n, NIL));
!     } 
  #ifdef INSTRUMENT
      else if (BIF_ARG_1 == am_allocated) {
        Eterm val;
================= diff:
*** erts/emulator/Makefile.in@@/main/release/r9_dev/1   Thu Nov 15
14:06:50 2001
--- erts/emulator/Makefile.in@@/main/release/r9_dev/2   Tue Jan 29
13:50:55 2002
***************
*** 161,167 ****
  
  # version include file
  $(TARGET)/erl_version.h: ../vsn.mk
!       $(PERL) utils/make_version -o $@ $(VSN)$(SERIALNO)
  
  # driver table
  $(TARGET)/driver_tab.c:       Makefile.in
--- 161,167 ----
  
  # version include file
  $(TARGET)/erl_version.h: ../vsn.mk
!       $(PERL) utils/make_version -o $@ $(VSN)$(SERIALNO) $(TARGET)
  
  # driver table
  $(TARGET)/driver_tab.c:       Makefile.in
================= erts/emulator/utils/make_version:
#!/usr/bin/env perl 
# ``The contents of this file are subject to the Erlang Public License,
# Version 1.1, (the "License"); you may not use this file except in
# compliance with the License. You should have received a copy of the
# Erlang Public License along with this software. If not, it can be
# retrieved via the world wide web at http://www.erlang.org/.
# 
# Software distributed under the License is distributed on an "AS IS"
# basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
# the License for the specific language governing rights and limitations
# under the License.
# 
# The Initial Developer of the Original Code is Ericsson Utvecklings AB.
# Portions created by Ericsson are Copyright 1999, Ericsson Utvecklings
# AB. All Rights Reserved.''
# 
#     $Id$
#
use strict;

# Create the file erl_version.h
#
# Usage:
#    make_version [ -o outputfile ] version architecture
#
# Output goes to ./erl_version.h (or to "outputfile" if specified)
#

my $time_str   = localtime;
my $outputfile = "erl_version.h";

@ARGV or die "No arguments given to 'make_version'";

if ($ARGV[0] eq '-o') {
  shift;                        # Remove -o
  $outputfile = shift;
  defined $outputfile or die "No output file specified";
}

my $version = shift;
defined $version or die "No version name specified";

my $architecture = shift;
defined $architecture or die "No architecture specified";
$architecture =~ s&^.*[/\\]&&;  # Remove directory part if any

open(FILE, ">$outputfile") or die "Can't create $outputfile: $!";

print FILE <<EOF;
/* This file was created by 'make_version' -- don't modify. */
#define ERLANG_VERSION "$version"
#define ERLANG_COMPILE_DATE "$time_str"
#define ERLANG_ARCHITECTURE "$architecture"
EOF

close(FILE);

exit(0);
================= 






Shawn Pearce wrote:
> 
> Does anyone have any idea on how to request that Erlang return the platform
> it is currently running on?  I'm looking for some type of string, such
> as returned by GNU autoconf's config.guess would return, for example
> "i686-pc-linux-gnu".
> 
> I would like to use this string to determine the name of the directory
> to load my linked-in driver(s) from.
> 
> Or does anyone have a better idea on handling locating my linked in
> driver shared objects?
> 
> --
> Shawn.
> 
> Why do I like Perl?  Because ``in accordance with Unix tradition Perl
> gives you enough rope to hang yourself with.''
> 
> Why do I dislike Java? Because ``the class ROPE that should contain the
> method HANG to do the hanging doesn't exist because there is too much
> 'security' built into the base language.''



More information about the erlang-questions mailing list