LLVMConfig.st
author Jan Vrany <jan.vrany@fit.cvut.cz>
Sun, 13 Sep 2015 07:27:07 +0100
changeset 36 51ac97a0e87d
parent 21 64c5f01be2b3
child 45 12a2f6470ef4
permissions -rw-r--r--
Fixed LLVMConfig to handle lying `llvm-config --libdir` On recent Debian Jessie builds from http://llvm.org/apt/jessie/ it seems that `llvm-config-3.8 --libdir` returns non-existent directory. To workaround this, check for returned libdir existence and if does not exists, perform some guesswork. It guesswork does not help, throw an error.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
21
64c5f01be2b3 Introduced class LLVMConfig to abstract a particular LLVM version
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     1
"
64c5f01be2b3 Introduced class LLVMConfig to abstract a particular LLVM version
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     2
    Copyright (C) 2015-now Jan Vrany
64c5f01be2b3 Introduced class LLVMConfig to abstract a particular LLVM version
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     3
64c5f01be2b3 Introduced class LLVMConfig to abstract a particular LLVM version
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     4
    This code is not an open-source (yet). You may use this code
64c5f01be2b3 Introduced class LLVMConfig to abstract a particular LLVM version
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     5
    for your own experiments and projects, given that:
64c5f01be2b3 Introduced class LLVMConfig to abstract a particular LLVM version
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     6
64c5f01be2b3 Introduced class LLVMConfig to abstract a particular LLVM version
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     7
    * all modification to the code will be sent to the
64c5f01be2b3 Introduced class LLVMConfig to abstract a particular LLVM version
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     8
      original author for inclusion in future releases
64c5f01be2b3 Introduced class LLVMConfig to abstract a particular LLVM version
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     9
    * this is not used in any commercial software
64c5f01be2b3 Introduced class LLVMConfig to abstract a particular LLVM version
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    10
64c5f01be2b3 Introduced class LLVMConfig to abstract a particular LLVM version
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    11
    This license is provisional and may (will) change in
64c5f01be2b3 Introduced class LLVMConfig to abstract a particular LLVM version
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    12
    a future.
64c5f01be2b3 Introduced class LLVMConfig to abstract a particular LLVM version
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    13
"
64c5f01be2b3 Introduced class LLVMConfig to abstract a particular LLVM version
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    14
"{ Package: 'jv:llvm_s' }"
64c5f01be2b3 Introduced class LLVMConfig to abstract a particular LLVM version
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    15
64c5f01be2b3 Introduced class LLVMConfig to abstract a particular LLVM version
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    16
"{ NameSpace: Smalltalk }"
64c5f01be2b3 Introduced class LLVMConfig to abstract a particular LLVM version
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    17
64c5f01be2b3 Introduced class LLVMConfig to abstract a particular LLVM version
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    18
Object subclass:#LLVMConfig
64c5f01be2b3 Introduced class LLVMConfig to abstract a particular LLVM version
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    19
	instanceVariableNames:''
64c5f01be2b3 Introduced class LLVMConfig to abstract a particular LLVM version
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    20
	classVariableNames:'LLVMConfigPath BinDir LibDir LibraryPath'
64c5f01be2b3 Introduced class LLVMConfig to abstract a particular LLVM version
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    21
	poolDictionaries:''
64c5f01be2b3 Introduced class LLVMConfig to abstract a particular LLVM version
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    22
	category:'LLVM-S-Internal'
64c5f01be2b3 Introduced class LLVMConfig to abstract a particular LLVM version
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    23
!
64c5f01be2b3 Introduced class LLVMConfig to abstract a particular LLVM version
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    24
64c5f01be2b3 Introduced class LLVMConfig to abstract a particular LLVM version
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    25
!LLVMConfig class methodsFor:'documentation'!
64c5f01be2b3 Introduced class LLVMConfig to abstract a particular LLVM version
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    26
64c5f01be2b3 Introduced class LLVMConfig to abstract a particular LLVM version
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    27
copyright
64c5f01be2b3 Introduced class LLVMConfig to abstract a particular LLVM version
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    28
"
64c5f01be2b3 Introduced class LLVMConfig to abstract a particular LLVM version
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    29
    Copyright (C) 2015-now Jan Vrany
