1
1
Fork 0
mirror of https://github.com/QB64-Phoenix-Edition/QB64pe.git synced 2024-07-04 04:50:22 +00:00

The -o flag should not strip extensions except for .exe

Current the -o flag will strip any "extension" on the provided filename,
which is fairly problimatic on Linux and Mac OS since those executes do
not have other extensions and names like "foobar.v1" will get the ".v1"
stripped off. This can happen on Windows as well if you leave off the
.exe (QB64-PE will add it for you, but also strip off the existing
extension).

QB64-PE stripping off the ".exe" when provided that on Linux and Mac OS
might actually be useful behavior people are relying on (so that they
don't need to provide different names when compiling on Linux/Mac OS) so
we are preserving that and still removing the extension if it is exactly
"EXE", otherwise we now leave it in place.

Fixes: #297
This commit is contained in:
Matthew Kilgore 2023-02-07 02:15:19 -05:00 committed by Matt Kilgore
parent 09e854390d
commit df70f7e708
5 changed files with 78 additions and 1 deletions

View file

@ -12322,7 +12322,12 @@ IF idemode = 0 AND No_C_Compile_Mode = 0 THEN
'resolve relative path for output file
path.out$ = getfilepath$(outputfile_cmd$)
f$ = MID$(outputfile_cmd$, LEN(path.out$) + 1)
file$ = RemoveFileExtension$(f$)
If UCASE$(GetFileExtension$(f$)) = "EXE" Then
file$ = RemoveFileExtension$(f$)
Else
file$ = f$
End If
END IF
IF LEN(path.out$) OR OutputIsRelativeToStartDir THEN

View file

@ -71,6 +71,20 @@ FUNCTION RemoveFileExtension$ (f$)
RemoveFileExtension$ = f$
END FUNCTION
'
' Returns the extension on the end of a file name
'
' Returns "" if there is no extension
'
FUNCTION GetFileExtension$ (f$)
FOR i = LEN(f$) TO 1 STEP -1
a = ASC(f$, i)
IF a = 47 OR a = 92 THEN EXIT FOR
IF a = 46 THEN GetFileExtension$ = MID$(f$, i + 1): EXIT FUNCTION
NEXT
GetFileExtension$ = ""
END FUNCTION
'
' Fixes the provided filename and path to use the correct path separator
'

View file

@ -0,0 +1,2 @@
$Console:Only
System

View file

@ -0,0 +1,41 @@
DEFLNG A-Z
$Console:Only
Type TestCase
file As String
expectedExtension As String
End Type
Dim tests(5) As TestCase
tests(1).file = "foobar.exe"
tests(1).expectedExtension = "exe"
tests(2).file = "foobar.EXE"
tests(2).expectedExtension = "EXE"
tests(3).file = "foobar."
tests(3).expectedExtension = ""
tests(4).file = "foobar"
tests(4).expectedExtension = ""
tests(5).file = "foobar.tar.gz"
tests(5).expectedExtension = "gz"
For i = 1 To UBOUND(tests)
result$ = GetFileExtension$(tests(i).file)
Print "Test"; i; ", Filename: "; tests(i).file
Print " Expected: "; tests(i).expectedExtension; ", Actual: "; result$
If result$ = tests(i).expectedExtension Then
Print " PASS!"
Else
Print " FAIL!"
End If
Next
System
'$include:'../../../source/utilities/file.bas'

View file

@ -0,0 +1,15 @@
Test 1 , Filename: foobar.exe
Expected: exe, Actual: exe
PASS!
Test 2 , Filename: foobar.EXE
Expected: EXE, Actual: EXE
PASS!
Test 3 , Filename: foobar.
Expected: , Actual:
PASS!
Test 4 , Filename: foobar
Expected: , Actual:
PASS!
Test 5 , Filename: foobar.tar.gz
Expected: gz, Actual: gz
PASS!