diff options
Diffstat (limited to 'host/cmake')
| -rw-r--r-- | host/cmake/Modules/FindORC.cmake | 36 | ||||
| -rw-r--r-- | host/cmake/Modules/FindUSB1.cmake | 15 | ||||
| -rw-r--r-- | host/cmake/Modules/NSIS.InstallOptions.ini.in | 37 | ||||
| -rw-r--r-- | host/cmake/Modules/NSIS.template.in | 955 | ||||
| -rw-r--r-- | host/cmake/Modules/UHDPackage.cmake | 9 | ||||
| -rw-r--r-- | host/cmake/Modules/UHDUnitTest.cmake | 110 | ||||
| -rwxr-xr-x | host/cmake/debian/postinst.in | 4 | ||||
| -rwxr-xr-x | host/cmake/redhat/post_install.in | 4 | 
8 files changed, 1159 insertions, 11 deletions
| diff --git a/host/cmake/Modules/FindORC.cmake b/host/cmake/Modules/FindORC.cmake new file mode 100644 index 000000000..0d9fc9ca1 --- /dev/null +++ b/host/cmake/Modules/FindORC.cmake @@ -0,0 +1,36 @@ +######################################################################## +# Find the library for ORC development files +######################################################################## + +INCLUDE(FindPkgConfig) +PKG_CHECK_MODULES(PC_ORC "orc-0.4") +PKG_CHECK_MODULES(PC_ORC_V4_11 "orc-0.4 > 0.4.11") + +#we are using the pkg config as a version check +#if we have pkg config, the right version must be found +#the alternative is that no pkg config orc is found +if (PC_ORC_V4_11_FOUND OR (NOT PC_ORC_FOUND AND NOT PC_ORC_V4_11_FOUND)) + +FIND_PATH( +    ORC_INCLUDE_DIRS +    NAMES orc/orc.h +    HINTS $ENV{ORC_DIR}/include/orc-0.4 +        ${PC_ORC_INCLUDEDIR} +    PATHS /usr/local/include/orc-0.4 +          /usr/include/orc-0.4 +) + +FIND_LIBRARY( +    ORC_LIBRARIES +    NAMES orc-0.4 +    HINTS $ENV{ORC_DIR}/lib +        ${PC_ORC_LIBDIR} +    PATHS /usr/local/lib +          /usr/lib +) + +endif() #both PC ORC FOUND + +INCLUDE(FindPackageHandleStandardArgs) +FIND_PACKAGE_HANDLE_STANDARD_ARGS(ORC DEFAULT_MSG ORC_LIBRARIES ORC_INCLUDE_DIRS) +MARK_AS_ADVANCED(ORC_LIBRARIES ORC_INCLUDE_DIRS) diff --git a/host/cmake/Modules/FindUSB1.cmake b/host/cmake/Modules/FindUSB1.cmake index 21005344b..a1ab4ca90 100644 --- a/host/cmake/Modules/FindUSB1.cmake +++ b/host/cmake/Modules/FindUSB1.cmake @@ -32,7 +32,20 @@ FIND_LIBRARY(LIBUSB_LIBRARIES      PATHS /usr/local/lib /usr/lib /opt/local/lib  ) +enable_language(C) #needs C support for check below +include(CheckFunctionExists) +if(LIBUSB_INCLUDE_DIRS) +    set(CMAKE_REQUIRED_INCLUDES ${LIBUSB_INCLUDE_DIRS}) +endif() +if(LIBUSB_LIBRARIES) +    set(CMAKE_REQUIRED_LIBRARIES ${LIBUSB_LIBRARIES}) +endif() +CHECK_FUNCTION_EXISTS("libusb_handle_events_timeout_completed" HAVE_LIBUSB_HANDLE_EVENTS_TIMEOUT_COMPLETED) + +if(HAVE_LIBUSB_HANDLE_EVENTS_TIMEOUT_COMPLETED) +    list(APPEND LIBUSB_DEFINITIONS "HAVE_LIBUSB_HANDLE_EVENTS_TIMEOUT_COMPLETED=1") +endif(HAVE_LIBUSB_HANDLE_EVENTS_TIMEOUT_COMPLETED) +  include(FindPackageHandleStandardArgs)  FIND_PACKAGE_HANDLE_STANDARD_ARGS(LIBUSB DEFAULT_MSG LIBUSB_LIBRARIES LIBUSB_INCLUDE_DIRS)  MARK_AS_ADVANCED(LIBUSB_INCLUDE_DIRS LIBUSB_LIBRARIES) - diff --git a/host/cmake/Modules/NSIS.InstallOptions.ini.in b/host/cmake/Modules/NSIS.InstallOptions.ini.in new file mode 100644 index 000000000..969a3ae52 --- /dev/null +++ b/host/cmake/Modules/NSIS.InstallOptions.ini.in @@ -0,0 +1,37 @@ +[Settings] +NumFields=4 + +[Field 1] +Type=label +Text=By default the USRP Hardware Driver (UHD) does not add its directory to the system PATH. +Left=0 +Right=-1 +Top=0 +Bottom=20 + +[Field 2] +Type=radiobutton +Text=Do not add @CPACK_PACKAGE_NAME@ to the system PATH +Left=0 +Right=-1 +Top=30 +Bottom=40 +State=1 + +[Field 3] +Type=radiobutton +Text=Add @CPACK_PACKAGE_NAME@ to the system PATH for all users +Left=0 +Right=-1 +Top=40 +Bottom=50 +State=0 + +[Field 4] +Type=radiobutton +Text=Add @CPACK_PACKAGE_NAME@ to the system PATH for current user +Left=0 +Right=-1 +Top=50 +Bottom=60 +State=0 diff --git a/host/cmake/Modules/NSIS.template.in b/host/cmake/Modules/NSIS.template.in new file mode 100644 index 000000000..3ab55d907 --- /dev/null +++ b/host/cmake/Modules/NSIS.template.in @@ -0,0 +1,955 @@ +; CPack install script designed for a nmake build + +;-------------------------------- +; You must define these values + +  !define VERSION "@CPACK_PACKAGE_VERSION@" +  !define PATCH  "@CPACK_PACKAGE_VERSION_PATCH@" +  !define INST_DIR "@CPACK_TEMPORARY_DIRECTORY@" + +;-------------------------------- +;Variables + +  Var MUI_TEMP +  Var STARTMENU_FOLDER +  Var SV_ALLUSERS +  Var START_MENU +  Var DO_NOT_ADD_TO_PATH +  Var ADD_TO_PATH_ALL_USERS +  Var ADD_TO_PATH_CURRENT_USER +  Var INSTALL_DESKTOP +  Var IS_DEFAULT_INSTALLDIR +;-------------------------------- +;Include Modern UI + +  !include "MUI.nsh" + +  ;Default installation folder +  InstallDir "@CPACK_NSIS_INSTALL_ROOT@\@CPACK_PACKAGE_INSTALL_DIRECTORY@" + +;-------------------------------- +;General + +  ;Name and file +  Name "USRP Hardware Driver" +  OutFile "@CPACK_TOPLEVEL_DIRECTORY@/@CPACK_OUTPUT_FILE_NAME@" + +  ;Set compression +  SetCompressor @CPACK_NSIS_COMPRESSOR@ + +@CPACK_NSIS_DEFINES@    + +  !include Sections.nsh + +;--- Component support macros: --- +; The code for the add/remove functionality is from: +;   http://nsis.sourceforge.net/Add/Remove_Functionality +; It has been modified slightly and extended to provide +; inter-component dependencies. +Var AR_SecFlags +Var AR_RegFlags +@CPACK_NSIS_SECTION_SELECTED_VARS@ + +; Loads the "selected" flag for the section named SecName into the +; variable VarName. +!macro LoadSectionSelectedIntoVar SecName VarName + SectionGetFlags ${${SecName}} $${VarName} + IntOp $${VarName} $${VarName} & ${SF_SELECTED}  ;Turn off all other bits +!macroend + +; Loads the value of a variable... can we get around this? +!macro LoadVar VarName +  IntOp $R0 0 + $${VarName} +!macroend + +; Sets the value of a variable +!macro StoreVar VarName IntValue +  IntOp $${VarName} 0 + ${IntValue} +!macroend + +!macro InitSection SecName +  ;  This macro reads component installed flag from the registry and +  ;changes checked state of the section on the components page. +  ;Input: section index constant name specified in Section command. +    +  ClearErrors +  ;Reading component status from registry +  ReadRegDWORD $AR_RegFlags HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\@CPACK_PACKAGE_INSTALL_REGISTRY_KEY@\Components\${SecName}" "Installed" +  IfErrors "default_${SecName}" +    ;Status will stay default if registry value not found +    ;(component was never installed) +  IntOp $AR_RegFlags $AR_RegFlags & ${SF_SELECTED} ;Turn off all other bits +  SectionGetFlags ${${SecName}} $AR_SecFlags  ;Reading default section flags +  IntOp $AR_SecFlags $AR_SecFlags & 0xFFFE  ;Turn lowest (enabled) bit off +  IntOp $AR_SecFlags $AR_RegFlags | $AR_SecFlags      ;Change lowest bit + +  ; Note whether this component was installed before +  !insertmacro StoreVar ${SecName}_was_installed $AR_RegFlags +  IntOp $R0 $AR_RegFlags & $AR_RegFlags +   +  ;Writing modified flags +  SectionSetFlags ${${SecName}} $AR_SecFlags +   + "default_${SecName}:" + !insertmacro LoadSectionSelectedIntoVar ${SecName} ${SecName}_selected +!macroend +  +!macro FinishSection SecName +  ;  This macro reads section flag set by user and removes the section +  ;if it is not selected. +  ;Then it writes component installed flag to registry +  ;Input: section index constant name specified in Section command. +  +  SectionGetFlags ${${SecName}} $AR_SecFlags  ;Reading section flags +  ;Checking lowest bit: +  IntOp $AR_SecFlags $AR_SecFlags & ${SF_SELECTED} +  IntCmp $AR_SecFlags 1 "leave_${SecName}" +    ;Section is not selected: +    ;Calling Section uninstall macro and writing zero installed flag +    !insertmacro "Remove_${${SecName}}" +    WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\@CPACK_PACKAGE_INSTALL_REGISTRY_KEY@\Components\${SecName}" \ +  "Installed" 0 +    Goto "exit_${SecName}" +  + "leave_${SecName}:" +    ;Section is selected: +    WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\@CPACK_PACKAGE_INSTALL_REGISTRY_KEY@\Components\${SecName}" \ +  "Installed" 1 +  + "exit_${SecName}:" +!macroend +  +!macro RemoveSection SecName +  ;  This macro is used to call section's Remove_... macro +  ;from the uninstaller. +  ;Input: section index constant name specified in Section command. +  +  !insertmacro "Remove_${${SecName}}" +!macroend + +; Determine whether the selection of SecName changed +!macro MaybeSelectionChanged SecName +  !insertmacro LoadVar ${SecName}_selected +  SectionGetFlags ${${SecName}} $R1 +  IntOp $R1 $R1 & ${SF_SELECTED} ;Turn off all other bits +   +  ; See if the status has changed: +  IntCmp $R0 $R1 "${SecName}_unchanged" +  !insertmacro LoadSectionSelectedIntoVar ${SecName} ${SecName}_selected +   +  IntCmp $R1 ${SF_SELECTED} "${SecName}_was_selected" +  !insertmacro "Deselect_required_by_${SecName}" +  goto "${SecName}_unchanged" +   +  "${SecName}_was_selected:" +  !insertmacro "Select_${SecName}_depends" +   +  "${SecName}_unchanged:" +!macroend +;--- End of Add/Remove macros --- + +;-------------------------------- +;Interface Settings + +  !define MUI_HEADERIMAGE +  !define MUI_ABORTWARNING +     +;-------------------------------- +; path functions + +!verbose 3 +!include "WinMessages.NSH" +!verbose 4 + +;---------------------------------------- +; based upon a script of "Written by KiCHiK 2003-01-18 05:57:02" +;---------------------------------------- +!verbose 3 +!include "WinMessages.NSH" +!verbose 4 +;==================================================== +; get_NT_environment  +;     Returns: the selected environment +;     Output : head of the stack +;==================================================== +!macro select_NT_profile UN +Function ${UN}select_NT_profile +   StrCmp $ADD_TO_PATH_ALL_USERS "1" 0 environment_single +      DetailPrint "Selected environment for all users" +      Push "all" +      Return +   environment_single: +      DetailPrint "Selected environment for current user only." +      Push "current" +      Return +FunctionEnd +!macroend +!insertmacro select_NT_profile "" +!insertmacro select_NT_profile "un." +;---------------------------------------------------- +!define NT_current_env 'HKCU "Environment"' +!define NT_all_env     'HKLM "SYSTEM\CurrentControlSet\Control\Session Manager\Environment"' + +!ifndef WriteEnvStr_RegKey +  !ifdef ALL_USERS +    !define WriteEnvStr_RegKey \ +       'HKLM "SYSTEM\CurrentControlSet\Control\Session Manager\Environment"' +  !else +    !define WriteEnvStr_RegKey 'HKCU "Environment"' +  !endif +!endif +  +; AddToPath - Adds the given dir to the search path. +;        Input - head of the stack +;        Note - Win9x systems requires reboot +  +Function AddToPath +  Exch $0 +  Push $1 +  Push $2 +  Push $3 +  +  # don't add if the path doesn't exist +  IfFileExists "$0\*.*" "" AddToPath_done +  +  ReadEnvStr $1 PATH +  ; if the path is too long for a NSIS variable NSIS will return a 0  +  ; length string.  If we find that, then warn and skip any path +  ; modification as it will trash the existing path. +  StrLen $2 $1 +  IntCmp $2 0 CheckPathLength_ShowPathWarning CheckPathLength_Done CheckPathLength_Done +    CheckPathLength_ShowPathWarning: +    Messagebox MB_OK|MB_ICONEXCLAMATION "Warning! PATH too long installer unable to modify PATH!" +    Goto AddToPath_done +  CheckPathLength_Done: +  Push "$1;" +  Push "$0;" +  Call StrStr +  Pop $2 +  StrCmp $2 "" "" AddToPath_done +  Push "$1;" +  Push "$0\;" +  Call StrStr +  Pop $2 +  StrCmp $2 "" "" AddToPath_done +  GetFullPathName /SHORT $3 $0 +  Push "$1;" +  Push "$3;" +  Call StrStr +  Pop $2 +  StrCmp $2 "" "" AddToPath_done +  Push "$1;" +  Push "$3\;" +  Call StrStr +  Pop $2 +  StrCmp $2 "" "" AddToPath_done +  +  Call IsNT +  Pop $1 +  StrCmp $1 1 AddToPath_NT +    ; Not on NT +    StrCpy $1 $WINDIR 2 +    FileOpen $1 "$1\autoexec.bat" a +    FileSeek $1 -1 END +    FileReadByte $1 $2 +    IntCmp $2 26 0 +2 +2 # DOS EOF +      FileSeek $1 -1 END # write over EOF +    FileWrite $1 "$\r$\nSET PATH=%PATH%;$3$\r$\n" +    FileClose $1 +    SetRebootFlag true +    Goto AddToPath_done +  +  AddToPath_NT: +    StrCmp $ADD_TO_PATH_ALL_USERS "1" ReadAllKey +      ReadRegStr $1 ${NT_current_env} "PATH" +      Goto DoTrim +    ReadAllKey: +      ReadRegStr $1 ${NT_all_env} "PATH" +    DoTrim: +    StrCmp $1 "" AddToPath_NTdoIt +      Push $1 +      Call Trim +      Pop $1 +      StrCpy $0 "$1;$0" +    AddToPath_NTdoIt: +      StrCmp $ADD_TO_PATH_ALL_USERS "1" WriteAllKey +        WriteRegExpandStr ${NT_current_env} "PATH" $0 +        Goto DoSend +      WriteAllKey: +        WriteRegExpandStr ${NT_all_env} "PATH" $0 +      DoSend: +      SendMessage ${HWND_BROADCAST} ${WM_WININICHANGE} 0 "STR:Environment" /TIMEOUT=5000 +  +  AddToPath_done: +    Pop $3 +    Pop $2 +    Pop $1 +    Pop $0 +FunctionEnd + +  +; RemoveFromPath - Remove a given dir from the path +;     Input: head of the stack +  +Function un.RemoveFromPath +  Exch $0 +  Push $1 +  Push $2 +  Push $3 +  Push $4 +  Push $5 +  Push $6 +  +  IntFmt $6 "%c" 26 # DOS EOF +  +  Call un.IsNT +  Pop $1 +  StrCmp $1 1 unRemoveFromPath_NT +    ; Not on NT +    StrCpy $1 $WINDIR 2 +    FileOpen $1 "$1\autoexec.bat" r +    GetTempFileName $4 +    FileOpen $2 $4 w +    GetFullPathName /SHORT $0 $0 +    StrCpy $0 "SET PATH=%PATH%;$0" +    Goto unRemoveFromPath_dosLoop +  +    unRemoveFromPath_dosLoop: +      FileRead $1 $3 +      StrCpy $5 $3 1 -1 # read last char +      StrCmp $5 $6 0 +2 # if DOS EOF +        StrCpy $3 $3 -1 # remove DOS EOF so we can compare +      StrCmp $3 "$0$\r$\n" unRemoveFromPath_dosLoopRemoveLine +      StrCmp $3 "$0$\n" unRemoveFromPath_dosLoopRemoveLine +      StrCmp $3 "$0" unRemoveFromPath_dosLoopRemoveLine +      StrCmp $3 "" unRemoveFromPath_dosLoopEnd +      FileWrite $2 $3 +      Goto unRemoveFromPath_dosLoop +      unRemoveFromPath_dosLoopRemoveLine: +        SetRebootFlag true +        Goto unRemoveFromPath_dosLoop +  +    unRemoveFromPath_dosLoopEnd: +      FileClose $2 +      FileClose $1 +      StrCpy $1 $WINDIR 2 +      Delete "$1\autoexec.bat" +      CopyFiles /SILENT $4 "$1\autoexec.bat" +      Delete $4 +      Goto unRemoveFromPath_done +  +  unRemoveFromPath_NT: +    StrCmp $ADD_TO_PATH_ALL_USERS "1" unReadAllKey +      ReadRegStr $1 ${NT_current_env} "PATH" +      Goto unDoTrim +    unReadAllKey: +      ReadRegStr $1 ${NT_all_env} "PATH" +    unDoTrim: +    StrCpy $5 $1 1 -1 # copy last char +    StrCmp $5 ";" +2 # if last char != ; +      StrCpy $1 "$1;" # append ; +    Push $1 +    Push "$0;" +    Call un.StrStr ; Find `$0;` in $1 +    Pop $2 ; pos of our dir +    StrCmp $2 "" unRemoveFromPath_done +      ; else, it is in path +      # $0 - path to add +      # $1 - path var +      StrLen $3 "$0;" +      StrLen $4 $2 +      StrCpy $5 $1 -$4 # $5 is now the part before the path to remove +      StrCpy $6 $2 "" $3 # $6 is now the part after the path to remove +      StrCpy $3 $5$6 +  +      StrCpy $5 $3 1 -1 # copy last char +      StrCmp $5 ";" 0 +2 # if last char == ; +        StrCpy $3 $3 -1 # remove last char +  +      StrCmp $ADD_TO_PATH_ALL_USERS "1" unWriteAllKey +        WriteRegExpandStr ${NT_current_env} "PATH" $3 +        Goto unDoSend +      unWriteAllKey: +        WriteRegExpandStr ${NT_all_env} "PATH" $3 +      unDoSend: +      SendMessage ${HWND_BROADCAST} ${WM_WININICHANGE} 0 "STR:Environment" /TIMEOUT=5000 +  +  unRemoveFromPath_done: +    Pop $6 +    Pop $5 +    Pop $4 +    Pop $3 +    Pop $2 +    Pop $1 +    Pop $0 +FunctionEnd +  +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; Uninstall sutff +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +########################################### +#            Utility Functions            # +########################################### +  +;==================================================== +; IsNT - Returns 1 if the current system is NT, 0 +;        otherwise. +;     Output: head of the stack +;==================================================== +; IsNT +; no input +; output, top of the stack = 1 if NT or 0 if not +; +; Usage: +;   Call IsNT +;   Pop $R0 +;  ($R0 at this point is 1 or 0) +  +!macro IsNT un +Function ${un}IsNT +  Push $0 +  ReadRegStr $0 HKLM "SOFTWARE\Microsoft\Windows NT\CurrentVersion" CurrentVersion +  StrCmp $0 "" 0 IsNT_yes +  ; we are not NT. +  Pop $0 +  Push 0 +  Return +  +  IsNT_yes: +    ; NT!!! +    Pop $0 +    Push 1 +FunctionEnd +!macroend +!insertmacro IsNT "" +!insertmacro IsNT "un." +  +; StrStr +; input, top of stack = string to search for +;        top of stack-1 = string to search in +; output, top of stack (replaces with the portion of the string remaining) +; modifies no other variables. +; +; Usage: +;   Push "this is a long ass string" +;   Push "ass" +;   Call StrStr +;   Pop $R0 +;  ($R0 at this point is "ass string") +  +!macro StrStr un +Function ${un}StrStr +Exch $R1 ; st=haystack,old$R1, $R1=needle +  Exch    ; st=old$R1,haystack +  Exch $R2 ; st=old$R1,old$R2, $R2=haystack +  Push $R3 +  Push $R4 +  Push $R5 +  StrLen $R3 $R1 +  StrCpy $R4 0 +  ; $R1=needle +  ; $R2=haystack +  ; $R3=len(needle) +  ; $R4=cnt +  ; $R5=tmp +  loop: +    StrCpy $R5 $R2 $R3 $R4 +    StrCmp $R5 $R1 done +    StrCmp $R5 "" done +    IntOp $R4 $R4 + 1 +    Goto loop +done: +  StrCpy $R1 $R2 "" $R4 +  Pop $R5 +  Pop $R4 +  Pop $R3 +  Pop $R2 +  Exch $R1 +FunctionEnd +!macroend +!insertmacro StrStr "" +!insertmacro StrStr "un." + +Function Trim ; Added by Pelaca +	Exch $R1 +	Push $R2 +Loop: +	StrCpy $R2 "$R1" 1 -1 +	StrCmp "$R2" " " RTrim +	StrCmp "$R2" "$\n" RTrim +	StrCmp "$R2" "$\r" RTrim +	StrCmp "$R2" ";" RTrim +	GoTo Done +RTrim:	 +	StrCpy $R1 "$R1" -1 +	Goto Loop +Done: +	Pop $R2 +	Exch $R1 +FunctionEnd + +Function ConditionalAddToRegisty +  Pop $0 +  Pop $1 +  StrCmp "$0" "" ConditionalAddToRegisty_EmptyString +    WriteRegStr SHCTX "Software\Microsoft\Windows\CurrentVersion\Uninstall\@CPACK_PACKAGE_INSTALL_REGISTRY_KEY@" \ +    "$1" "$0" +    ;MessageBox MB_OK "Set Registry: '$1' to '$0'" +    DetailPrint "Set install registry entry: '$1' to '$0'" +  ConditionalAddToRegisty_EmptyString: +FunctionEnd + +;-------------------------------- + +!ifdef CPACK_USES_DOWNLOAD +Function DownloadFile +    IfFileExists $INSTDIR\* +2 +    CreateDirectory $INSTDIR +    Pop $0 + +    ; Skip if already downloaded +    IfFileExists $INSTDIR\$0 0 +2 +    Return + +    StrCpy $1 "@CPACK_DOWNLOAD_SITE@" + +  try_again: +    NSISdl::download "$1/$0" "$INSTDIR\$0" +     +    Pop $1 +    StrCmp $1 "success" success +    StrCmp $1 "Cancelled" cancel +    MessageBox MB_OK "Download failed: $1" +  cancel: +    Return +  success: +FunctionEnd +!endif + +;-------------------------------- +; Installation types +@CPACK_NSIS_INSTALLATION_TYPES@ + +;-------------------------------- +; Component sections +@CPACK_NSIS_COMPONENT_SECTIONS@ + +;-------------------------------- +; Define some macro setting for the gui +@CPACK_NSIS_INSTALLER_MUI_ICON_CODE@ +@CPACK_NSIS_INSTALLER_ICON_CODE@ +@CPACK_NSIS_INSTALLER_MUI_COMPONENTS_DESC@ +@CPACK_NSIS_INSTALLER_MUI_FINISHPAGE_RUN_CODE@ + +;-------------------------------- +;Pages +  !insertmacro MUI_PAGE_WELCOME + +  !insertmacro MUI_PAGE_LICENSE "@CPACK_RESOURCE_FILE_LICENSE@" +  Page custom InstallOptionsPage +  !insertmacro MUI_PAGE_DIRECTORY +   +  ;Start Menu Folder Page Configuration +  !define MUI_STARTMENUPAGE_REGISTRY_ROOT "SHCTX"  +  !define MUI_STARTMENUPAGE_REGISTRY_KEY "Software\@CPACK_PACKAGE_VENDOR@\@CPACK_PACKAGE_INSTALL_REGISTRY_KEY@"  +  !define MUI_STARTMENUPAGE_REGISTRY_VALUENAME "Start Menu Folder" +  !insertmacro MUI_PAGE_STARTMENU Application $STARTMENU_FOLDER + +  @CPACK_NSIS_PAGE_COMPONENTS@ + +  !insertmacro MUI_PAGE_INSTFILES +  !insertmacro MUI_PAGE_FINISH + +  !insertmacro MUI_UNPAGE_CONFIRM +  !insertmacro MUI_UNPAGE_INSTFILES + +;-------------------------------- +;Languages + +  !insertmacro MUI_LANGUAGE "English" ;first language is the default language +  !insertmacro MUI_LANGUAGE "Albanian" +  !insertmacro MUI_LANGUAGE "Arabic" +  !insertmacro MUI_LANGUAGE "Basque" +  !insertmacro MUI_LANGUAGE "Belarusian" +  !insertmacro MUI_LANGUAGE "Bosnian" +  !insertmacro MUI_LANGUAGE "Breton" +  !insertmacro MUI_LANGUAGE "Bulgarian" +  !insertmacro MUI_LANGUAGE "Croatian" +  !insertmacro MUI_LANGUAGE "Czech" +  !insertmacro MUI_LANGUAGE "Danish" +  !insertmacro MUI_LANGUAGE "Dutch" +  !insertmacro MUI_LANGUAGE "Estonian" +  !insertmacro MUI_LANGUAGE "Farsi" +  !insertmacro MUI_LANGUAGE "Finnish" +  !insertmacro MUI_LANGUAGE "French" +  !insertmacro MUI_LANGUAGE "German" +  !insertmacro MUI_LANGUAGE "Greek" +  !insertmacro MUI_LANGUAGE "Hebrew" +  !insertmacro MUI_LANGUAGE "Hungarian" +  !insertmacro MUI_LANGUAGE "Icelandic" +  !insertmacro MUI_LANGUAGE "Indonesian" +  !insertmacro MUI_LANGUAGE "Irish" +  !insertmacro MUI_LANGUAGE "Italian" +  !insertmacro MUI_LANGUAGE "Japanese" +  !insertmacro MUI_LANGUAGE "Korean" +  !insertmacro MUI_LANGUAGE "Kurdish" +  !insertmacro MUI_LANGUAGE "Latvian" +  !insertmacro MUI_LANGUAGE "Lithuanian" +  !insertmacro MUI_LANGUAGE "Luxembourgish" +  !insertmacro MUI_LANGUAGE "Macedonian" +  !insertmacro MUI_LANGUAGE "Malay" +  !insertmacro MUI_LANGUAGE "Mongolian" +  !insertmacro MUI_LANGUAGE "Norwegian" +  !insertmacro MUI_LANGUAGE "Polish" +  !insertmacro MUI_LANGUAGE "Portuguese" +  !insertmacro MUI_LANGUAGE "PortugueseBR" +  !insertmacro MUI_LANGUAGE "Romanian" +  !insertmacro MUI_LANGUAGE "Russian" +  !insertmacro MUI_LANGUAGE "Serbian" +  !insertmacro MUI_LANGUAGE "SerbianLatin" +  !insertmacro MUI_LANGUAGE "SimpChinese" +  !insertmacro MUI_LANGUAGE "Slovak" +  !insertmacro MUI_LANGUAGE "Slovenian" +  !insertmacro MUI_LANGUAGE "Spanish" +  !insertmacro MUI_LANGUAGE "Swedish" +  !insertmacro MUI_LANGUAGE "Thai" +  !insertmacro MUI_LANGUAGE "TradChinese" +  !insertmacro MUI_LANGUAGE "Turkish" +  !insertmacro MUI_LANGUAGE "Ukrainian" +  !insertmacro MUI_LANGUAGE "Welsh" + + +;-------------------------------- +;Reserve Files + +  ;These files should be inserted before other files in the data block +  ;Keep these lines before any File command +  ;Only for solid compression (by default, solid compression is enabled for BZIP2 and LZMA) + +  ReserveFile "NSIS.InstallOptions.ini" +  !insertmacro MUI_RESERVEFILE_INSTALLOPTIONS + +;-------------------------------- +;Installer Sections + +Section "-Core installation" +  ;Use the entire tree produced by the INSTALL target.  Keep the +  ;list of directories here in sync with the RMDir commands below. +  SetOutPath "$INSTDIR" +  @CPACK_NSIS_FULL_INSTALL@ +   +  ;Store installation folder +  WriteRegStr SHCTX "Software\@CPACK_PACKAGE_VENDOR@\@CPACK_PACKAGE_INSTALL_REGISTRY_KEY@" "" $INSTDIR +   +  ;Create uninstaller +  WriteUninstaller "$INSTDIR\Uninstall.exe" +  Push "DisplayName" +  Push "@CPACK_NSIS_DISPLAY_NAME@" +  Call ConditionalAddToRegisty +  Push "DisplayVersion" +  Push "@CPACK_PACKAGE_VERSION@" +  Call ConditionalAddToRegisty +  Push "Publisher" +  Push "@CPACK_PACKAGE_VENDOR@" +  Call ConditionalAddToRegisty +  Push "UninstallString" +  Push "$INSTDIR\Uninstall.exe" +  Call ConditionalAddToRegisty +  Push "NoRepair" +  Push "1" +  Call ConditionalAddToRegisty +   +  !ifdef CPACK_NSIS_ADD_REMOVE +  ;Create add/remove functionality +  Push "ModifyPath" +  Push "$INSTDIR\AddRemove.exe" +  Call ConditionalAddToRegisty +  !else +  Push "NoModify" +  Push "1" +  Call ConditionalAddToRegisty +  !endif +   +  ; Optional registration +  Push "DisplayIcon" +  Push "$INSTDIR\@CPACK_NSIS_INSTALLED_ICON_NAME@" +  Call ConditionalAddToRegisty +  Push "HelpLink" +  Push "@CPACK_NSIS_HELP_LINK@" +  Call ConditionalAddToRegisty +  Push "URLInfoAbout" +  Push "@CPACK_NSIS_URL_INFO_ABOUT@" +  Call ConditionalAddToRegisty +  Push "Contact" +  Push "@CPACK_NSIS_CONTACT@" +  Call ConditionalAddToRegisty +  !insertmacro MUI_INSTALLOPTIONS_READ $INSTALL_DESKTOP "NSIS.InstallOptions.ini" "Field 5" "State" +  !insertmacro MUI_STARTMENU_WRITE_BEGIN Application +   +  ;Create shortcuts +  CreateDirectory "$SMPROGRAMS\$STARTMENU_FOLDER" +@CPACK_NSIS_CREATE_ICONS@ +@CPACK_NSIS_CREATE_ICONS_EXTRA@ +  CreateShortCut "$SMPROGRAMS\$STARTMENU_FOLDER\Uninstall.lnk" "$INSTDIR\Uninstall.exe" +  CreateShortCut "$SMPROGRAMS\$STARTMENU_FOLDER\USRP2 Card Burner.lnk" "$INSTDIR\lib\uhd\utils\usrp2_card_burner_gui.py" "" "" "" SW_SHOWMINIMIZED +  CreateShortcut "$SMPROGRAMS\$STARTMENU_FOLDER\USRP-N2XX Net Burner.lnk" "$INSTDIR\lib\uhd\utils\usrp_n2xx_net_burner_gui.py" "" "" "" SW_SHOWMINIMIZED +  CreateShortcut "$SMPROGRAMS\$STARTMENU_FOLDER\UHD Images Downloader.lnk" "$INSTDIR\lib\uhd\utils\uhd_images_downloader.py" + +  ;Read a value from an InstallOptions INI file +  !insertmacro MUI_INSTALLOPTIONS_READ $DO_NOT_ADD_TO_PATH "NSIS.InstallOptions.ini" "Field 2" "State" +  !insertmacro MUI_INSTALLOPTIONS_READ $ADD_TO_PATH_ALL_USERS "NSIS.InstallOptions.ini" "Field 3" "State" +  !insertmacro MUI_INSTALLOPTIONS_READ $ADD_TO_PATH_CURRENT_USER "NSIS.InstallOptions.ini" "Field 4" "State" + +  ; Write special uninstall registry entries +  Push "StartMenu" +  Push "$STARTMENU_FOLDER" +  Call ConditionalAddToRegisty +  Push "DoNotAddToPath" +  Push "$DO_NOT_ADD_TO_PATH" +  Call ConditionalAddToRegisty +  Push "AddToPathAllUsers" +  Push "$ADD_TO_PATH_ALL_USERS" +  Call ConditionalAddToRegisty +  Push "AddToPathCurrentUser" +  Push "$ADD_TO_PATH_CURRENT_USER" +  Call ConditionalAddToRegisty +  Push "InstallToDesktop" +  Push "$INSTALL_DESKTOP" +  Call ConditionalAddToRegisty + +  !insertmacro MUI_STARTMENU_WRITE_END + +@CPACK_NSIS_EXTRA_INSTALL_COMMANDS@ + +SectionEnd + +Section "-Add to path" +  Push $INSTDIR\bin +  StrCmp "@CPACK_NSIS_MODIFY_PATH@" "ON" 0 doNotAddToPath +  StrCmp $DO_NOT_ADD_TO_PATH "1" doNotAddToPath 0   +    Call AddToPath +  doNotAddToPath: +SectionEnd + +;-------------------------------- +; Create custom pages +Function InstallOptionsPage +  !insertmacro MUI_HEADER_TEXT "Install Options" "Choose options for installing the USRP Hardware Driver (UHD)" +  !insertmacro MUI_INSTALLOPTIONS_DISPLAY "NSIS.InstallOptions.ini" + +FunctionEnd + +;-------------------------------- +; determine admin versus local install +Function un.onInit + +  ClearErrors +  UserInfo::GetName +  IfErrors noLM +  Pop $0 +  UserInfo::GetAccountType +  Pop $1 +  StrCmp $1 "Admin" 0 +3 +    SetShellVarContext all +    ;MessageBox MB_OK 'User "$0" is in the Admin group' +    Goto done +  StrCmp $1 "Power" 0 +3 +    SetShellVarContext all +    ;MessageBox MB_OK 'User "$0" is in the Power Users group' +    Goto done +     +  noLM: +    ;Get installation folder from registry if available + +  done: +     +FunctionEnd + +;--- Add/Remove callback functions: --- +!macro SectionList MacroName +  ;This macro used to perform operation on multiple sections. +  ;List all of your components in following manner here. +@CPACK_NSIS_COMPONENT_SECTION_LIST@ +!macroend +  +Section -FinishComponents +  ;Removes unselected components and writes component status to registry +  !insertmacro SectionList "FinishSection" +   +!ifdef CPACK_NSIS_ADD_REMOVE   +  ; Get the name of the installer executable +  System::Call 'kernel32::GetModuleFileNameA(i 0, t .R0, i 1024) i r1' +  StrCpy $R3 $R0 +   +  ; Strip off the last 13 characters, to see if we have AddRemove.exe +  StrLen $R1 $R0 +  IntOp $R1 $R0 - 13 +  StrCpy $R2 $R0 13 $R1 +  StrCmp $R2 "AddRemove.exe" addremove_installed +   +  ; We're not running AddRemove.exe, so install it +  CopyFiles $R3 $INSTDIR\AddRemove.exe +   +  addremove_installed: +!endif +SectionEnd +;--- End of Add/Remove callback functions --- + +;-------------------------------- +; Component dependencies +Function .onSelChange +  !insertmacro SectionList MaybeSelectionChanged +FunctionEnd + +;-------------------------------- +;Uninstaller Section + +Section "Uninstall" +  ReadRegStr $START_MENU SHCTX \ +   "Software\Microsoft\Windows\CurrentVersion\Uninstall\@CPACK_PACKAGE_INSTALL_REGISTRY_KEY@" "StartMenu" +  ;MessageBox MB_OK "Start menu is in: $START_MENU" +  ReadRegStr $DO_NOT_ADD_TO_PATH SHCTX \ +    "Software\Microsoft\Windows\CurrentVersion\Uninstall\@CPACK_PACKAGE_INSTALL_REGISTRY_KEY@" "DoNotAddToPath" +  ReadRegStr $ADD_TO_PATH_ALL_USERS SHCTX \ +    "Software\Microsoft\Windows\CurrentVersion\Uninstall\@CPACK_PACKAGE_INSTALL_REGISTRY_KEY@" "AddToPathAllUsers" +  ReadRegStr $ADD_TO_PATH_CURRENT_USER SHCTX \ +    "Software\Microsoft\Windows\CurrentVersion\Uninstall\@CPACK_PACKAGE_INSTALL_REGISTRY_KEY@" "AddToPathCurrentUser" +  ;MessageBox MB_OK "Add to path: $DO_NOT_ADD_TO_PATH all users: $ADD_TO_PATH_ALL_USERS" +  ReadRegStr $INSTALL_DESKTOP SHCTX \ +    "Software\Microsoft\Windows\CurrentVersion\Uninstall\@CPACK_PACKAGE_INSTALL_REGISTRY_KEY@" "InstallToDesktop" +  ;MessageBox MB_OK "Install to desktop: $INSTALL_DESKTOP " + +@CPACK_NSIS_EXTRA_UNINSTALL_COMMANDS@ + +  ;Remove files we installed. +  ;Keep the list of directories here in sync with the File commands above. +@CPACK_NSIS_DELETE_FILES@ +@CPACK_NSIS_DELETE_DIRECTORIES@ + +!ifdef CPACK_NSIS_ADD_REMOVE   +  ;Remove the add/remove program +  Delete "$INSTDIR\AddRemove.exe" +!endif + +  ;Remove the uninstaller itself. +  Delete "$INSTDIR\Uninstall.exe" +  DeleteRegKey SHCTX "Software\Microsoft\Windows\CurrentVersion\Uninstall\@CPACK_PACKAGE_INSTALL_REGISTRY_KEY@" + +  ;Remove the installation directory if it is empty. +  RMDir "$INSTDIR" + +  ; Remove the registry entries. +  DeleteRegKey SHCTX "Software\@CPACK_PACKAGE_VENDOR@\@CPACK_PACKAGE_INSTALL_REGISTRY_KEY@" + +  ; Removes all optional components +  !insertmacro SectionList "RemoveSection" +   +  !insertmacro MUI_STARTMENU_GETFOLDER Application $MUI_TEMP +     +  Delete "$SMPROGRAMS\$MUI_TEMP\Uninstall.lnk" +@CPACK_NSIS_DELETE_ICONS@ +@CPACK_NSIS_DELETE_ICONS_EXTRA@ +   +  ;Delete empty start menu parent diretories +  StrCpy $MUI_TEMP "$SMPROGRAMS\$MUI_TEMP" +  +  startMenuDeleteLoop: +    ClearErrors +    RMDir $MUI_TEMP +    GetFullPathName $MUI_TEMP "$MUI_TEMP\.." +     +    IfErrors startMenuDeleteLoopDone +   +    StrCmp "$MUI_TEMP" "$SMPROGRAMS" startMenuDeleteLoopDone startMenuDeleteLoop +  startMenuDeleteLoopDone: + +  ; If the user changed the shortcut, then untinstall may not work. This should +  ; try to fix it. +  StrCpy $MUI_TEMP "$START_MENU" +  Delete "$SMPROGRAMS\$MUI_TEMP\Uninstall.lnk" +  Delete "$SMPROGRAMS\$MUI_TEMP\USRP2 Card Burner.lnk" +  Delete "$SMPROGRAMS\$MUI_TEMP\USRP-N2XX Net Burner.lnk" +  Delete "$SMPROGRAMS\$MUI_TEMP\UHD Images Downloader.lnk" +@CPACK_NSIS_DELETE_ICONS_EXTRA@ +   +  ;Delete empty start menu parent diretories +  StrCpy $MUI_TEMP "$SMPROGRAMS\$MUI_TEMP" +  +  secondStartMenuDeleteLoop: +    ClearErrors +    RMDir $MUI_TEMP +    GetFullPathName $MUI_TEMP "$MUI_TEMP\.." +     +    IfErrors secondStartMenuDeleteLoopDone +   +    StrCmp "$MUI_TEMP" "$SMPROGRAMS" secondStartMenuDeleteLoopDone secondStartMenuDeleteLoop +  secondStartMenuDeleteLoopDone: + +  DeleteRegKey /ifempty SHCTX "Software\@CPACK_PACKAGE_VENDOR@\@CPACK_PACKAGE_INSTALL_REGISTRY_KEY@" + +  Push $INSTDIR\bin +  StrCmp $DO_NOT_ADD_TO_PATH_ "1" doNotRemoveFromPath 0 +    Call un.RemoveFromPath +  doNotRemoveFromPath: +SectionEnd + +;-------------------------------- +; determine admin versus local install +; Is install for "AllUsers" or "JustMe"? +; Default to "JustMe" - set to "AllUsers" if admin or on Win9x +; This function is used for the very first "custom page" of the installer. +; This custom page does not show up visibly, but it executes prior to the +; first visible page and sets up $INSTDIR properly... +; Choose different default installation folder based on SV_ALLUSERS... +; "Program Files" for AllUsers, "My Documents" for JustMe... + +Function .onInit +  ; Reads components status for registry +  !insertmacro SectionList "InitSection" + +  ; check to see if /D has been used to change  +  ; the install directory by comparing it to the  +  ; install directory that is expected to be the +  ; default +  StrCpy $IS_DEFAULT_INSTALLDIR 0 +  StrCmp "$INSTDIR" "@CPACK_NSIS_INSTALL_ROOT@\@CPACK_PACKAGE_INSTALL_DIRECTORY@" 0 +2 +    StrCpy $IS_DEFAULT_INSTALLDIR 1 +   +  StrCpy $SV_ALLUSERS "JustMe" +  ; if default install dir then change the default +  ; if it is installed for JustMe +  StrCmp "$IS_DEFAULT_INSTALLDIR" "1" 0 +2 +    StrCpy $INSTDIR "$DOCUMENTS\@CPACK_PACKAGE_INSTALL_DIRECTORY@" + +  ClearErrors +  UserInfo::GetName +  IfErrors noLM +  Pop $0 +  UserInfo::GetAccountType +  Pop $1 +  StrCmp $1 "Admin" 0 +3 +    SetShellVarContext all +    ;MessageBox MB_OK 'User "$0" is in the Admin group' +    StrCpy $SV_ALLUSERS "AllUsers" +    Goto done +  StrCmp $1 "Power" 0 +3 +    SetShellVarContext all +    ;MessageBox MB_OK 'User "$0" is in the Power Users group' +    StrCpy $SV_ALLUSERS "AllUsers" +    Goto done +     +  noLM: +    StrCpy $SV_ALLUSERS "AllUsers" +    ;Get installation folder from registry if available + +  done: +  StrCmp $SV_ALLUSERS "AllUsers" 0 +3 +    StrCmp "$IS_DEFAULT_INSTALLDIR" "1" 0 +2 +      StrCpy $INSTDIR "@CPACK_NSIS_INSTALL_ROOT@\@CPACK_PACKAGE_INSTALL_DIRECTORY@" + +  StrCmp "@CPACK_NSIS_MODIFY_PATH@" "ON" 0 noOptionsPage +    !insertmacro MUI_INSTALLOPTIONS_EXTRACT "NSIS.InstallOptions.ini" + +  noOptionsPage: +FunctionEnd diff --git a/host/cmake/Modules/UHDPackage.cmake b/host/cmake/Modules/UHDPackage.cmake index a535241a7..ae11c5042 100644 --- a/host/cmake/Modules/UHDPackage.cmake +++ b/host/cmake/Modules/UHDPackage.cmake @@ -109,7 +109,6 @@ SET(CPACK_COMPONENT_LIBRARIES_GROUP      "Development")  SET(CPACK_COMPONENT_HEADERS_GROUP        "Development")  SET(CPACK_COMPONENT_UTILITIES_GROUP      "Runtime")  SET(CPACK_COMPONENT_EXAMPLES_GROUP       "Runtime") -SET(CPACK_COMPONENT_TESTS_GROUP          "Runtime")  SET(CPACK_COMPONENT_MANUAL_GROUP         "Documentation")  SET(CPACK_COMPONENT_DOXYGEN_GROUP        "Documentation")  SET(CPACK_COMPONENT_README_GROUP         "Documentation") @@ -118,7 +117,6 @@ SET(CPACK_COMPONENT_LIBRARIES_DISPLAY_NAME      "Libraries")  SET(CPACK_COMPONENT_HEADERS_DISPLAY_NAME        "C++ Headers")  SET(CPACK_COMPONENT_UTILITIES_DISPLAY_NAME      "Utilities")  SET(CPACK_COMPONENT_EXAMPLES_DISPLAY_NAME       "Examples") -SET(CPACK_COMPONENT_TESTS_DISPLAY_NAME          "Unit Tests")  SET(CPACK_COMPONENT_MANUAL_DISPLAY_NAME         "Manual")  SET(CPACK_COMPONENT_DOXYGEN_DISPLAY_NAME        "Doxygen")  SET(CPACK_COMPONENT_README_DISPLAY_NAME         "Readme") @@ -128,7 +126,6 @@ SET(CPACK_COMPONENT_LIBRARIES_DESCRIPTION     "Dynamic link library")  SET(CPACK_COMPONENT_HEADERS_DESCRIPTION       "C++ development headers")  SET(CPACK_COMPONENT_UTILITIES_DESCRIPTION     "Utility executables and python scripts")  SET(CPACK_COMPONENT_EXAMPLES_DESCRIPTION      "Example executables") -SET(CPACK_COMPONENT_TESTS_DESCRIPTION         "Unit test executables")  SET(CPACK_COMPONENT_MANUAL_DESCRIPTION        "Manual/application notes (rst and html)")  SET(CPACK_COMPONENT_DOXYGEN_DESCRIPTION       "API documentation (html)")  SET(CPACK_COMPONENT_README_DESCRIPTION        "Readme files (txt)") @@ -140,7 +137,7 @@ SET(CPACK_COMPONENT_UTILITIES_DEPENDS libraries)  SET(CPACK_COMPONENT_EXAMPLES_DEPENDS libraries)  SET(CPACK_COMPONENT_TESTS_DEPENDS libraries) -SET(CPACK_COMPONENTS_ALL libraries headers utilities examples tests manual doxygen readme images) +SET(CPACK_COMPONENTS_ALL libraries headers utilities examples manual doxygen readme images)  ########################################################################  # Setup CPack Debian @@ -179,11 +176,11 @@ SET(CPACK_NSIS_MODIFY_PATH ON)  SET(HLKM_ENV "\\\"SYSTEM\\\\CurrentControlSet\\\\Control\\\\Session Manager\\\\Environment\\\"")  SET(CPACK_NSIS_EXTRA_INSTALL_COMMANDS " -    WriteRegStr HKLM ${HLKM_ENV} \\\"UHD_PKG_DATA_PATH\\\" \\\"$INSTDIR\\\\share\\\\uhd\\\" +    WriteRegStr HKLM ${HLKM_ENV} \\\"UHD_PKG_PATH\\\" \\\"$INSTDIR\\\"  ")  SET(CPACK_NSIS_EXTRA_UNINSTALL_COMMANDS " -    DeleteRegValue HKLM ${HLKM_ENV} \\\"UHD_PKG_DATA_PATH\\\" +    DeleteRegValue HKLM ${HLKM_ENV} \\\"UHD_PKG_PATH\\\"  ")  ######################################################################## diff --git a/host/cmake/Modules/UHDUnitTest.cmake b/host/cmake/Modules/UHDUnitTest.cmake new file mode 100644 index 000000000..47cddc521 --- /dev/null +++ b/host/cmake/Modules/UHDUnitTest.cmake @@ -0,0 +1,110 @@ +# +# Copyright 2010-2012 Ettus Research LLC +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program.  If not, see <http://www.gnu.org/licenses/>. +# + +######################################################################## +# Add a unit test and setup the environment for a unit test. +# Takes the same arguments as the ADD_TEST function. +# +# Before calling set the following variables: +# UHD_TEST_TARGET_DEPS  - built targets for the library path +# UHD_TEST_LIBRARY_DIRS - directories for the library path +######################################################################## +function(UHD_ADD_TEST test_name) + +        #Ensure that the build exe also appears in the PATH. +        list(APPEND UHD_TEST_TARGET_DEPS ${ARGN}) + +        #In the land of windows, all libraries must be in the PATH. +        #Since the dependent libraries are not yet installed, +        #we must manually set them in the PATH to run tests. +        #The following appends the path of a target dependency. +        foreach(target ${UHD_TEST_TARGET_DEPS}) +            get_target_property(location ${target} LOCATION) +            if(location) +                get_filename_component(path ${location} PATH) +                string(REGEX REPLACE "\\$\\(.*\\)" ${CMAKE_BUILD_TYPE} path ${path}) +                list(APPEND UHD_TEST_LIBRARY_DIRS ${path}) +            endif(location) +        endforeach(target) + +    file(TO_NATIVE_PATH ${CMAKE_CURRENT_SOURCE_DIR} srcdir) +    file(TO_NATIVE_PATH "${UHD_TEST_LIBRARY_DIRS}" libpath) #ok to use on dir list? + +    #http://www.cmake.org/pipermail/cmake/2009-May/029464.html +    #Replaced this add test + set environs code with the shell script generation. +    #Its nicer to be able to manually run the shell script to diagnose problems. +    #ADD_TEST(${ARGV}) +    #SET_TESTS_PROPERTIES(${test_name} PROPERTIES ENVIRONMENT "${environs}") + +    if(UNIX) +        set(LD_PATH_VAR "LD_LIBRARY_PATH") +        if(APPLE) +            set(LD_PATH_VAR "DYLD_LIBRARY_PATH") +        endif() + +        set(binpath "${CMAKE_CURRENT_BINARY_DIR}:$PATH") +        list(APPEND libpath "$${LD_PATH_VAR}") + +        #replace list separator with the path separator +        string(REPLACE ";" ":" libpath "${libpath}") +        list(APPEND environs "PATH=${binpath}" "${LD_PATH_VAR}=${libpath}") + +        #generate a bat file that sets the environment and runs the test +        find_program(SHELL sh) +        set(sh_file ${CMAKE_CURRENT_BINARY_DIR}/${test_name}_test.sh) +        file(WRITE ${sh_file} "#!${SHELL}\n") +        #each line sets an environment variable +        foreach(environ ${environs}) +            file(APPEND ${sh_file} "export ${environ}\n") +        endforeach(environ) +        #load the command to run with its arguments +        foreach(arg ${ARGN}) +            file(APPEND ${sh_file} "${arg} ") +        endforeach(arg) +        file(APPEND ${sh_file} "\n") + +        #make the shell file executable +        execute_process(COMMAND chmod +x ${sh_file}) + +        add_test(${test_name} ${SHELL} ${sh_file}) + +    endif(UNIX) + +    if(WIN32) +        list(APPEND libpath ${DLL_PATHS} "%PATH%") + +        #replace list separator with the path separator (escaped) +        string(REPLACE ";" "\\;" libpath "${libpath}") +        list(APPEND environs "PATH=${libpath}") + +        #generate a bat file that sets the environment and runs the test +        set(bat_file ${CMAKE_CURRENT_BINARY_DIR}/${test_name}_test.bat) +        file(WRITE ${bat_file} "@echo off\n") +        #each line sets an environment variable +        foreach(environ ${environs}) +            file(APPEND ${bat_file} "SET ${environ}\n") +        endforeach(environ) +        #load the command to run with its arguments +        foreach(arg ${ARGN}) +            file(APPEND ${bat_file} "${arg} ") +        endforeach(arg) +        file(APPEND ${bat_file} "\n") + +        add_test(${test_name} ${bat_file}) +    endif(WIN32) + +endfunction(UHD_ADD_TEST) diff --git a/host/cmake/debian/postinst.in b/host/cmake/debian/postinst.in index eaca15394..bc27c46f0 100755 --- a/host/cmake/debian/postinst.in +++ b/host/cmake/debian/postinst.in @@ -1,6 +1,6 @@  #!/bin/sh  # -# Copyright 2011 Ettus Research LLC +# Copyright 2011,2013 Ettus Research LLC  #  # This program is free software: you can redistribute it and/or modify  # it under the terms of the GNU General Public License as published by @@ -17,7 +17,7 @@  #  if [ "$1" = "configure" ]; then -    cp @CMAKE_INSTALL_PREFIX@/share/uhd/utils/uhd-usrp.rules /etc/udev/rules.d/uhd-usrp.rules +    cp @CMAKE_INSTALL_PREFIX@/lib/uhd/utils/uhd-usrp.rules /etc/udev/rules.d/uhd-usrp.rules      udevadm control --reload-rules      ldconfig  fi diff --git a/host/cmake/redhat/post_install.in b/host/cmake/redhat/post_install.in index 01fd3338f..25864e0ec 100755 --- a/host/cmake/redhat/post_install.in +++ b/host/cmake/redhat/post_install.in @@ -1,6 +1,6 @@  #!/bin/sh  # -# Copyright 2011 Ettus Research LLC +# Copyright 2011,2013 Ettus Research LLC  #  # This program is free software: you can redistribute it and/or modify  # it under the terms of the GNU General Public License as published by @@ -16,6 +16,6 @@  # along with this program.  If not, see <http://www.gnu.org/licenses/>.  # -cp @CMAKE_INSTALL_PREFIX@/share/uhd/utils/uhd-usrp.rules /etc/udev/rules.d/uhd-usrp.rules +cp @CMAKE_INSTALL_PREFIX@/lib/uhd/utils/uhd-usrp.rules /etc/udev/rules.d/uhd-usrp.rules  udevadm control --reload-rules  ldconfig | 