64c5f01be2b3 Introduced class LLVMConfig to abstract a particular LLVM version
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    30
64c5f01be2b3 Introduced class LLVMConfig to abstract a particular LLVM version
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    31
    This code is not an open-source (yet). You may use this code
64c5f01be2b3 Introduced class LLVMConfig to abstract a particular LLVM version
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    32
    for your own experiments and projects, given that:
64c5f01be2b3 Introduced class LLVMConfig to abstract a particular LLVM version
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    33
64c5f01be2b3 Introduced class LLVMConfig to abstract a particular LLVM version
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    34
    * all modification to the code will be sent to the
64c5f01be2b3 Introduced class LLVMConfig to abstract a particular LLVM version
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    35
      original author for inclusion in future releases
64c5f01be2b3 Introduced class LLVMConfig to abstract a particular LLVM version
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    36
    * this is not used in any commercial software
64c5f01be2b3 Introduced class LLVMConfig to abstract a particular LLVM version
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    37
64c5f01be2b3 Introduced class LLVMConfig to abstract a particular LLVM version
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    38
    This license is provisional and may (will) change in
64c5f01be2b3 Introduced class LLVMConfig to abstract a particular LLVM version
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    39
    a future.
64c5f01be2b3 Introduced class LLVMConfig to abstract a particular LLVM version
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    40
"
64c5f01be2b3 Introduced class LLVMConfig to abstract a particular LLVM version
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    41
! !
64c5f01be2b3 Introduced class LLVMConfig to abstract a particular LLVM version
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    42
64c5f01be2b3 Introduced class LLVMConfig to abstract a particular LLVM version
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    43
!LLVMConfig class methodsFor:'initialization'!
64c5f01be2b3 Introduced class LLVMConfig to abstract a particular LLVM version
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    44
64c5f01be2b3 Introduced class LLVMConfig to abstract a particular LLVM version
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    45
initialize
64c5f01be2b3 Introduced class LLVMConfig to abstract a particular LLVM version
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    46
    "Invoked at system start or when the class is dynamically loaded."
64c5f01be2b3 Introduced class LLVMConfig to abstract a particular LLVM version
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    47
64c5f01be2b3 Introduced class LLVMConfig to abstract a particular LLVM version
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    48
    LLVMConfigPath := nil.
64c5f01be2b3 Introduced class LLVMConfig to abstract a particular LLVM version
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    49
    OperatingSystem isUNIXlike ifTrue:[ 
64c5f01be2b3 Introduced class LLVMConfig to abstract a particular LLVM version
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    50
        #('-3.8' '-3.7' '') do:[:ver |
64c5f01be2b3 Introduced class LLVMConfig to abstract a particular LLVM version
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    51
            | path |
64c5f01be2b3 Introduced class LLVMConfig to abstract a particular LLVM version
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    52
            path := OperatingSystem pathOfCommand: 'llvm-config' , ver.
64c5f01be2b3 Introduced class LLVMConfig to abstract a particular LLVM version
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    53
            path notNil ifTrue:[
64c5f01be2b3 Introduced class LLVMConfig to abstract a particular LLVM version
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    54
                self llvmConfigPath: path.
64c5f01be2b3 Introduced class LLVMConfig to abstract a particular LLVM version
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    55
                ^ self.
64c5f01be2b3 Introduced class LLVMConfig to abstract a particular LLVM version
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    56
            ]
64c5f01be2b3 Introduced class LLVMConfig to abstract a particular LLVM version
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    57
        ].
64c5f01be2b3 Introduced class LLVMConfig to abstract a particular LLVM version
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    58
        ^ self
64c5f01be2b3 Introduced class LLVMConfig to abstract a particular LLVM version
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    59
    ].
36
51ac97a0e87d Fixed LLVMConfig to handle lying `llvm-config --libdir`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 21
diff changeset
    60
    self error: 'This operating system is not supported'.
21
64c5f01be2b3 Introduced class LLVMConfig to abstract a particular LLVM version
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    61
36
51ac97a0e87d Fixed LLVMConfig to handle lying `llvm-config --libdir`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 21
diff changeset
    62
    "Modified: / 13-09-2015 / 07:03:03 / Jan Vrany <jan.vrany@fit.cvut.cz>"
21
64c5f01be2b3 Introduced class LLVMConfig to abstract a particular LLVM version
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    63
!
64c5f01be2b3 Introduced class LLVMConfig to abstract a particular LLVM version
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    64
64c5f01be2b3 Introduced class LLVMConfig to abstract a particular LLVM version
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    65
llvmConfigPath: aStringOrFilename
64c5f01be2b3 Introduced class LLVMConfig to abstract a particular LLVM version
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    66
    "Set's the path to LLVM config which effectively
64c5f01be2b3 Introduced class LLVMConfig to abstract a particular LLVM version
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    67
     defines which version of LLVM to use.
64c5f01be2b3 Introduced class LLVMConfig to abstract a particular LLVM version
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    68
     Must be called before using any other LLVM API"
64c5f01be2b3 Introduced class LLVMConfig to abstract a particular LLVM version
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    69
64c5f01be2b3 Introduced class LLVMConfig to abstract a particular LLVM version
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    70
    | path |
64c5f01be2b3 Introduced class LLVMConfig to abstract a particular LLVM version
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    71
64c5f01be2b3 Introduced class LLVMConfig to abstract a particular LLVM version
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    72
    path := aStringOrFilename asFilename.
64c5f01be2b3 Introduced class LLVMConfig to abstract a particular LLVM version
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    73
    path exists ifFalse:[ 
64c5f01be2b3 Introduced class LLVMConfig to abstract a particular LLVM version
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    74
        self error: '`', path pathName ,'` does not exist'.
64c5f01be2b3 Introduced class LLVMConfig to abstract a particular LLVM version
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    75
        ^ self.
64c5f01be2b3 Introduced class LLVMConfig to abstract a particular LLVM version
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    76
    ].
64c5f01be2b3 Introduced class LLVMConfig to abstract a particular LLVM version
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    77
    path isExecutable ifFalse:[ 
64c5f01be2b3 Introduced class LLVMConfig to abstract a particular LLVM version
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    78
        self error: '`', path pathName ,'` does not executable'.
64c5f01be2b3 Introduced class LLVMConfig to abstract a particular LLVM version
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    79
        ^ self.
64c5f01be2b3 Introduced class LLVMConfig to abstract a particular LLVM version
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    80
    ].
64c5f01be2b3 Introduced class LLVMConfig to abstract a particular LLVM version
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    81
    LLVMConfigPath := path.
64c5f01be2b3 Introduced class LLVMConfig to abstract a particular LLVM version
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    82
    BinDir := LibDir := LibraryPath := nil.
64c5f01be2b3 Introduced class LLVMConfig to abstract a particular LLVM version
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    83
64c5f01be2b3 Introduced class LLVMConfig to abstract a particular LLVM version
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    84
    "Created: / 07-08-2015 / 13:31:31 / Jan Vrany <jan.vrany@fit.cvut.cz>"
64c5f01be2b3 Introduced class LLVMConfig to abstract a particular LLVM version
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    85
! !
64c5f01be2b3 Introduced class LLVMConfig to abstract a particular LLVM version
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    86
64c5f01be2b3 Introduced class LLVMConfig to abstract a particular LLVM version
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    87
!LLVMConfig class methodsFor:'accessing'!
64c5f01be2b3 Introduced class LLVMConfig to abstract a particular LLVM version
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    88
64c5f01be2b3 Introduced class LLVMConfig to abstract a particular LLVM version
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    89
bindir
64c5f01be2b3 Introduced class LLVMConfig to abstract a particular LLVM version
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    90
    "Returns result of `llvm-config --bindir` as Filename"
64c5f01be2b3 Introduced class LLVMConfig to abstract a particular LLVM version
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    91
64c5f01be2b3 Introduced class LLVMConfig to abstract a particular LLVM version
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    92
    BinDir isNil ifTrue:[ 
64c5f01be2b3 Introduced class LLVMConfig to abstract a particular LLVM version
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    93
        LLVMConfigPath isNil ifTrue:[ 
64c5f01be2b3 Introduced class LLVMConfig to abstract a particular LLVM version
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    94
            self error: 'No path to `llvm-config` set, use #llvmConfigPath:'
64c5f01be2b3 Introduced class LLVMConfig to abstract a particular LLVM version
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    95
        ].
64c5f01be2b3 Introduced class LLVMConfig to abstract a particular LLVM version
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    96
        BinDir := OperatingSystem getCommandOutputFrom: LLVMConfigPath asString, ' --bindir'
64c5f01be2b3 Introduced class LLVMConfig to abstract a particular LLVM version
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    97
    ].
64c5f01be2b3 Introduced class LLVMConfig to abstract a particular LLVM version
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    98
    ^ BinDir
64c5f01be2b3 Introduced class LLVMConfig to abstract a particular LLVM version
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    99
64c5f01be2b3 Introduced class LLVMConfig to abstract a particular LLVM version
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   100
    "
64c5f01be2b3 Introduced class LLVMConfig to abstract a particular LLVM version
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   101
    LLVMConfig bindir
64c5f01be2b3 Introduced class LLVMConfig to abstract a particular LLVM version
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   102
    "
64c5f01be2b3 Introduced class LLVMConfig to abstract a particular LLVM version
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   103
64c5f01be2b3 Introduced class LLVMConfig to abstract a particular LLVM version
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   104
    "Created: / 07-08-2015 / 13:29:48 / Jan Vrany <jan.vrany@fit.cvut.cz>"
64c5f01be2b3 Introduced class LLVMConfig to abstract a particular LLVM version
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   105
!
64c5f01be2b3 Introduced class LLVMConfig to abstract a particular LLVM version
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   106
64c5f01be2b3 Introduced class LLVMConfig to abstract a particular LLVM version
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   107
libdir
64c5f01be2b3 Introduced class LLVMConfig to abstract a particular LLVM version
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   108
    "Returns result of `llvm-config --libdir` as Filename"
64c5f01be2b3 Introduced class LLVMConfig to abstract a particular LLVM version
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   109
64c5f01be2b3 Introduced class LLVMConfig to abstract a particular LLVM version
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   110
    LibDir isNil ifTrue:[ 
64c5f01be2b3 Introduced class LLVMConfig to abstract a particular LLVM version
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   111
        LLVMConfigPath isNil ifTrue:[ 
64c5f01be2b3 Introduced class LLVMConfig to abstract a particular LLVM version
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   112
            self error: 'No path to `llvm-config` set, use #llvmConfigPath:'
64c5f01be2b3 Introduced class LLVMConfig to abstract a particular LLVM version
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   113
        ].
36
51ac97a0e87d Fixed LLVMConfig to handle lying `llvm-config --libdir`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 21
diff changeset
   114
        LibDir := OperatingSystem getCommandOutputFrom: LLVMConfigPath asString, ' --libdir'.
51ac97a0e87d Fixed LLVMConfig to handle lying `llvm-config --libdir`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 21
diff changeset
   115
        LibDir asFilename exists ifFalse:[ 
51ac97a0e87d Fixed LLVMConfig to handle lying `llvm-config --libdir`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 21
diff changeset
   116
            Logger warning: 'libdir reported by %1 does not exist (%2)' with: LLVMConfigPath with: LibDir.
51ac97a0e87d Fixed LLVMConfig to handle lying `llvm-config --libdir`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 21
diff changeset
   117
            OperatingSystem isUNIXlike ifTrue:[ 
51ac97a0e87d Fixed LLVMConfig to handle lying `llvm-config --libdir`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 21
diff changeset
   118
                "/ Assume Linux here
51ac97a0e87d Fixed LLVMConfig to handle lying `llvm-config --libdir`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 21
diff changeset
   119
                ExternalAddress pointerSize == 8 ifTrue:[ 
51ac97a0e87d Fixed LLVMConfig to handle lying `llvm-config --libdir`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 21
diff changeset
   120
                    "/ Pure guess...
51ac97a0e87d Fixed LLVMConfig to handle lying `llvm-config --libdir`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 21
diff changeset
   121
                    LibDir := '/usr/lib/x86_64-linux-gnu'.
51ac97a0e87d Fixed LLVMConfig to handle lying `llvm-config --libdir`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 21
diff changeset
   122
                ] ifFalse:[ 
51ac97a0e87d Fixed LLVMConfig to handle lying `llvm-config --libdir`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 21
diff changeset
   123
                    LibDir := '/usr/lib/i386-linux-gnu'.
51ac97a0e87d Fixed LLVMConfig to handle lying `llvm-config --libdir`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 21
diff changeset
   124
                ].
51ac97a0e87d Fixed LLVMConfig to handle lying `llvm-config --libdir`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 21
diff changeset
   125
            ] ifFalse:[
51ac97a0e87d Fixed LLVMConfig to handle lying `llvm-config --libdir`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 21
diff changeset
   126
                self error: 'Unsupported platform'.
51ac97a0e87d Fixed LLVMConfig to handle lying `llvm-config --libdir`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 21
diff changeset
   127
            ]
51ac97a0e87d Fixed LLVMConfig to handle lying `llvm-config --libdir`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 21
diff changeset
   128
        ].  
51ac97a0e87d Fixed LLVMConfig to handle lying `llvm-config --libdir`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 21
diff changeset
   129
        LibDir asFilename exists ifFalse:[ 
51ac97a0e87d Fixed LLVMConfig to handle lying `llvm-config --libdir`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 21
diff changeset
   130
            self error: 'Cannot find LLVM libdir'
51ac97a0e87d Fixed LLVMConfig to handle lying `llvm-config --libdir`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 21
diff changeset
   131
        ].
21
64c5f01be2b3 Introduced class LLVMConfig to abstract a particular LLVM version
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   132
    ].
64c5f01be2b3 Introduced class LLVMConfig to abstract a particular LLVM version
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   133
    ^ LibDir
64c5f01be2b3 Introduced class LLVMConfig to abstract a particular LLVM version
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   134
64c5f01be2b3 Introduced class LLVMConfig to abstract a particular LLVM version
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   135
    "
36
51ac97a0e87d Fixed LLVMConfig to handle lying `llvm-config --libdir`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 21
diff changeset
   136
    LibDir := nil.
21
64c5f01be2b3 Introduced class LLVMConfig to abstract a particular LLVM version
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   137
    LLVMConfig libdir
64c5f01be2b3 Introduced class LLVMConfig to abstract a particular LLVM version
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   138
    "
64c5f01be2b3 Introduced class LLVMConfig to abstract a particular LLVM version
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   139
64c5f01be2b3 Introduced class LLVMConfig to abstract a particular LLVM version
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   140
    "Created: / 07-08-2015 / 13:41:30 / Jan Vrany <jan.vrany@fit.cvut.cz>"
36
51ac97a0e87d Fixed LLVMConfig to handle lying `llvm-config --libdir`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 21
diff changeset
   141
    "Modified (comment): / 13-09-2015 / 06:59:46 / Jan Vrany <jan.vrany@fit.cvut.cz>"
21
64c5f01be2b3 Introduced class LLVMConfig to abstract a particular LLVM version
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   142
!
64c5f01be2b3 Introduced class LLVMConfig to abstract a particular LLVM version
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   143
64c5f01be2b3 Introduced class LLVMConfig to abstract a particular LLVM version
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   144
libraryPath
64c5f01be2b3 Introduced class LLVMConfig to abstract a particular LLVM version
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   145
    "Return path to `libLLVM.x.y.z.so` for linking"
64c5f01be2b3 Introduced class LLVMConfig to abstract a particular LLVM version
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   146
64c5f01be2b3 Introduced class LLVMConfig to abstract a particular LLVM version
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   147
    LibraryPath isNil ifTrue:[ 
64c5f01be2b3 Introduced class LLVMConfig to abstract a particular LLVM version
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   148
        | vsn libpath |             
64c5f01be2b3 Introduced class LLVMConfig to abstract a particular LLVM version
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   149
        LLVMConfigPath isNil ifTrue:[ 
64c5f01be2b3 Introduced class LLVMConfig to abstract a particular LLVM version
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   150
            self error: 'No path to `llvm-config` set, use #llvmConfigPath:'
64c5f01be2b3 Introduced class LLVMConfig to abstract a particular LLVM version
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   151
        ].
64c5f01be2b3 Introduced class LLVMConfig to abstract a particular LLVM version
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   152
        vsn := OperatingSystem getCommandOutputFrom: LLVMConfigPath asString, ' --version'.
64c5f01be2b3 Introduced class LLVMConfig to abstract a particular LLVM version
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   153
        libpath := self libdir asFilename / ('libLLVM-', vsn , '.so').
36
51ac97a0e87d Fixed LLVMConfig to handle lying `llvm-config --libdir`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 21
diff changeset
   154
        libpath exists ifFalse:[
51ac97a0e87d Fixed LLVMConfig to handle lying `llvm-config --libdir`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 21
diff changeset
   155
            "/ OK, try libLLVM-x.y.so.1
51ac97a0e87d Fixed LLVMConfig to handle lying `llvm-config --libdir`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 21
diff changeset
   156
            libpath := self libdir asFilename / ('libLLVM-', (vsn copyTo: (vsn lastIndexOf: $.) - 1)   , '.so.1').
51ac97a0e87d Fixed LLVMConfig to handle lying `llvm-config --libdir`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 21
diff changeset
   157
            libpath exists ifFalse:[
51ac97a0e87d Fixed LLVMConfig to handle lying `llvm-config --libdir`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 21
diff changeset
   158
                self error: 'Could not find libLLVM.x.y.z.so'
51ac97a0e87d Fixed LLVMConfig to handle lying `llvm-config --libdir`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 21
diff changeset
   159
            ].
21
64c5f01be2b3 Introduced class LLVMConfig to abstract a particular LLVM version
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   160
        ].
64c5f01be2b3 Introduced class LLVMConfig to abstract a particular LLVM version
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   161
        LibraryPath := libpath pathName.                                                        
64c5f01be2b3 Introduced class LLVMConfig to abstract a particular LLVM version
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   162
64c5f01be2b3 Introduced class LLVMConfig to abstract a particular LLVM version
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   163
    ].
64c5f01be2b3 Introduced class LLVMConfig to abstract a particular LLVM version
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   164
    ^ LibraryPath 
64c5f01be2b3 Introduced class LLVMConfig to abstract a particular LLVM version
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   165
64c5f01be2b3 Introduced class LLVMConfig to abstract a particular LLVM version
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   166
    "
36
51ac97a0e87d Fixed LLVMConfig to handle lying `llvm-config --libdir`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 21
diff changeset
   167
    LibraryPath := nil.
21
64c5f01be2b3 Introduced class LLVMConfig to abstract a particular LLVM version
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   168
    LLVMConfig libraryPath
64c5f01be2b3 Introduced class LLVMConfig to abstract a particular LLVM version
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   169
    "
64c5f01be2b3 Introduced class LLVMConfig to abstract a particular LLVM version
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   170
64c5f01be2b3 Introduced class LLVMConfig to abstract a particular LLVM version
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   171
    "Created: / 07-08-2015 / 14:04:52 / Jan Vrany <jan.vrany@fit.cvut.cz>"
36
51ac97a0e87d Fixed LLVMConfig to handle lying `llvm-config --libdir`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 21
diff changeset
   172
    "Modified (comment): / 13-09-2015 / 07:01:43 / Jan Vrany <jan.vrany@fit.cvut.cz>"
21
64c5f01be2b3 Introduced class LLVMConfig to abstract a particular LLVM version
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   173
! !
64c5f01be2b3 Introduced class LLVMConfig to abstract a particular LLVM version
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   174
64c5f01be2b3 Introduced class LLVMConfig to abstract a particular LLVM version
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   175
!LLVMConfig class methodsFor:'documentation'!
64c5f01be2b3 Introduced class LLVMConfig to abstract a particular LLVM version
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   176
36
51ac97a0e87d Fixed LLVMConfig to handle lying `llvm-config --libdir`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 21
diff changeset
   177
version_HG
51ac97a0e87d Fixed LLVMConfig to handle lying `llvm-config --libdir`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 21
diff changeset
   178
    ^ '$Changeset: <not expanded> $'
21
64c5f01be2b3 Introduced class LLVMConfig to abstract a particular LLVM version
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   179
64c5f01be2b3 Introduced class LLVMConfig to abstract a particular LLVM version
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   180
! !
64c5f01be2b3 Introduced class LLVMConfig to abstract a particular LLVM version
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   181
64c5f01be2b3 Introduced class LLVMConfig to abstract a particular LLVM version
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   182
64c5f01be2b3 Introduced class LLVMConfig to abstract a particular LLVM version
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   183
LLVMConfig initialize!